diff --git a/apps/web/public/svg/magnifyingGlass.svg b/apps/web/public/svg/magnifyingGlass.svg new file mode 100644 index 0000000..7cb952f --- /dev/null +++ b/apps/web/public/svg/magnifyingGlass.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/public/svg/star.svg b/apps/web/public/svg/star.svg new file mode 100644 index 0000000..9afaa96 --- /dev/null +++ b/apps/web/public/svg/star.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/src/app/(pages)/(dashboard)/roles/page.tsx b/apps/web/src/app/(pages)/(dashboard)/roles/page.tsx index e47adbe..9ca95c1 100644 --- a/apps/web/src/app/(pages)/(dashboard)/roles/page.tsx +++ b/apps/web/src/app/(pages)/(dashboard)/roles/page.tsx @@ -1,115 +1,59 @@ "use client"; import { useEffect, useState } from "react"; -import { z } from "zod"; -import type { - ReviewType, - WorkEnvironmentType, - WorkTermType, -} from "@cooper/db/schema"; -import { WorkEnvironment, WorkTerm } from "@cooper/db/schema"; +import type { RoleType } from "@cooper/db/schema"; import { cn } from "@cooper/ui"; -import { useToast } from "@cooper/ui/hooks/use-toast"; import LoadingResults from "~/app/_components/loading-results"; import NoResults from "~/app/_components/no-results"; -import { ReviewCard } from "~/app/_components/reviews/review-card"; -import { ReviewCardPreview } from "~/app/_components/reviews/review-card-preview"; -import SearchFilter from "~/app/_components/search/search-filter"; +import { RoleCardPreview } from "~/app/_components/reviews/role-card-preview"; +import { RoleInfo } from "~/app/_components/reviews/role-info"; import { api } from "~/trpc/react"; -export default function Roles({ - searchParams, -}: { - searchParams?: { - search?: string; - cycle?: WorkTermType; - term?: WorkEnvironmentType; - }; -}) { - const { toast } = useToast(); +export default function Roles() { + const roles = api.role.list.useQuery(); - const RolesSearchParam = z.object({ - cycle: z - .nativeEnum(WorkTerm, { - message: "Invalid cycle type", - }) - .optional(), - term: z - .nativeEnum(WorkEnvironment, { - message: "Invalid term type", - }) - .optional(), - }); - - const validationResult = RolesSearchParam.safeParse(searchParams); - const [mounted, setMounted] = useState(false); - - useEffect(() => { - setMounted(true); - }, []); - - useEffect(() => { - if (mounted && !validationResult.success) { - toast({ - title: "Invalid Search Parameters", - description: validationResult.error.issues - .map((issue) => issue.message) - .join(", "), - variant: "destructive", - }); - setMounted(false); - } - }, [toast, mounted, validationResult]); - - const reviews = api.review.list.useQuery({ - search: searchParams?.search, - options: validationResult.success ? validationResult.data : {}, - }); - - const [selectedReview, setSelectedReview] = useState( - reviews.isSuccess ? reviews.data[0] : undefined, + const [selectedRole, setSelectedRole] = useState( + roles.isSuccess ? roles.data[0] : undefined, ); useEffect(() => { - if (reviews.isSuccess) { - setSelectedReview(reviews.data[0]); + if (roles.isSuccess) { + setSelectedRole(roles.data[0]); } - }, [reviews.isSuccess, reviews.data]); + }, [roles.isSuccess, roles.data]); return ( <> - - {reviews.isSuccess && reviews.data.length > 0 && ( -
-
- {reviews.data.map((review, i) => { + {roles.isSuccess && roles.data.length > 0 && ( +
+
+ {roles.data.map((role, i) => { return ( -
setSelectedReview(review)}> - setSelectedRole(role)}> +
); })}
-
- {reviews.data.length > 0 && reviews.data[0] && ( - +
+ {roles.data.length > 0 && roles.data[0] && ( + )}
)} - {reviews.isSuccess && reviews.data.length === 0 && } - {reviews.isPending && } + {roles.isSuccess && roles.data.length === 0 && } + {roles.isPending && } ); } diff --git a/apps/web/src/app/_components/combo-box.tsx b/apps/web/src/app/_components/combo-box.tsx index d3f417e..9b9e573 100644 --- a/apps/web/src/app/_components/combo-box.tsx +++ b/apps/web/src/app/_components/combo-box.tsx @@ -25,6 +25,7 @@ interface ComboBoxProps { valuesAndLabels: ComboBoxOption[]; currLabel: string; onSelect: (option: string) => void; + triggerClassName?: string; } /** @@ -39,17 +40,24 @@ export default function ComboBox({ valuesAndLabels, currLabel, onSelect, + triggerClassName, }: ComboBoxProps) { const [isOpen, setIsOpen] = useState(false); return ( - + + ( + + + + + + )} + /> +
+ ); +} diff --git a/apps/web/src/app/_components/themed/onboarding/input.tsx b/apps/web/src/app/_components/themed/onboarding/input.tsx index c592b03..21c0b2e 100644 --- a/apps/web/src/app/_components/themed/onboarding/input.tsx +++ b/apps/web/src/app/_components/themed/onboarding/input.tsx @@ -3,7 +3,7 @@ import { Input as InputPrimitive } from "@cooper/ui/input"; export function Input(props: React.ComponentProps) { return ( ); diff --git a/apps/web/src/app/_components/themed/onboarding/select.tsx b/apps/web/src/app/_components/themed/onboarding/select.tsx index feb34ce..f363539 100644 --- a/apps/web/src/app/_components/themed/onboarding/select.tsx +++ b/apps/web/src/app/_components/themed/onboarding/select.tsx @@ -18,12 +18,12 @@ export const Select: React.FC = ({