Skip to content

Commit c73db13

Browse files
committed
feat(basicGen): create basic generation functionality
1 parent 3ecad61 commit c73db13

4 files changed

Lines changed: 160 additions & 0 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { useFormContext } from "react-hook-form";
2+
import { BasicGenFields } from "../../features/constants";
3+
import { validateForm } from "../../utils/formValidator";
4+
5+
interface Props {
6+
fieldName: BasicGenFields;
7+
label?: string;
8+
placeholder?: string;
9+
}
10+
11+
const Input = ({ fieldName, label, placeholder }: Props) => {
12+
const {
13+
register,
14+
formState: { errors },
15+
} = useFormContext();
16+
17+
const defaultStyle =
18+
"border border-stone-600 bg-stone-900 rounded-md flex h-auto p-4";
19+
20+
const error = errors[fieldName];
21+
return (
22+
<div>
23+
<div className="label">
24+
<span className="label-text">{label}</span>
25+
</div>
26+
{fieldName !== BasicGenFields.INPUT ? (
27+
<input
28+
className={defaultStyle}
29+
{...register(fieldName, validateForm(fieldName))}
30+
placeholder={placeholder}
31+
/>
32+
) : (
33+
<textarea
34+
className={`overflow-y-auto w-[50rem] ${defaultStyle}`}
35+
{...register(fieldName, validateForm(fieldName))}
36+
placeholder={placeholder}
37+
/>
38+
)}
39+
{error && (
40+
<p className="text-red-600 text-sm">{error?.message as string}</p>
41+
)}
42+
</div>
43+
);
44+
};
45+
46+
export default Input;
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { FormProvider, useForm } from "react-hook-form";
2+
import Input from "../../components/internal-ui/Input";
3+
import { BasicGenFields, ENDPOINTS, UserType } from "../constants";
4+
import { Button, HStack, Stack } from "@chakra-ui/react";
5+
6+
import useGptStore from "../../utils/store";
7+
import ChatBox from "../../components/internal-ui/ChatBox";
8+
9+
import { BasicGenFormData } from "../model";
10+
import { useEffect, useState } from "react";
11+
import { IoSendOutline } from "react-icons/io5";
12+
13+
const BasicGen = () => {
14+
const formMethods = useForm<BasicGenFormData>({
15+
defaultValues: {
16+
minToken: 100,
17+
maxToken: 500,
18+
service: "terraform",
19+
input: undefined,
20+
},
21+
mode: "all",
22+
});
23+
24+
const { handleSubmit } = formMethods;
25+
26+
const messages = useGptStore((s) => s.messages);
27+
const addMessage = useGptStore((s) => s.addMessage);
28+
const [isDisabled, setIsDisabled] = useState(true);
29+
const [req, setReq] = useState<any>();
30+
31+
const onSubmit = (data: BasicGenFormData) => {
32+
addMessage(UserType.USER, data.input);
33+
const request = {
34+
min_token: data.minToken,
35+
max_token: data.maxToken,
36+
service: data.service,
37+
input: data.input,
38+
};
39+
setReq(request);
40+
};
41+
42+
useEffect(() => {
43+
setIsDisabled(!!formMethods.getFieldState(BasicGenFields.INPUT).isDirty);
44+
}, [formMethods]);
45+
46+
return (
47+
<div>
48+
<FormProvider {...formMethods}>
49+
<form onSubmit={(e) => void handleSubmit(onSubmit)(e)}>
50+
<Stack gap="3" justifyContent="center" alignItems="center">
51+
<div className="flex gap-2">
52+
<Input fieldName={BasicGenFields.MIN_TOKEN} label="Min token" />
53+
<Input fieldName={BasicGenFields.MAX_TOKEN} label="Max token" />
54+
<Input fieldName={BasicGenFields.SERVICE} label="Service" />
55+
</div>
56+
<ChatBox
57+
endpoint={ENDPOINTS.postBasic}
58+
request={req}
59+
messageData={messages}
60+
/>
61+
<HStack
62+
mt="3"
63+
alignItems="end"
64+
alignContent={"center"}
65+
justifyContent="center"
66+
bottom="5"
67+
>
68+
<Input placeholder="Text" fieldName={BasicGenFields.INPUT} />
69+
<Button type="submit" bg="orange.800" disabled={isDisabled}>
70+
<IoSendOutline />
71+
</Button>
72+
</HStack>
73+
</Stack>
74+
</form>
75+
</FormProvider>
76+
</div>
77+
);
78+
};
79+
80+
export default BasicGen;

web/src/features/constants.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export enum BasicGenFields {
2+
MIN_TOKEN = "minToken",
3+
MAX_TOKEN = "maxToken",
4+
INPUT = "input",
5+
SERVICE = "service",
6+
}
7+
8+
export enum UserType {
9+
USER = "user",
10+
BOT = "bot",
11+
}
12+
13+
export enum ENDPOINTS {
14+
postBasic = "/IaC-basic",
15+
postFix = "/IaC-bugfix",
16+
postInstall = "/IaC-install",
17+
PostIacTemp = "/IaC-template",
18+
PostIacHelm = "/Helm-template",
19+
getDonwload = "/download",
20+
getDirectory = "/list-directory",
21+
}

web/src/features/model.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { UserType } from "./constants";
2+
3+
export interface Message {
4+
user: UserType;
5+
content: string;
6+
}
7+
8+
export interface BasicGenFormData {
9+
minToken: number;
10+
maxToken: number;
11+
service: string;
12+
input: string;
13+
}

0 commit comments

Comments
 (0)