Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
a5baa79
refactor(router): update routing system
mehdi-parvizi Nov 18, 2024
970e685
feat(checkbox): add checkbox component
mehdi-parvizi Nov 18, 2024
ad98686
refactor(chatbox): update chatbox structure
mehdi-parvizi Nov 18, 2024
f15d8dc
feat(input): add disabled functionality
mehdi-parvizi Nov 18, 2024
809fb63
refactor(structure): update components structure
mehdi-parvizi Nov 18, 2024
a46afff
feat(terraform template generation): add terraform template generatio…
mehdi-parvizi Nov 18, 2024
39d2144
feat(constants): add constants and models
mehdi-parvizi Nov 18, 2024
d824fa8
feat(download section): add terraform download section
mehdi-parvizi Nov 18, 2024
b040325
feat(form validator): update validator rules
mehdi-parvizi Nov 18, 2024
de38fd4
refactor(usePost): update contstant variable names
mehdi-parvizi Nov 18, 2024
5928a31
refactor(template generator): update layout structure
mehdi-parvizi Nov 19, 2024
6eed909
feat(terraform template): add error state
mehdi-parvizi Nov 19, 2024
fa16948
fix(console): remove console log
mehdi-parvizi Nov 19, 2024
57c1e76
fix(generator query): clear generator query after succussful download
mehdi-parvizi Nov 19, 2024
a6b7376
style(terraform): make terraform route more responsive
mehdi-parvizi Nov 19, 2024
4c7dfcf
fix(iam): set correct values for iam mapper function
mehdi-parvizi Nov 19, 2024
4b5f3b2
refactor(download and list directory): delete list directory and down…
mehdi-parvizi Nov 19, 2024
d14f786
refactor(form validator): delete list and download validators
mehdi-parvizi Nov 19, 2024
8b69678
feat(file names): change file names based on the service
mehdi-parvizi Nov 19, 2024
907452b
feat(loading state): add loading state while generating files
mehdi-parvizi Nov 19, 2024
dfce2dd
feat(loading state): add loading state while generating files
mehdi-parvizi Nov 19, 2024
f07f80b
feat(change port number): edit port number base on env
mehdi-parvizi Nov 19, 2024
cabb42d
feat(api client): add api client base url as env
mehdi-parvizi Nov 19, 2024
2fa446c
style(terraform): move generate button to center
mehdi-parvizi Nov 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,751 changes: 855 additions & 896 deletions web/package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@types/node": "^22.9.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.3",
Expand Down
25 changes: 25 additions & 0 deletions web/src/components/external-ui/checkbox.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Checkbox as ChakraCheckbox } from "@chakra-ui/react"
import * as React from "react"

export interface CheckboxProps extends ChakraCheckbox.RootProps {
icon?: React.ReactNode
inputProps?: React.InputHTMLAttributes<HTMLInputElement>
rootRef?: React.Ref<HTMLLabelElement>
}

export const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
function Checkbox(props, ref) {
const { icon, children, inputProps, rootRef, ...rest } = props
return (
<ChakraCheckbox.Root ref={rootRef} {...rest}>
<ChakraCheckbox.HiddenInput ref={ref} {...inputProps} />
<ChakraCheckbox.Control>
{icon || <ChakraCheckbox.Indicator />}
</ChakraCheckbox.Control>
{children != null && (
<ChakraCheckbox.Label>{children}</ChakraCheckbox.Label>
)}
</ChakraCheckbox.Root>
)
},
)
6 changes: 3 additions & 3 deletions web/src/components/internal-ui/ChatBox.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { Box } from "@chakra-ui/react";
import ChatBubble from "./ChatBubble";
import { Message } from "../../features/model";
import usePost from "../../hooks/usePost";
import { ENDPOINTS, UserType } from "../../features/constants";
import { Endpoints, UserType } from "../../features/constants";
import useGptStore from "../../utils/store";
import { useEffect } from "react";
import { v4 as uuid } from "uuid";
import { useLocation } from "react-router-dom";
import usePost from "../../hooks/usePost";

interface Props {
messageData: Message[];
endpoint: ENDPOINTS;
endpoint: Endpoints;
request: any;
id: string;
}
Expand Down
26 changes: 26 additions & 0 deletions web/src/components/internal-ui/CheckBox.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { useFormContext } from "react-hook-form";

import { HStack } from "@chakra-ui/react";

interface Props {
fieldName: string;
label: string;
}

const CheckBox = ({ fieldName, label }: Props) => {
const { register } = useFormContext();
return (
<>
<HStack alignItems={"center"} justifyContent={"center"}>
<p>{label}</p>
<input
className=" w-4 h-4 accent-orange-700"
{...register(fieldName)}
type="checkbox"
/>
</HStack>
</>
);
};

