diff --git a/web/src/components/form/form-input.tsx b/web/src/components/form/form-input.tsx index be46e833..247b7a84 100644 --- a/web/src/components/form/form-input.tsx +++ b/web/src/components/form/form-input.tsx @@ -11,8 +11,11 @@ export const FormInput = ({ isNumber, inputType, inputClass, + showError = true, ...props }: FormFieldProps) => { + const { className, ...restProps } = props; + const { register, formState: { errors }, @@ -24,12 +27,12 @@ export const FormInput = ({ return ( {label && ( -
+
{label}
)} @@ -38,18 +41,18 @@ export const FormInput = ({ type={inputType} className={cn( 'w-full rounded-md border border-gray-500 px-3 py-2 outline-none transition-all focus:border-orange-base', - props.className, + inputClass, { 'border-red-500 dark:border': errorMessage, }, )} {...register(name, { ...(isNumber && { valueAsNumber: true }) })} - {...props} + {...restProps} /> - {errorMessage && ( + {showError && errorMessage && (
- + {errorMessage}
diff --git a/web/src/hooks/useDownload.ts b/web/src/hooks/useDownload.ts index 20808303..158858ae 100644 --- a/web/src/hooks/useDownload.ts +++ b/web/src/hooks/useDownload.ts @@ -30,6 +30,7 @@ const useDownload = ({ document.body.appendChild(link); link.click(); document.body.removeChild(link); + URL.revokeObjectURL(link.href); } }, [isSuccess, data]); diff --git a/web/src/lib/helper.ts b/web/src/lib/helper.ts index 7bf8d285..f1d78147 100644 --- a/web/src/lib/helper.ts +++ b/web/src/lib/helper.ts @@ -5,18 +5,16 @@ export const getNestedValue = (obj: any, path: string) => { }; export const convertKVtoObject = ( - kvArray: Array<{ key: string; value: string } | null>, + kvArray: Array<{ key: string; value: string } | null> | null, ) => { return kvArray?.reduce( (acc, curr) => { - if (curr && acc) { acc[curr.key] = curr?.value; - } return acc; }, - {} as Record | null, + {} as { [key: string]: string } | null, ); }; diff --git a/web/src/pages/basic/basic.tsx b/web/src/pages/basic/basic.tsx index 6d78b223..8ab8ae4e 100644 --- a/web/src/pages/basic/basic.tsx +++ b/web/src/pages/basic/basic.tsx @@ -5,6 +5,7 @@ import { usePost } from '@/core/react-query'; import { BasicBody, BasicMessage, BasicResponse } from './basic.types'; import { API } from '@/enums/api.enums'; import { BeatLoader } from 'react-spinners'; +import { isAxiosError } from 'axios'; const Basic: FC = () => { const { mutateAsync } = usePost(API.Basic, 'basic'); @@ -54,16 +55,22 @@ const Basic: FC = () => { } catch (error) { console.log(error); setMessages((prev) => prev.slice(0, -1)); - toast.error('Something went wrong'); + if (isAxiosError(error)) { + if (error.response?.data.detail) { + toast.error(error.response.data.detail); + } else { + toast.error('Something went wrong'); + } + } } }; return (
-
-
-
+
+
+
@@ -72,10 +79,10 @@ const Basic: FC = () => { type="number" value={minToken} onChange={(e) => setMinToken(e.target.value)} - className="w-full rounded-md bg-gray-200 p-3 outline-none dark:bg-black-1" + className="w-full p-3 bg-gray-200 rounded-md outline-none dark:bg-black-1" />
-
+
@@ -84,10 +91,10 @@ const Basic: FC = () => { type="number" value={maxToken} onChange={(e) => setMaxToken(e.target.value)} - className="w-full rounded-md bg-gray-200 p-3 outline-none dark:bg-black-1" + className="w-full p-3 bg-gray-200 rounded-md outline-none dark:bg-black-1" />
-
+
@@ -96,7 +103,7 @@ const Basic: FC = () => { type="text" value={service} onChange={(e) => setService(e.target.value)} - className="w-full rounded-md bg-gray-200 p-3 outline-none dark:bg-black-1" + className="w-full p-3 bg-gray-200 rounded-md outline-none dark:bg-black-1" />
@@ -107,14 +114,14 @@ const Basic: FC = () => { > {messages.map((message) => message.role === 'user' ? ( -
-
+
+
{message.content}
) : ( -
-
+
+
{message.loading ? ( ) : ( @@ -131,12 +138,12 @@ const Basic: FC = () => { value={input} onChange={(e) => setInput(e.target.value)} rows={2} - className="w-full resize-none rounded-md bg-gray-200 p-4 pr-16 outline-none dark:bg-black-1" + className="w-full p-4 pr-16 bg-gray-200 rounded-md outline-none resize-none dark:bg-black-1" /> diff --git a/web/src/pages/bug-fix/bug-fix.tsx b/web/src/pages/bug-fix/bug-fix.tsx index 1187022a..cc597e0b 100644 --- a/web/src/pages/bug-fix/bug-fix.tsx +++ b/web/src/pages/bug-fix/bug-fix.tsx @@ -5,6 +5,7 @@ import { BugFixBody, BugFixMessage, BugFixResponse } from './bug-fix.types'; import { usePost } from '@/core/react-query'; import { toast } from 'sonner'; import { BeatLoader } from 'react-spinners'; +import { isAxiosError } from 'axios'; const BugFix: FC = () => { const { mutateAsync } = usePost( @@ -57,18 +58,23 @@ const BugFix: FC = () => { ), ); } catch (error) { - console.log(error); setMessages((prev) => prev.slice(0, -1)); - toast.error('Something went wrong'); + if (isAxiosError(error)) { + if (error.response?.data.detail) { + toast.error(error.response.data.detail); + } else { + toast.error('Something went wrong'); + } + } } }; return (
-
-
-
+
+
+
@@ -77,10 +83,10 @@ const BugFix: FC = () => { type="number" value={minToken} onChange={(e) => setMinToken(e.target.value)} - className="w-full rounded-md bg-gray-200 p-3 outline-none dark:bg-black-1" + className="w-full p-3 bg-gray-200 rounded-md outline-none dark:bg-black-1" />
-
+
@@ -89,10 +95,10 @@ const BugFix: FC = () => { type="number" value={maxToken} onChange={(e) => setMaxToken(e.target.value)} - className="w-full rounded-md bg-gray-200 p-3 outline-none dark:bg-black-1" + className="w-full p-3 bg-gray-200 rounded-md outline-none dark:bg-black-1" />
-
+
@@ -101,10 +107,10 @@ const BugFix: FC = () => { type="text" value={service} onChange={(e) => setService(e.target.value)} - className="w-full rounded-md bg-gray-200 p-3 outline-none dark:bg-black-1" + className="w-full p-3 bg-gray-200 rounded-md outline-none dark:bg-black-1" />
-
+
@@ -113,7 +119,7 @@ const BugFix: FC = () => { type="text" value={version} onChange={(e) => setVersion(e.target.value)} - className="w-full rounded-md bg-gray-200 p-3 outline-none dark:bg-black-1" + className="w-full p-3 bg-gray-200 rounded-md outline-none dark:bg-black-1" />
@@ -124,14 +130,14 @@ const BugFix: FC = () => { > {messages.map((message) => message.role === 'user' ? ( -
-
+
+
{message.content}
) : ( -
-
+
+
{message.loading ? ( ) : ( @@ -148,12 +154,12 @@ const BugFix: FC = () => { value={bugDescription} onChange={(e) => setBugDescription(e.target.value)} rows={2} - className="w-full resize-none rounded-md bg-gray-200 p-4 pr-16 outline-none dark:bg-black-1" + className="w-full p-4 pr-16 bg-gray-200 rounded-md outline-none resize-none dark:bg-black-1" /> diff --git a/web/src/pages/docker-compose/components/network-fields.tsx b/web/src/pages/docker-compose/components/network-fields.tsx index c2664be6..54e32f2f 100644 --- a/web/src/pages/docker-compose/components/network-fields.tsx +++ b/web/src/pages/docker-compose/components/network-fields.tsx @@ -5,7 +5,7 @@ import { FormInput } from '@/components/form/form-input'; import { FormCheckbox } from '@/components/form/form-checkbox'; import { FormSelect } from '@/components/form/form-select'; -const defaultNetworkDrivers = ['bridge', 'host', 'none', 'overlay'] as const; +const defaultNetworkDrivers = ['Bridge', 'Host', 'None', 'Overlay'] as const; const NetworkFields: FC = () => { const { control, watch } = useFormContext(); @@ -15,7 +15,7 @@ const NetworkFields: FC = () => { name: 'networks.app_network', }); - const customNetwork = watch('networks.custom'); + const customNetwork = watch('networks.external_network'); const handleRemoveNetwork = (index: number) => { remove(index); @@ -25,13 +25,12 @@ const NetworkFields: FC = () => { const networkData = customNetwork ? { network_name: '', - external: false, name: '', } : { network_name: '', driver: { - label: 'bridge', + label: 'Bridge', value: 'bridge', }, }; @@ -52,11 +51,14 @@ const NetworkFields: FC = () => { Add
- +
-
+
{fields.map((field, index) => (
@@ -72,19 +74,12 @@ const NetworkFields: FC = () => {
- {customNetwork && ( -
- -
- )}
{!customNetwork && ( { name={`networks.app_network.${index}.name`} label="Name" placeholder="Name" + showError={false} /> )}
diff --git a/web/src/pages/docker-compose/components/service-build-fields.tsx b/web/src/pages/docker-compose/components/service-build-fields.tsx index 07799fb3..cc4b9224 100644 --- a/web/src/pages/docker-compose/components/service-build-fields.tsx +++ b/web/src/pages/docker-compose/components/service-build-fields.tsx @@ -21,8 +21,8 @@ export const ServiceBuildFields: FC = ({ }); return ( -
-
+
+

Build Configuration

= ({
{buildEnabled && ( -
+
= ({
- {fields.map((field, idx) => ( -
+
+ {fields.map((field, idx) => (
div]:mb-0', { 'divide-red-500 border-red-500 dark:divide-red-500 dark:border-red-500': control.getFieldState( - `services.${serviceIndex}.volumes.${idx}`, + `services.${serviceIndex}.build.args.${idx}.key`, + ).invalid || + control.getFieldState( + `services.${serviceIndex}.build.args.${idx}.value`, ).invalid, }, )} key={field.id} > - + + {idx > 0 && ( + + )}
-
- ))} + ))} +
)} diff --git a/web/src/pages/docker-compose/components/service-depends-on-fields.tsx b/web/src/pages/docker-compose/components/service-depends-on-fields.tsx index 858d8ee7..e0d54e44 100644 --- a/web/src/pages/docker-compose/components/service-depends-on-fields.tsx +++ b/web/src/pages/docker-compose/components/service-depends-on-fields.tsx @@ -19,40 +19,42 @@ const ServiceDependsOnFields: FC = ({ }); return ( -
-
+
+

Depends On

-
- {fields.map((field, depIdx) => ( -
div]:mb-0', - )} - key={field.id} - > +
+ {fields.map((field, idx) => ( +
0, + 'divide-red-500 border-red-500 dark:divide-red-500 dark:border-red-500': + control.getFieldState( + `services.${serviceIndex}.depends_on.${idx}`, + ).invalid, + })} /> - - + {idx > 0 && ( + + )}
))}
diff --git a/web/src/pages/docker-compose/components/service-environment-fields.tsx b/web/src/pages/docker-compose/components/service-environment-fields.tsx index f21c711d..9b363386 100644 --- a/web/src/pages/docker-compose/components/service-environment-fields.tsx +++ b/web/src/pages/docker-compose/components/service-environment-fields.tsx @@ -18,14 +18,14 @@ const ServiceEnvironmentFields: FC = ({ }); return ( -
-
+
+

Environments

@@ -34,7 +34,7 @@ const ServiceEnvironmentFields: FC = ({ {fields.map((field, envIdx) => (
div]:mb-0', + 'relative mb-4 flex items-center divide-x-2 divide-gray-200 rounded-md border border-gray-200 dark:divide-gray-500 dark:border-gray-500 [&>div]:mb-0', { 'divide-red-500 border-red-500 dark:divide-red-500 dark:border-red-500': control.getFieldState( @@ -49,24 +49,27 @@ const ServiceEnvironmentFields: FC = ({ name={`services.${serviceIndex}.environment.${envIdx}.key`} label="" placeholder="Env" - className="h-12 w-full rounded-s-md px-2 outline-none" + inputClass={'border-none'} /> - + {envIdx > 0 && ( + + )}
))}
diff --git a/web/src/pages/docker-compose/components/service-network-fields.tsx b/web/src/pages/docker-compose/components/service-network-fields.tsx index 6ecc1e5d..2a4361d6 100644 --- a/web/src/pages/docker-compose/components/service-network-fields.tsx +++ b/web/src/pages/docker-compose/components/service-network-fields.tsx @@ -19,46 +19,41 @@ const ServiceNetworkFields: FC = ({ }); return ( -
-
+
+

Network

-
- {fields.map((field, networkIdx) => ( -
div]:mb-0', - { +
+ {fields.map((field, idx) => ( +
+ 0, 'divide-red-500 border-red-500 dark:divide-red-500 dark:border-red-500': control.getFieldState( - `services.${serviceIndex}.networks.${networkIdx}`, + `services.${serviceIndex}.networks.${idx}`, ).invalid, - }, - )} - key={field.id} - > - - - + {idx > 0 && ( + + )}
))}
diff --git a/web/src/pages/docker-compose/components/service-ports-fields.tsx b/web/src/pages/docker-compose/components/service-ports-fields.tsx index 05669c69..f02b587d 100644 --- a/web/src/pages/docker-compose/components/service-ports-fields.tsx +++ b/web/src/pages/docker-compose/components/service-ports-fields.tsx @@ -29,33 +29,29 @@ const ServicePortsFields: FC = ({ serviceIndex }) => { Add
-
+
{fields.map((field, idx) => ( -
+
0, + 'divide-red-500 border-red-500 dark:divide-red-500 dark:border-red-500': + control.getFieldState(`services.${serviceIndex}.ports.${idx}`) + .invalid, + })} /> - - + {idx > 0 && ( + + )}
))}
diff --git a/web/src/pages/docker-compose/components/service-volumes-fields.tsx b/web/src/pages/docker-compose/components/service-volumes-fields.tsx index 1fa8de0e..96ad18c7 100644 --- a/web/src/pages/docker-compose/components/service-volumes-fields.tsx +++ b/web/src/pages/docker-compose/components/service-volumes-fields.tsx @@ -19,46 +19,42 @@ export const ServiceVolumesFields: FC = ({ }); return ( -
-
+
+

Volumes

-
+
{fields.map((field, idx) => ( -
+ 0, 'divide-red-500 border-red-500 dark:divide-red-500 dark:border-red-500': control.getFieldState( `services.${serviceIndex}.volumes.${idx}`, ).invalid, - }, - )} - key={field.id} - > - - - + {idx > 0 && ( + + )}
))}
diff --git a/web/src/pages/docker-compose/docker-compose.tsx b/web/src/pages/docker-compose/docker-compose.tsx index b5bbabc9..1c22b224 100644 --- a/web/src/pages/docker-compose/docker-compose.tsx +++ b/web/src/pages/docker-compose/docker-compose.tsx @@ -12,6 +12,7 @@ import { INetworkConfig, TDockerCompose, } from './docker-compose.type'; +import type { DockerCompose } from './docker-compose.type'; import { cn } from '@/lib/utils'; import ServiceNetworkFields from './components/service-network-fields'; import ServiceDependsOnFields from './components/service-depends-on-fields'; @@ -50,24 +51,46 @@ const DockerCompose: FC = () => { build: { context: '', dockerfile: '', - args: [], + args: [ + { + key: '', + value: '', + }, + ], }, - command: '', - container_name: '', - environment: [], + command: null, + container_name: null, + environment: [ + { + key: '', + value: '', + }, + ], image: '', - ports: [''], - volumes: [''], - networks: [''], - depends_on: [''], + ports: [ + { + value: '', + }, + ], + volumes: [ + { + value: '', + }, + ], + networks: [ + { + value: '', + }, + ], + depends_on: [{ value: '' }], }, ], networks: { - custom: false, + external_network: false, app_network: [ { network_name: '', - driver: { value: 'bridge', label: 'bridge' }, + driver: { value: 'bridge', label: 'Bridge' }, }, ], }, @@ -92,19 +115,45 @@ const DockerCompose: FC = () => { const handleAddService = () => { append({ build: { - args: [], + args: [ + { + key: '', + value: '', + }, + ], context: '', dockerfile: '', }, name: '', - command: '', - container_name: '', + command: null, + container_name: null, image: '', - environment: [], - depends_on: [''], - networks: [''], - ports: [''], - volumes: [''], + environment: [ + { + key: '', + value: '', + }, + ], + depends_on: [ + { + value: '', + }, + ], + networks: [ + { + value: '', + }, + ], + ports: [ + { + value: '', + }, + ], + volumes: [ + { + value: '', + }, + ], }); }; @@ -131,49 +180,58 @@ const DockerCompose: FC = () => { }), ); - const refactoredNetwork = data.networks.app_network.reduce( - (acc: INetworkConfig, network) => { - if (!data.networks.custom) { - if ('driver' in network) { + let refactoredNetwork: any; + + if (!data.networks.app_network.some((network) => network.network_name)) { + refactoredNetwork = null; + } else { + refactoredNetwork = data.networks.app_network.reduce( + (acc: INetworkConfig, network) => { + if (!data.networks.external_network) { + if ('driver' in network) { + acc[network.network_name] = { + driver: network.driver?.value, + }; + } + } + if ('name' in network) { acc[network.network_name] = { - driver: network.driver?.value, + name: network.name, + external_network: true, }; } - } - if ('name' in network && 'external' in network) { - acc[network.network_name] = { - name: network.name, - external: !!network.external, - }; - } - return acc; - }, - {}, - ); + return acc; + }, + {}, + ); + } const services = refactoredService.map((item) => { - if (item.ports && item?.ports[0].length === 0) { - item.ports = null; - } - if (item.volumes && item.volumes[0].length === 0) { - item.volumes = null; - } - if (item.networks && item.networks[0].length === 0) { - item.networks = null; - } - if (item.depends_on && item.depends_on[0].length === 0) { - item.depends_on = null; - } - if (item.environment && !item.environment[0]) { - item.environment = null; - } - if (item.environment && item.environment[0]) { - item.environment = null; - } - if (item.command?.length === 0) { - item.command = null; - } - return item; + const bodyService = { + name: item.name, + build: item.build?.context ? item.build : null, + command: item.command ? item.command : null, + image: item.image ? item.image : null, + container_name: item.container_name ? item.container_name : null, + depends_on: item.depends_on?.some((item) => item.value) ? [''] : null, + ports: item.ports?.some((item) => item.value) + ? item.ports.map((port) => port.value) + : null, + volumes: item.volumes?.some((item) => item.value) + ? item.volumes.map((volume) => volume.value) + : null, + networks: item.networks?.some((item) => item.value) + ? item.networks.map((network) => network.value) + : null, + environment: + item.environment && + Object.entries(item.environment).some( + ([k, v]) => k !== '' || v !== '', + ) + ? item.environment + : null, + }; + return bodyService; }); const requestBody: DockerComposeBody = { @@ -185,13 +243,11 @@ const DockerCompose: FC = () => { await dockerComposeMutate(requestBody); await download(); } catch (error) { - console.log(error); if (isAxiosError(error)) { toast.error( `${error.response?.data.detail[0].loc[error.response?.data.detail[0].loc.length - 1]} ${error.response?.data.detail[0].msg}`, ); } else { - console.log(error); toast.error('Something went wrong'); } } @@ -255,7 +311,7 @@ const DockerCompose: FC = () => {
{ id="command" name={`services.${index}.command`} label="Command" + placeholder="command..." />
diff --git a/web/src/pages/docker-compose/docker-compose.type.ts b/web/src/pages/docker-compose/docker-compose.type.ts index 3b36bcfb..f8307d64 100644 --- a/web/src/pages/docker-compose/docker-compose.type.ts +++ b/web/src/pages/docker-compose/docker-compose.type.ts @@ -31,7 +31,7 @@ export interface INetworkConfig { } | { name: string; - external: boolean; + external_network: boolean; }; } @@ -57,37 +57,58 @@ export interface DockerComposeValidationError { } const KV_Schema = zod.array( - zod - .object({ - key: zod - .string() - .min(1, { message: 'Key must be at least 1 character long' }), - value: zod - .string() - .min(1, { message: 'Value must be at least 1 character long' }), - }) - .nullable(), + zod.object({ + key: zod.string(), + value: zod.string(), + }), ); export const BuildSchema = zod.object({ enabled: zod.boolean(), args: KV_Schema, - context: zod.string(), - dockerfile: zod.string(), + context: zod.string().optional(), + dockerfile: zod.string().optional(), }); -export const ServiceSchema = zod.object({ - name: zod.string(), - build: BuildSchema, - image: zod.string(), - environment: KV_Schema, - container_name: zod.string(), - ports: zod.array(zod.string()).nullable(), - command: zod.string().optional().nullable(), - volumes: zod.array(zod.string()).nullable(), - networks: zod.array(zod.string()).nullable(), - depends_on: zod.array(zod.string()).nullable(), -}); +export const ServiceSchema = zod + .object({ + name: zod.string().min(1, 'Name is required!'), + build: BuildSchema, + image: zod.string().nullable(), + environment: KV_Schema, + container_name: zod.string().nullable(), + ports: zod.array(zod.object({ value: zod.string() })).nullable(), + command: zod.string().optional().nullable(), + volumes: zod.array(zod.object({ value: zod.string() })).nullable(), + networks: zod.array(zod.object({ value: zod.string() })).nullable(), + depends_on: zod.array(zod.object({ value: zod.string() })).nullable(), + }) + .superRefine((data, ctx) => { + if (!data.build.enabled && !data.image) { + ctx.addIssue({ + path: ['image'], + message: 'Image is required.', + code: zod.ZodIssueCode.custom, + }); + } + + if (data.build.enabled) { + if (!data.build.context) { + ctx.addIssue({ + path: ['build', 'context'], + message: 'Context is required.', + code: zod.ZodIssueCode.custom, + }); + } + if (!data.build.dockerfile) { + ctx.addIssue({ + path: ['build', 'dockerfile'], + message: 'Dockerfile is required.', + code: zod.ZodIssueCode.custom, + }); + } + } + }); const labelValueSchema = zod.object({ label: zod.string(), @@ -96,7 +117,7 @@ const labelValueSchema = zod.object({ export const NetworkSchema = zod.union([ zod.object({ - custom: zod.literal(false), + external_network: zod.literal(false), app_network: zod.array( zod.object({ network_name: zod.string(), @@ -105,25 +126,44 @@ export const NetworkSchema = zod.union([ ), }), zod.object({ - custom: zod.literal(true), + external_network: zod.literal(true), app_network: zod.array( zod.object({ - network_name: zod.string(), - external: zod.boolean().optional(), - name: zod.string(), + network_name: zod.string().min(1, 'Network name is required.'), + name: zod.string().min(1, 'Name is required.'), }), ), }), ]); export const DockerComposeSchema = zod.object({ - version: zod.string(), + version: zod.string().min(1, 'Version is required.'), services: zod.array(ServiceSchema), networks: NetworkSchema, }); export type TDockerCompose = zod.infer; +export type DockerCompose = { + version: string; + services: { + [key: string]: { + build: IBuildConfig | null; + image: string | null; + environment: { + [key: string]: string; + } | null; + container_name: string | null; + ports: string[] | null; + command: string | null; + volumes: string[] | null; + networks: string[] | null; + depends_on: string[] | null; + }; + }[]; + networks: INetworkConfig | null; +}; + type AppNetwork = { network_name: string; driver: { diff --git a/web/src/pages/helm-template/components/pod-environment-fields.tsx b/web/src/pages/helm-template/components/pod-environment-fields.tsx index 2a1192f1..bd4dfed4 100644 --- a/web/src/pages/helm-template/components/pod-environment-fields.tsx +++ b/web/src/pages/helm-template/components/pod-environment-fields.tsx @@ -16,14 +16,14 @@ const PodEnvironmentFields: FC = ({ podIndex }) => { }); return ( -
-
+
+

Environments

@@ -32,11 +32,14 @@ const PodEnvironmentFields: FC = ({ podIndex }) => { {fields.map((field, envIdx) => (
div]:mb-0', + 'relative mb-4 flex items-center divide-x-2 divide-gray-200 rounded-md border border-gray-200 dark:divide-gray-500 dark:border-gray-500 [&>div]:mb-0', { 'divide-red-500 border-red-500 dark:divide-red-500 dark:border-red-500': control.getFieldState( `pods.${podIndex}.environment.${envIdx}.name`, + ).invalid || + control.getFieldState( + `pods.${podIndex}.environment.${envIdx}.value`, ).invalid, }, )} @@ -47,23 +50,22 @@ const PodEnvironmentFields: FC = ({ podIndex }) => { name={`pods.${podIndex}.environment.${envIdx}.name`} label="" placeholder="Env" - className="h-12 w-full rounded-s-md px-2 outline-none" + inputClass={'border-none'} /> {envIdx > 0 && ( )}
diff --git a/web/src/pages/helm-template/helm-template.tsx b/web/src/pages/helm-template/helm-template.tsx index 4ff61952..a7122867 100644 --- a/web/src/pages/helm-template/helm-template.tsx +++ b/web/src/pages/helm-template/helm-template.tsx @@ -119,7 +119,7 @@ const HelmTemplate: FC = () => {
-
+
{ isNumber={true} />
-
+

Pods

@@ -144,7 +144,7 @@ const HelmTemplate: FC = () => { {pods.map((pod, index) => (
{
-
+
-
-
-
-
{ inputType="number" isNumber={true} /> -
-
{ isNumber={true} />
-

Persistence

-
+

Persistence

+

Size

{ />
-
+
{
-
+
@@ -254,8 +248,8 @@ const HelmTemplate: FC = () => { label="" />
-

Ingress

-
+

Ingress

+
@@ -265,7 +259,7 @@ const HelmTemplate: FC = () => { label="" />
-
+
{