Skip to content

Commit fc538a6

Browse files
committed
Update frontend to use complexity enums
1 parent 61a7f7d commit fc538a6

29 files changed

+1260
-235
lines changed

frontend/app/auth/auth-context.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22

3-
import { userServiceUri } from "@/lib/api-uri";
3+
import { userServiceUri } from "@/lib/api/api-uri";
44
import { User, UserSchema } from "@/lib/schemas/user-schema";
55
import { useRouter } from "next/navigation";
66
import {

frontend/components/admin-user-management/admin-edit-user-modal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import {
1111
import { Button } from "../ui/button";
1212
import { Input } from "../ui/input";
1313
import { Label } from "../ui/label";
14-
import { updateUser } from "@/lib/update-user";
14+
import { updateUser } from "@/lib/api/user-service/update-user";
1515
import { useAuth } from "@/app/auth/auth-context";
1616
import { useToast } from "@/components/hooks/use-toast";
1717
import { Switch } from "../ui/switch";
18-
import { updateUserPrivilege } from "@/lib/update-user-privilege";
18+
import { updateUserPrivilege } from "@/lib/api/user-service/update-user-privilege";
1919
import { User } from "@/lib/schemas/user-schema";
2020

2121
interface AdminEditUserModalProps extends React.HTMLProps<HTMLDivElement> {

frontend/components/admin-user-management/admin-user-management.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import LoadingScreen from "@/components/common/loading-screen";
1616
import AdminEditUserModal from "@/components/admin-user-management/admin-edit-user-modal";
1717
import { PencilIcon, Trash2Icon } from "lucide-react";
1818
import { User, UserArraySchema } from "@/lib/schemas/user-schema";
19-
import { userServiceUri } from "@/lib/api-uri";
19+
import { userServiceUri } from "@/lib/api/api-uri";
2020

2121
const fetcher = async (url: string): Promise<User[]> => {
2222
const token = localStorage.getItem("jwtToken");

frontend/components/auth/reset-password-form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { useState } from "react";
44
import { useRouter } from "next/navigation";
5-
import { resetPassword } from "@/lib/reset-password";
5+
import { resetPassword } from "@/lib/api/user-service/reset-password";
66
import { isPasswordComplex } from "@/lib/password";
77
import { useToast } from "@/components/hooks/use-toast";
88

frontend/components/auth/sign-up-form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Link from "next/link";
44
import { useState } from "react";
55
import { useRouter } from "next/navigation";
66
import { toast } from "@/components/hooks/use-toast";
7-
import { signUp } from "@/lib/signup";
7+
import { signUp } from "@/lib/api/user-service/signup";
88
import { isPasswordComplex } from "@/lib/password";
99

1010
import { Button } from "@/components/ui/button";

frontend/components/forget-password.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { Label } from "@/components/ui/label";
1515
import { Button } from "@/components/ui/button";
1616
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
1717
import { AlertCircle } from "lucide-react";
18-
import { userServiceUri } from "@/lib/api-uri";
18+
import { userServiceUri } from "@/lib/api/api-uri";
1919

2020
const ForgetPassword: React.FC = () => {
2121
const [email, setEmail] = useState("");

frontend/components/questions/question-filter.tsx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import {
1212
SelectTrigger,
1313
SelectValue,
1414
} from "@/components/ui/select";
15+
import {
16+
CategoryEnumArray,
17+
ComplexityEnumArray,
18+
} from "@/lib/schemas/question-schema";
1519

1620
interface QuestionFilterProps {
1721
category: string;
@@ -52,13 +56,20 @@ const QuestionFilter: React.FC<QuestionFilterProps> = ({
5256
</div>
5357
<div>
5458
<Label htmlFor="category">Category</Label>
55-
<Input
56-
id="category"
59+
<Select
5760
value={category}
58-
onChange={(e) => onCategoryChange(e.target.value)}
59-
placeholder="Enter category"
60-
className="mt-1"
61-
/>
61+
onValueChange={(value) => onCategoryChange(value)}
62+
>
63+
<SelectTrigger id="category" className="mt-1">
64+
<SelectValue placeholder="Select category" />
65+
</SelectTrigger>
66+
<SelectContent>
67+
<SelectItem value="all">All</SelectItem>
68+
{CategoryEnumArray.map((category) => (
69+
<SelectItem value={category}>{category}</SelectItem>
70+
))}
71+
</SelectContent>
72+
</Select>
6273
</div>
6374
<div>
6475
<Label htmlFor="complexity">Complexity</Label>
@@ -71,9 +82,9 @@ const QuestionFilter: React.FC<QuestionFilterProps> = ({
7182
</SelectTrigger>
7283
<SelectContent>
7384
<SelectItem value="all">All</SelectItem>
74-
<SelectItem value="easy">Easy</SelectItem>
75-
<SelectItem value="medium">Medium</SelectItem>
76-
<SelectItem value="hard">Hard</SelectItem>
85+
{ComplexityEnumArray.map((complexity) => (
86+
<SelectItem value={complexity}>{complexity}</SelectItem>
87+
))}
7788
</SelectContent>
7889
</Select>
7990
</div>

frontend/components/questions/question-form-modal.tsx

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
"use client";
22

3-
import { Question } from "@/lib/schemas/question-schema";
3+
import {
4+
CategoryEnum,
5+
CategoryEnumArray,
6+
ComplexityEnum,
7+
ComplexityEnumArray,
8+
Question,
9+
} from "@/lib/schemas/question-schema";
410
import { useEffect, useState } from "react";
511
import { Input } from "@/components/ui/input";
612
import {
@@ -19,6 +25,7 @@ import {
1925
DialogFooter,
2026
DialogHeader,
2127
} from "@/components/ui/dialog";
28+
import { MultiSelect } from "@/components/ui/multi-select";
2229

2330
interface QuestionFormModalProps {
2431
showModal: boolean;
@@ -33,8 +40,8 @@ const QuestionFormModal: React.FC<QuestionFormModalProps> = ({ ...props }) => {
3340
const initialQuestionState: Question = {
3441
id: "",
3542
title: "",
36-
category: "",
37-
complexity: "easy",
43+
categories: [],
44+
complexity: "Easy",
3845
description: "",
3946
};
4047

@@ -85,15 +92,19 @@ const QuestionFormModal: React.FC<QuestionFormModalProps> = ({ ...props }) => {
8592
</DialogHeader>
8693
<div>
8794
<Label>Category</Label>
88-
<Input
89-
id="category"
90-
value={question.category}
95+
<MultiSelect
9196
className="mt-2"
92-
onChange={(e) =>
93-
setQuestion({ ...question, category: e.target.value })
97+
defaultValue={question.categories as string[]}
98+
options={CategoryEnumArray.map((category) => ({
99+
label: category,
100+
value: category,
101+
}))}
102+
onValueChange={(v) =>
103+
setQuestion({
104+
...question,
105+
categories: v as CategoryEnum[],
106+
})
94107
}
95-
disabled={!props.isAdmin}
96-
required
97108
/>
98109
</div>
99110

@@ -103,7 +114,7 @@ const QuestionFormModal: React.FC<QuestionFormModalProps> = ({ ...props }) => {
103114
{props.isAdmin ? (
104115
<Select
105116
value={question.complexity}
106-
onValueChange={(e) =>
117+
onValueChange={(e: ComplexityEnum) =>
107118
setQuestion({ ...question, complexity: e })
108119
}
109120
disabled={!props.isAdmin}
@@ -112,19 +123,18 @@ const QuestionFormModal: React.FC<QuestionFormModalProps> = ({ ...props }) => {
112123
<SelectValue placeholder="Select complexity" />
113124
</SelectTrigger>
114125
<SelectContent>
115-
<SelectItem value="easy">Easy</SelectItem>
116-
<SelectItem value="medium">Medium</SelectItem>
117-
<SelectItem value="hard">Hard</SelectItem>
126+
{ComplexityEnumArray.map((complexity) => (
127+
<SelectItem value={complexity}>
128+
{complexity}
129+
</SelectItem>
130+
))}
118131
</SelectContent>
119132
</Select>
120133
) : (
121134
<Input
122135
id="complexity"
123136
value={question.complexity}
124-
onChange={(e) =>
125-
setQuestion({ ...question, complexity: e.target.value })
126-
}
127-
disabled={!props.isAdmin}
137+
disabled
128138
/>
129139
)}
130140
</div>

0 commit comments

Comments
 (0)