export default CheckBox;
15 changes: 14 additions & 1 deletion web/src/components/internal-ui/Input.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
import { useFormContext } from "react-hook-form";
import { BasicGenFields, BugFixFields } from "../../features/constants";
import { validateForm } from "../../utils/formValidator";
import { CSSProperties } from "react";

interface Props {
fieldName: string;
label?: string;
placeholder?: string;
disabled?: boolean;
style?: CSSProperties;
}

const Input = ({ fieldName, label, placeholder = "Placeholder" }: Props) => {
const Input = ({
fieldName,
label,
placeholder,
style,
disabled = false,
}: Props) => {
const {
register,
formState: { errors },
Expand All @@ -29,15 +38,19 @@ const Input = ({ fieldName, label, placeholder = "Placeholder" }: Props) => {
</div>
{!showTextArea ? (
<input
disabled={disabled}
className={defaultStyle}
{...register(fieldName, validateForm(fieldName))}
placeholder={placeholder}
style={style}
/>
) : (
<textarea
className={`overflow-y-auto w-[50rem] ${defaultStyle}`}
{...register(fieldName, validateForm(fieldName))}
placeholder={placeholder}
style={style}
disabled={disabled}
/>
)}
{error && (
Expand Down
110 changes: 110 additions & 0 deletions web/src/components/ui/menu.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
"use client"

import { AbsoluteCenter, Menu as ChakraMenu, Portal } from "@chakra-ui/react"
import * as React from "react"
import { LuCheck, LuChevronRight } from "react-icons/lu"

interface MenuContentProps extends ChakraMenu.ContentProps {
portalled?: boolean
portalRef?: React.RefObject<HTMLElement>
}

export const MenuContent = React.forwardRef<HTMLDivElement, MenuContentProps>(
function MenuContent(props, ref) {
const { portalled = true, portalRef, ...rest } = props
return (
<Portal disabled={!portalled} container={portalRef}>
<ChakraMenu.Positioner>
<ChakraMenu.Content ref={ref} {...rest} />
</ChakraMenu.Positioner>
</Portal>
)
},
)

export const MenuArrow = React.forwardRef<
HTMLDivElement,
ChakraMenu.ArrowProps
>(function MenuArrow(props, ref) {
return (
<ChakraMenu.Arrow ref={ref} {...props}>
<ChakraMenu.ArrowTip />
</ChakraMenu.Arrow>
)
})

export const MenuCheckboxItem = React.forwardRef<
HTMLDivElement,
ChakraMenu.CheckboxItemProps
>(function MenuCheckboxItem(props, ref) {
return (
<ChakraMenu.CheckboxItem ref={ref} {...props}>
<ChakraMenu.ItemIndicator hidden={false}>
<LuCheck />
</ChakraMenu.ItemIndicator>
{props.children}
</ChakraMenu.CheckboxItem>
)
})

export const MenuRadioItem = React.forwardRef<
HTMLDivElement,
ChakraMenu.RadioItemProps
>(function MenuRadioItem(props, ref) {
const { children, ...rest } = props
return (
<ChakraMenu.RadioItem ps="8" ref={ref} {...rest}>
<AbsoluteCenter axis="horizontal" left="4" asChild>
<ChakraMenu.ItemIndicator>
<LuCheck />
</ChakraMenu.ItemIndicator>
</AbsoluteCenter>
<ChakraMenu.ItemText>{children}</ChakraMenu.ItemText>
</ChakraMenu.RadioItem>
)
})

export const MenuItemGroup = React.forwardRef<
HTMLDivElement,
ChakraMenu.ItemGroupProps
>(function MenuItemGroup(props, ref) {
const { title, children, ...rest } = props
return (
<ChakraMenu.ItemGroup ref={ref} {...rest}>
{title && (
<ChakraMenu.ItemGroupLabel userSelect="none">
{title}
</ChakraMenu.ItemGroupLabel>
)}
{children}
</ChakraMenu.ItemGroup>
)
})

export interface MenuTriggerItemProps extends ChakraMenu.ItemProps {
startIcon?: React.ReactNode
}

export const MenuTriggerItem = React.forwardRef<
HTMLDivElement,
MenuTriggerItemProps
>(function MenuTriggerItem(props, ref) {
const { startIcon, children, ...rest } = props
return (
<ChakraMenu.TriggerItem ref={ref} {...rest}>
{startIcon}
{children}
<LuChevronRight />
</ChakraMenu.TriggerItem>
)
})

export const MenuRadioItemGroup = ChakraMenu.RadioItemGroup
export const MenuContextTrigger = ChakraMenu.ContextTrigger
export const MenuRoot = ChakraMenu.Root
export const MenuSeparator = ChakraMenu.Separator

export const MenuItem = ChakraMenu.Item
export const MenuItemText = ChakraMenu.ItemText
export const MenuItemCommand = ChakraMenu.ItemCommand
export const MenuTrigger = ChakraMenu.Trigger
4 changes: 2 additions & 2 deletions web/src/features/basicGen/BasicGen.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { FormProvider } from "react-hook-form";
import Input from "../../components/internal-ui/Input";
import { basicGenDefaultValues, BasicGenFields, ENDPOINTS } from "../constants";
import { basicGenDefaultValues, BasicGenFields, Endpoints } from "../constants";
import { Button, HStack, Stack } from "@chakra-ui/react";

import useGptStore from "../../utils/store";
Expand Down Expand Up @@ -35,7 +35,7 @@ const BasicGen = () => {
<Input fieldName={BasicGenFields.SERVICE} label="Service" />
</div>
<ChatBox
endpoint={ENDPOINTS.postBasic}
endpoint={Endpoints.POST_BASIC}
request={request}
messageData={messages}
id={request?.requestId ?? ""}
Expand Down
4 changes: 2 additions & 2 deletions web/src/features/bugFix/BugFix.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Input from "../../components/internal-ui/Input";
import useFormHandler from "../../hooks/useFormHandler";
import { bugFixMapper } from "../../utils/mapperFunctions";
import useGptStore from "../../utils/store";
import { bugFixDefaultValues, BugFixFields, ENDPOINTS } from "../constants";
import { bugFixDefaultValues, BugFixFields, Endpoints } from "../constants";
import { ApiRequestBugFix, BugFixFormData } from "../model";

const BugFix = () => {
Expand All @@ -32,7 +32,7 @@ const BugFix = () => {
<Input fieldName={BugFixFields.VERSION} label="Version" />
</div>
<ChatBox
endpoint={ENDPOINTS.postFix}
endpoint={Endpoints.POST_FIX}
request={request}
messageData={messages}
id={request?.requestId ?? ""}
Expand Down
86 changes: 72 additions & 14 deletions web/src/features/constants.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
import {
BasicGenFormData,
BugFixFormData,
TerraformDockerFormData,
TerraformEc2FormData,
TerraformIAMFormData,
TerraformS3FormData,
} from "./model";

export enum Endpoints {
POST_BASIC = "/IaC-basic",
POST_FIX = "/IaC-bugfix",
POST_INSTALL = "/IaC-install",
POST_IAC_T_DOCKER = "/IaC-template/docker",
POST_IAC_T_EC2 = "/IaC-template/aws/ec2",
POST_IAC_T_S3 = "/IaC-template/aws/s3",
POST_IAC_T_IAM = "/IaC-template/aws/iam",
POST_IAC_HELM = "/Helm-template",
GET_DOWNLOAD_TERRAFORM = "/download-folder",
GET_DOWNLOAD_HELM = "/download-helm",
GET_DIRECTORY = "/list-directory",
DOWNLOAD_LINK = "http://localhost/download-folderMyTerraform",
}

export enum BasicGenFields {
MIN_TOKEN = "minToken",
MAX_TOKEN = "maxToken",
Expand All @@ -13,32 +37,66 @@ export enum BugFixFields {
BUG_DESCRIPTION = "bugDescription",
}

export enum TerraformDockerFields {
DOCKER_IMAGE = "dockerImage",
DOCKER_CONTAINER = "dockerContainer",
}

export enum TerraformEC2Fields {
KEY_PAIR = "keyPair",
SECURITY_GROUP = "securityGroup",
AWS_INSTANCE = "awsInstance",
AMI_FROM_INSTANCE = "amiFromInstance",
}

export enum TerraformS3Fields {
S3_BUCKET = "s3Bucket",
BUCKET_VERSIONING = "bucketVersioning",
}

export enum TerraformIAMFields {
IAM_USER = "iamUser",
IAM_GROUP = "iamGroup",
}

export enum UserType {
USER = "user",
BOT = "bot",
}

export enum ENDPOINTS {
postBasic = "/IaC-basic",
postFix = "/IaC-bugfix",
postInstall = "/IaC-install",
PostIacTemp = "/IaC-template",
PostIacHelm = "/Helm-template",
getDonwload = "/download",
getDirectory = "/list-directory",
}

export const basicGenDefaultValues = {
export const basicGenDefaultValues: BasicGenFormData = {
minToken: 100,
maxToken: 500,
service: "terraform",
input: undefined,
input: "",
};

export const bugFixDefaultValues = {
export const bugFixDefaultValues: BugFixFormData = {
minToken: 100,
maxToken: 500,
service: "terraform",
version: "latest",
bugDescription: undefined,
bugDescription: "",
};

export const terraformDockerDefaultValues: TerraformDockerFormData = {
dockerImage: false,
dockerContainer: false,
};

export const terraformEc2DefaultValues: TerraformEc2FormData = {
keyPair: false,
amiFromInstance: false,
awsInstance: false,
securityGroup: false,
};

export const terraformS3DefaultValues: TerraformS3FormData = {
s3Bucket: false,
bucketVersioning: false,
};

export const terraformIamDefaultValues: TerraformIAMFormData = {
iamUser: false,
iamGroup: false,
};
Loading
Loading