diff --git a/web-citizen-reporting/web-citizen-reporting-template/src/components/notifications.tsx b/web-citizen-reporting/web-citizen-reporting-template/src/components/notifications.tsx new file mode 100644 index 000000000..ab6cfc6d7 --- /dev/null +++ b/web-citizen-reporting/web-citizen-reporting-template/src/components/notifications.tsx @@ -0,0 +1,58 @@ +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { cn } from "@/lib/utils"; +import { Link } from "@tanstack/react-router"; +import type { FC } from "react"; +import { Button } from "./ui/button"; + +interface NotificationProps { + id: string; + sentAt: Date; + title: string; + body: string; + isInsideList?: boolean; +} + +export const Notification: FC = ({ + id, + sentAt, + title, + body, + isInsideList, +}) => { + return ( + + + {title} + + Sent at: {new Date(sentAt).toLocaleString("en-GB")} + + + +
+ + + {isInsideList && ( + + {" "} + + )} + + + ); +}; + +export default Notification; diff --git a/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationDetails.tsx b/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationDetails.tsx index a57d63a4a..35b426e4e 100644 --- a/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationDetails.tsx +++ b/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationDetails.tsx @@ -1,5 +1,7 @@ +import Notification from "@/components/notifications"; import { useNotifications } from "@/queries/use-notifications"; import { Route } from "@/routes/notifications/$notificationId"; +import { notFound } from "@tanstack/react-router"; function NotificationDetails() { const { notificationId } = Route.useParams(); @@ -7,7 +9,16 @@ function NotificationDetails() { notification.notifications.find((n) => n.id == notificationId) ); - return <>{JSON.stringify(notification)}; + if (!notification) throw notFound(); + + return ( + + ); } export default NotificationDetails; diff --git a/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationsList.tsx b/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationsList.tsx index da22eb501..fe8bd6633 100644 --- a/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationsList.tsx +++ b/web-citizen-reporting/web-citizen-reporting-template/src/pages/NotificationsList.tsx @@ -1,9 +1,28 @@ +import Notification from "@/components/notifications"; import { useNotifications } from "@/queries/use-notifications"; +import { typographyClasses } from "@/routes/typography"; function NotificationsList() { const { data: notification } = useNotifications(); - return <>{JSON.stringify(notification)}; + return ( +
+

+ Notifications from {notification?.ngoName} +

+
+ {notification?.notifications.map((notification) => ( + + ))} +
+
+ ); } export default NotificationsList; diff --git a/web-citizen-reporting/web-citizen-reporting-template/src/routes/__root.tsx b/web-citizen-reporting/web-citizen-reporting-template/src/routes/__root.tsx index 2c24cdff0..1e53cb0ee 100644 --- a/web-citizen-reporting/web-citizen-reporting-template/src/routes/__root.tsx +++ b/web-citizen-reporting/web-citizen-reporting-template/src/routes/__root.tsx @@ -1,24 +1,28 @@ import { Outlet, createRootRouteWithContext, + useLocation, useRouterState, } from "@tanstack/react-router"; import Footer from "@/components/Footer"; import { SiteHeader } from "@/components/SiteHeader"; -import type { QueryClient } from "@tanstack/react-query"; -import NotFound from "@/pages/NotFound"; import { Spinner } from "@/components/Spinner"; +import NotFound from "@/pages/NotFound"; +import type { QueryClient } from "@tanstack/react-query"; function RouterSpinner() { const isLoading = useRouterState({ select: (s) => s.status === "pending" }); return ; } -export const Route = createRootRouteWithContext<{ - queryClient: QueryClient; -}>()({ - component: () => ( +function RootComponent() { + const pathname = useLocation({ + select: (location) => location.pathname, + }); + const isFooterHidden = pathname === "/thank-you"; + + return ( <>
@@ -29,10 +33,16 @@ export const Route = createRootRouteWithContext<{
-
+ {!isFooterHidden &&
}
- ), + ); +} + +export const Route = createRootRouteWithContext<{ + queryClient: QueryClient; +}>()({ + component: () => , notFoundComponent: () => , }); diff --git a/web-citizen-reporting/web-citizen-reporting-template/src/routes/typography.tsx b/web-citizen-reporting/web-citizen-reporting-template/src/routes/typography.tsx index d83533b7c..8d2669bf5 100644 --- a/web-citizen-reporting/web-citizen-reporting-template/src/routes/typography.tsx +++ b/web-citizen-reporting/web-citizen-reporting-template/src/routes/typography.tsx @@ -1,5 +1,19 @@ import { createFileRoute } from "@tanstack/react-router"; +export const typographyClasses = { + h1: "scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl", + p: "leading-7 [&:not(:first-child)]:mt-6", + h2: "mt-10 scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight transition-colors first:mt-0", + a: "font-medium text-primary underline underline-offset-4", + blockquote: "mt-6 border-l-2 pl-6 italic", + h3: "mt-8 scroll-m-20 text-2xl font-semibold tracking-tight", + ul: "my-6 ml-6 list-disc [&>li]:mt-2", + table: "w-full", + tr: "m-0 border-t p-0 even:bg-muted", + th: "border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right", + td: "border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right", +}; + export const Route = createFileRoute("/typography")({ component: TypographyDemo, });