Skip to content

Commit a4aa0ed

Browse files
committed
refactor(basic and bug fix): code clean up and better seperation of concerns
1 parent 115d83b commit a4aa0ed

6 files changed

Lines changed: 93 additions & 76 deletions

File tree

web/src/components/internal-ui/ChatBox.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ const ChatBox = ({ messageData, endpoint, request, id }: Props) => {
2929

3030
useEffect(() => {
3131
if (data?.data.output) addMessage(UserType.BOT, data?.data.output!, uuid());
32-
console.log(messageData);
3332
}, [request, data]);
3433

3534
return (

web/src/features/basicGen/BasicGen.tsx

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,34 @@
1-
import { FormProvider, useForm } from "react-hook-form";
1+
import { FormProvider } from "react-hook-form";
22
import Input from "../../components/internal-ui/Input";
3-
import { BasicGenFields, ENDPOINTS, UserType } from "../constants";
3+
import { basicGenDefaultValues, BasicGenFields, ENDPOINTS } from "../constants";
44
import { Button, HStack, Stack } from "@chakra-ui/react";
55

66
import useGptStore from "../../utils/store";
77
import ChatBox from "../../components/internal-ui/ChatBox";
88

99
import { ApiRequestBasicGen, BasicGenFormData } from "../model";
10-
import { useEffect, useState } from "react";
10+
1111
import { IoSendOutline } from "react-icons/io5";
12-
import { v4 as uuid } from "uuid";
12+
13+
import useFormHandler from "../../hooks/useFormHandler";
14+
import { basicGenMapper } from "../../utils/mapperFunctions";
1315

1416
const BasicGen = () => {
15-
const formMethods = useForm<BasicGenFormData>({
16-
defaultValues: {
17-
minToken: 100,
18-
maxToken: 500,
19-
service: "terraform",
20-
input: undefined,
21-
},
22-
mode: "onSubmit",
23-
});
17+
const { formMethods, handleSubmit, onSubmit, request } = useFormHandler<
18+
BasicGenFormData,
19+
ApiRequestBasicGen
20+
>(basicGenDefaultValues);
2421

25-
const { handleSubmit } = formMethods;
22+
const handleFormSubmit = handleSubmit((data) => {
23+
onSubmit(basicGenMapper(data), data.input);
24+
});
2625

2726
const messages = useGptStore((s) => s.messages);
28-
const addMessage = useGptStore((s) => s.addMessage);
29-
const [req, setReq] = useState<ApiRequestBasicGen | null>(null);
30-
31-
const onSubmit = (data: BasicGenFormData) => {
32-
addMessage(UserType.USER, data.input, uuid());
33-
const request: ApiRequestBasicGen = {
34-
min_token: data.minToken,
35-
max_token: data.maxToken,
36-
service: data.service,
37-
input: data.input,
38-
requestId: uuid(),
39-
};
40-
if (data.input) setReq(request);
41-
};
42-
43-
useEffect(() => {
44-
return () => setReq(null);
45-
}, []);
4627

4728
return (
4829
<div>
4930
<FormProvider {...formMethods}>
50-
<form onSubmit={(e) => void handleSubmit(onSubmit)(e)}>
31+
<form onSubmit={handleFormSubmit}>
5132
<Stack gap="3" justifyContent="center" alignItems="center">
5233
<div className="flex gap-2">
5334
<Input fieldName={BasicGenFields.MIN_TOKEN} label="Min token" />
@@ -56,9 +37,9 @@ const BasicGen = () => {
5637
</div>
5738
<ChatBox
5839
endpoint={ENDPOINTS.postBasic}
59-
request={req}
40+
request={request}
6041
messageData={messages}
61-
id={req?.requestId ?? ""}
42+
id={request?.requestId ?? ""}
6243
/>
6344
<HStack
6445
mt="3"

web/src/features/bugFix/BugFix.tsx

Lines changed: 17 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,30 @@
1-
import { Stack, HStack, Button } from "@chakra-ui/react";
2-
import { useEffect, useState } from "react";
3-
import { useForm, FormProvider } from "react-hook-form";
1+
import { Button, HStack, Stack } from "@chakra-ui/react";
2+
import { FormProvider } from "react-hook-form";
43
import { IoSendOutline } from "react-icons/io5";
54
import ChatBox from "../../components/internal-ui/ChatBox";
6-
import useGptStore from "../../utils/store";
7-
import { UserType, ENDPOINTS, BugFixFields } from "../constants";
8-
import { BugFixFormData, ApiRequestBugFix } from "../model";
9-
import { v4 as uuid } from "uuid";
105
import Input from "../../components/internal-ui/Input";
6+
import useFormHandler from "../../hooks/useFormHandler";
7+
import { bugFixMapper } from "../../utils/mapperFunctions";
8+
import useGptStore from "../../utils/store";
9+
import { bugFixDefaultValues, BugFixFields, ENDPOINTS } from "../constants";
10+
import { ApiRequestBugFix, BugFixFormData } from "../model";
1111

1212
const BugFix = () => {
13-
const formMethods = useForm<BugFixFormData>({
14-
defaultValues: {
15-
minToken: 100,
16-
maxToken: 500,
17-
service: "terraform",
18-
version: "latest",
19-
bugDescription: undefined,
20-
},
21-
mode: "onSubmit",
22-
});
23-
24-
const { handleSubmit } = formMethods;
13+
const { request, handleSubmit, onSubmit, formMethods } = useFormHandler<
14+
BugFixFormData,
15+
ApiRequestBugFix
16+
>(bugFixDefaultValues);
2517

2618
const messages = useGptStore((s) => s.messages);
27-
const addMessage = useGptStore((s) => s.addMessage);
28-
const [req, setReq] = useState<ApiRequestBugFix | null>(null);
29-
30-
const onSubmit = (data: BugFixFormData) => {
31-
addMessage(UserType.USER, data.bugDescription, uuid());
32-
const request: ApiRequestBugFix = {
33-
min_token: data.minToken,
34-
max_token: data.maxToken,
35-
service: data.service,
36-
bug_description: data.bugDescription,
37-
version: data.version,
38-
requestId: uuid(),
39-
};
40-
if (data.bugDescription) setReq(request);
41-
};
4219

43-
useEffect(() => {
44-
return () => setReq(null);
45-
}, []);
20+
const handleFormSubmit = handleSubmit((data) => {
21+
onSubmit(bugFixMapper(data), data.bugDescription);
22+
});
4623

4724
return (
4825
<div>
4926
<FormProvider {...formMethods}>
50-
<form onSubmit={(e) => void handleSubmit(onSubmit)(e)}>
27+
<form onSubmit={handleFormSubmit}>
5128
<Stack gap="3" justifyContent="center" alignItems="center">
5229
<div className="flex gap-2">
5330
<Input fieldName={BugFixFields.MIN_TOKEN} label="Min token" />
@@ -57,9 +34,9 @@ const BugFix = () => {
5734
</div>
5835
<ChatBox
5936
endpoint={ENDPOINTS.postFix}
60-
request={req}
37+
request={request}
6138
messageData={messages}
62-
id={req?.requestId ?? ""}
39+
id={request?.requestId ?? ""}
6340
/>
6441
<HStack
6542
mt="3"

web/src/features/constants.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,18 @@ export enum ENDPOINTS {
2727
getDonwload = "/download",
2828
getDirectory = "/list-directory",
2929
}
30+
31+
export const basicGenDefaultValues = {
32+
minToken: 100,
33+
maxToken: 500,
34+
service: "terraform",
35+
input: undefined,
36+
};
37+
38+
export const bugFixDefaultValues = {
39+
minToken: 100,
40+
maxToken: 500,
41+
service: "terraform",
42+
version: "latest",
43+
bugDescription: undefined,
44+
};

web/src/hooks/useFormHandler.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { useState } from "react";
2+
import { FieldValues, useForm, UseFormProps } from "react-hook-form";
3+
import { v4 as uuid } from "uuid";
4+
import useGptStore from "../utils/store";
5+
import { UserType } from "../features/constants";
6+
7+
const useFormHandler = <T extends FieldValues, K>(
8+
initialValues: UseFormProps<T>["defaultValues"]
9+
) => {
10+
const [request, setRequest] = useState<K & { requestId: string }>();
11+
const formMethods = useForm<T>({ defaultValues: initialValues });
12+
const addMessage = useGptStore((s) => s.addMessage);
13+
const { handleSubmit } = formMethods;
14+
15+
const onSubmit = (data: K, content: string) => {
16+
addMessage(UserType.USER, content, uuid());
17+
if (data) setRequest({ ...data, requestId: uuid() });
18+
};
19+
return { formMethods, request, handleSubmit, onSubmit };
20+
};
21+
22+
export default useFormHandler;

web/src/utils/mapperFunctions.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {
2+
BasicGenFormData,
3+
ApiRequestBasicGen,
4+
BugFixFormData,
5+
ApiRequestBugFix,
6+
} from "../features/model";
7+
8+
export const basicGenMapper = (data: BasicGenFormData): ApiRequestBasicGen => ({
9+
min_token: data.minToken,
10+
max_token: data.maxToken,
11+
service: data.service,
12+
input: data.input,
13+
requestId: "",
14+
});
15+
16+
export const bugFixMapper = (data: BugFixFormData): ApiRequestBugFix => ({
17+
min_token: data.minToken,
18+
max_token: data.maxToken,
19+
bug_description: data.bugDescription,
20+
service: data.service,
21+
version: data.version,
22+
requestId: "",
23+
});

0 commit comments

Comments
 (0)