diff --git a/client/package.json b/client/package.json index c07ac56..f71bbaf 100644 --- a/client/package.json +++ b/client/package.json @@ -22,6 +22,7 @@ "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-toast": "^1.1.5", + "@types/nprogress": "^0.2.3", "axios": "^1.6.8", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -29,6 +30,7 @@ "lucide-react": "^0.363.0", "next": "14.1.4", "next-themes": "^0.3.0", + "nprogress": "^0.2.0", "react": "^18", "react-dom": "^18", "react-hook-form": "^7.51.2", diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml index c632f30..3eac89c 100644 --- a/client/pnpm-lock.yaml +++ b/client/pnpm-lock.yaml @@ -41,6 +41,12 @@ dependencies: '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.2.67)(react@18.2.0) + '@radix-ui/react-toast': + specifier: ^1.1.5 + version: 1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0) + '@types/nprogress': + specifier: ^0.2.3 + version: 0.2.3 axios: specifier: ^1.6.8 version: 1.6.8 @@ -62,6 +68,9 @@ dependencies: next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.2.0)(react@18.2.0) + nprogress: + specifier: ^0.2.0 + version: 0.2.0 react: specifier: ^18 version: 18.2.0 @@ -3991,6 +4000,38 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-toast@1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.67)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.67)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.67)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.67)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.67)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.67 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.67)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: @@ -4497,6 +4538,10 @@ packages: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: false + /@types/nprogress@0.2.3: + resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + dev: false + /@types/parse-json@4.0.2: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} dev: false @@ -12337,6 +12382,10 @@ packages: path-key: 3.1.1 dev: false + /nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + dev: false + /nth-check@1.0.2: resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} dependencies: diff --git a/client/src/app/(forum)/forum/[slug]/page.tsx b/client/src/app/(forum)/forum/[slug]/page.tsx index 3c72d7b..a4940e3 100644 --- a/client/src/app/(forum)/forum/[slug]/page.tsx +++ b/client/src/app/(forum)/forum/[slug]/page.tsx @@ -42,7 +42,7 @@ function Page({ params }: { params: { slug: string } }) { diff --git a/client/src/app/[username]/page.tsx b/client/src/app/[username]/page.tsx index f01c3f6..48063a8 100644 --- a/client/src/app/[username]/page.tsx +++ b/client/src/app/[username]/page.tsx @@ -5,9 +5,17 @@ import React from "react"; import { useState } from 'react'; import useSWR from 'swr'; import Link from 'next/link'; +import { Button } from "~/components/ui/button"; +import { FaPlus, FaMinus } from "react-icons/fa6"; +import { useUser } from "@clerk/clerk-react"; function UserProfile({ params }: { params: { username: string } }) { - const { getUser, getUserPosts, getUserComments, getUserFollowers, getUserFollowing, getUserSubscriptions, getUserPostVotes, getUserCommentVotes } = useFetcher(); + const { getUser, getUserPosts, getUserComments, getUserFollowers, getUserFollowing, getUserSubscriptions, getUserPostVotes, getUserCommentVotes, followUser, unfollowUser } = useFetcher(); + const { user } = useUser(); + const currentUsername = user?.username; + const { data: currentfollowings } = useSWR(`getUserFollowing/${currentUsername}`, getUserFollowing); + const followingUsernames = currentfollowings?.followings?.map(following => following.username) || []; + console.log("currentfollowings", followingUsernames); const { data: userProfile, error } = useSWR(`getUser/${params.username}`, getUser); const [selectedTab, setSelectedTab] = useState('posts'); @@ -42,7 +50,7 @@ function UserProfile({ params }: { params: { username: string } }) {
{userProfile.email}
+{userProfile.email}
{userProfile.aboutMe}