diff --git a/enshi/src/Pages/BlogPage/BlogPage.tsx b/enshi/src/Pages/BlogPage/BlogPage.tsx new file mode 100644 index 0000000..fc1ae4a --- /dev/null +++ b/enshi/src/Pages/BlogPage/BlogPage.tsx @@ -0,0 +1,13 @@ +import { Box } from '@radix-ui/themes' +import { useParams } from 'react-router-dom' + + +export default function BlogPage() { + const queryParams = useParams() + + return ( + + + + ) +} diff --git a/enshi/src/Pages/UserBlogsPage/BlogBox/BlogBox.tsx b/enshi/src/Pages/UserBlogsPage/BlogBox/BlogBox.tsx new file mode 100644 index 0000000..4c62b4b --- /dev/null +++ b/enshi/src/Pages/UserBlogsPage/BlogBox/BlogBox.tsx @@ -0,0 +1,21 @@ +import { Card } from '@radix-ui/themes'; +import { useNavigate } from 'react-router-dom'; + +type TBlogBox = { + title?: string; + blogId?: string; +} + +export default function BlogBox(props: TBlogBox) { + + const navigate = useNavigate() + + return ( + navigate(``)} + > + {props?.title || "...No title..."} + {props?.blogId || "adqwwd"} + + ) +} diff --git a/enshi/src/Pages/UserBlogsPage/SkeletonBoxes/SkeletonBoxes.tsx b/enshi/src/Pages/UserBlogsPage/SkeletonBoxes/SkeletonBoxes.tsx new file mode 100644 index 0000000..2419e98 --- /dev/null +++ b/enshi/src/Pages/UserBlogsPage/SkeletonBoxes/SkeletonBoxes.tsx @@ -0,0 +1,17 @@ +import { Box, Skeleton } from "@radix-ui/themes"; + +export default function SkeletonBoxes() { + return ( + <> + + + + + + + + + + + ); +} diff --git a/enshi/src/Pages/UserBlogsPage/UserBlogsPage.tsx b/enshi/src/Pages/UserBlogsPage/UserBlogsPage.tsx new file mode 100644 index 0000000..1396ee4 --- /dev/null +++ b/enshi/src/Pages/UserBlogsPage/UserBlogsPage.tsx @@ -0,0 +1,69 @@ +import { Box, Container, Flex } from "@radix-ui/themes"; +import { useQuery } from "@tanstack/react-query"; +import { useAtomValue } from "jotai"; +import { userAtom } from "../../AtomStore/AtomStore"; +import { axiosLocalhost } from "../../api/axios/axios"; +import BlogBox from "./BlogBox/BlogBox"; +import SkeletonBoxes from "./SkeletonBoxes/SkeletonBoxes"; + +export default function UserBlogsPage() { + const user = useAtomValue(userAtom); + + const isBigNumber = (num: any) => !Number.isSafeInteger(+num); + + const enquoteBigNumber = (jsonString: any, bigNumChecker: any) => + jsonString.replaceAll( + /([:\s\[,]*)(\d+)([\s,\]]*)/g, + (matchingSubstr: any, prefix: any, bigNum: any, suffix: any) => + bigNumChecker(bigNum) + ? `${prefix}"${bigNum}"${suffix}` + : matchingSubstr + ); + + const parseWithBigInt = (jsonString: any, bigNumChecker: any) => + JSON.parse(enquoteBigNumber(jsonString, bigNumChecker), (key, value) => + !isNaN(value) && bigNumChecker(value) + ? BigInt(value).toString() + : value + ); + + const { data, isPending, isFetching } = useQuery({ + queryKey: ["userBlogs"], + queryFn: async () => { + const response = await axiosLocalhost.get("/user/blogs", { + transformResponse: [(data) => data], + }); + + let temp = parseWithBigInt(response.data, isBigNumber); + + return temp as any[]; + }, + }); + + if (isFetching) + return ( + + + + ); + + return ( + + + + {data + ? data?.map((blog: any, b) => { + return ( + + ); + }) + : null} + + + + ); +} diff --git a/enshi/src/Pages/MainPage/MainPage.tsx b/enshi/src/layout/MainPage/MainPage.tsx similarity index 100% rename from enshi/src/Pages/MainPage/MainPage.tsx rename to enshi/src/layout/MainPage/MainPage.tsx diff --git a/enshi/src/routes/routes.tsx b/enshi/src/routes/routes.tsx index 86b324e..ef8fa3e 100644 --- a/enshi/src/routes/routes.tsx +++ b/enshi/src/routes/routes.tsx @@ -1,17 +1,20 @@ import { Text } from "@radix-ui/themes"; import { createRoutesFromElements, + Outlet, Route, useRouteError, } from "react-router-dom"; import ArticleViewer from "../Components/ArticleViewer/ArticleViewer"; +import MainPage from "../layout/MainPage/MainPage"; import AuthPageWrapper from "../Pages/AuthPageWrapper/AuthPageWrapper"; +import BlogPage from "../Pages/BlogPage/BlogPage"; import LoginPage from "../Pages/LoginRegisterPage/LoginPage/LoginPage"; import PostRedactor from "../Pages/LoginRegisterPage/PostRedactor/PostRedactor"; import RegisterPage from "../Pages/LoginRegisterPage/RegisterPage/RegisterPage"; -import MainPage from "../Pages/MainPage/MainPage"; import PostCreatorPage from "../Pages/PostCreatorPage/PostCreatorPage"; import RandomPostsPage from "../Pages/RandomPostsPage/RandomPostsPage"; +import UserBlogsPage from "../Pages/UserBlogsPage/UserBlogsPage"; function ErrorBoundary() { let error = useRouteError(); @@ -26,14 +29,16 @@ export const routes = createRoutesFromElements( } /> This page is yet to be created + + This page is yet to be created + } /> @@ -41,8 +46,21 @@ export const routes = createRoutesFromElements( } /> - } /> - } /> + } /> + + }> + + + + } + /> + + + } /> + } />