Skip to content

Commit ec46140

Browse files
committed
feat(web): enhance service configuration handling and improve network type definitions
1 parent cd86001 commit ec46140

6 files changed

Lines changed: 38 additions & 20 deletions

File tree

web/src/lib/helper.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { IServiceConfig } from '@/pages/docker-compose/docker-compose.type';
2+
13
export const getNestedValue = (obj: any, path: string) => {
24
return path.split('.').reduce((acc, part) => acc && acc[part], obj);
35
};
@@ -21,13 +23,10 @@ interface Service {
2123

2224
export const convertServicesToObject = (
2325
services: Service[],
24-
): Record<string, Omit<Service, 'name'>> => {
25-
return services.reduce(
26-
(acc, service) => {
27-
const { name, ...serviceWithoutName } = service;
28-
acc[name] = serviceWithoutName;
29-
return acc;
30-
},
31-
{} as Record<string, Omit<Service, 'name'>>,
32-
);
26+
): IServiceConfig => {
27+
return services.reduce((acc, service) => {
28+
const { name, ...serviceWithoutName } = service;
29+
acc[name] = serviceWithoutName as IServiceConfig[string];
30+
return acc;
31+
}, {} as IServiceConfig);
3332
};

web/src/pages/docker-compose/components/network-fields.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { FC, useState } from 'react';
2-
import { ChevronDown, Plus, Trash2 } from 'lucide-react';
1+
import { FC } from 'react';
2+
import { Plus, Trash2 } from 'lucide-react';
33
import { useFieldArray, useFormContext } from 'react-hook-form';
44
import { FormInput } from '@/components/form/form-input';
55
import { FormCheckbox } from '@/components/form/form-checkbox';
66
import { FormSelect } from '@/components/form/form-select';
7-
import { cn } from '@/lib/utils';
87

98
const defaultNetworkDrivers = ['bridge', 'host', 'none', 'overlay'] as const;
109

web/src/pages/docker-compose/components/service-ports-fields.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const ServicePortsFields: FC<ServicePortsFieldsProps> = ({ serviceIndex }) => {
2929
Add <Plus className="size-3" />
3030
</button>
3131
</div>
32-
<div className="flex space-y-4">
32+
<div className="flex space-x-4">
3333
{fields.map((field, idx) => (
3434
<div
3535
className={cn(

web/src/pages/docker-compose/components/service-volumes-fields.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export const ServiceVolumesFields: FC<ServiceVolumesFieldsProps> = ({
3131
Add <Plus className="size-3" />
3232
</button>
3333
</div>
34-
<div className="flex space-y-4">
34+
<div className="flex space-x-4">
3535
{fields.map((field, idx) => (
3636
<div
3737
className={cn(

web/src/pages/docker-compose/docker-compose.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,16 @@ const DockerCompose: FC = () => {
130130
const refactoredNetwork = data.networks.app_network.reduce(
131131
(acc: INetworkConfig, network) => {
132132
if (!data.networks.custom) {
133-
acc[network.network_name] = {
134-
driver: network.driver?.value,
135-
};
136-
} else {
133+
if ('driver' in network) {
134+
acc[network.network_name] = {
135+
driver: network.driver?.value,
136+
};
137+
}
138+
}
139+
if ('name' in network && 'external' in network) {
137140
acc[network.network_name] = {
138141
name: network.name,
139-
external: network.external,
142+
external: !!network.external,
140143
};
141144
}
142145
return acc;

web/src/pages/docker-compose/docker-compose.type.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ interface IBuildConfig {
88
dockerfile: string;
99
}
1010

11-
interface IServiceConfig {
11+
export interface IServiceConfig {
1212
[key: string]: {
1313
build?: IBuildConfig;
1414
image: string;
@@ -121,3 +121,20 @@ export const DockerComposeSchema = zod.object({
121121
});
122122

123123
export type TDockerCompose = zod.infer<typeof DockerComposeSchema>;
124+
125+
126+
type AppNetwork = {
127+
network_name: string;
128+
driver: {
129+
label: string;
130+
value: "bridge" | "host" | "none" | "overlay";
131+
};
132+
};
133+
134+
type NetworkConfig = {
135+
name: string;
136+
network_name: string;
137+
external?: boolean;
138+
};
139+
140+
export type CombinedNetworkType = AppNetwork | NetworkConfig;

0 commit comments

Comments
 (0)