Skip to content

Commit 90702f5

Browse files
committed
feat(web): refactor Docker Compose types and enhance network configuration handling
1 parent ef1d6b1 commit 90702f5

2 files changed

Lines changed: 51 additions & 35 deletions

File tree

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import {
99
DockerComposeResponse,
1010
DockerComposeSchema,
1111
DockerComposeValidationError,
12+
INetworkConfig,
1213
TDockerCompose,
14+
TNetworkDockerCompose,
1315
} from './docker-compose.type';
1416
import { cn } from '@/lib/utils';
1517
import ServiceNetworkFields from './components/service-network-fields';
@@ -117,15 +119,17 @@ const DockerCompose: FC = () => {
117119
({ build: { enabled, ...buildRest }, ...service }) => ({
118120
...service,
119121
environment: convertKVtoObject(service.environment),
120-
build: {
121-
...buildRest,
122-
args: convertKVtoObject(buildRest.args),
123-
},
122+
...(enabled && {
123+
build: {
124+
...buildRest,
125+
args: convertKVtoObject(buildRest.args),
126+
},
127+
}),
124128
}),
125129
);
126130

127131
const refactoredNetwork = data.networks.app_network.reduce(
128-
(acc, network) => {
132+
(acc: INetworkConfig, network) => {
129133
if (!data.networks.custom) {
130134
acc[network.network_name] = {
131135
driver: network.driver?.value,
@@ -149,7 +153,7 @@ const DockerCompose: FC = () => {
149153

150154
console.log(requestBody);
151155

152-
await dockerComposeMutate(data);
156+
await dockerComposeMutate(requestBody);
153157
await download();
154158
} catch (error) {
155159
console.log(error);

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

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,46 @@
1-
import { custom, z as zod } from 'zod';
1+
import { z as zod } from 'zod';
22

3-
export interface DockerComposeBody {
4-
version: string;
5-
services: {
6-
[key: string]: {
7-
build: {
8-
args: {
9-
[key: string]: string;
10-
};
11-
context: string;
12-
dockerfile: string;
13-
};
14-
command: string;
15-
container_name: string;
16-
depends_on: string[];
17-
environment: {
18-
[key: string]: string;
19-
};
20-
image: string;
21-
networks: string[];
22-
ports: string[];
23-
volumes: string[];
3+
interface IBuildConfig {
4+
args: {
5+
[key: string]: string;
6+
};
7+
context: string;
8+
dockerfile: string;
9+
}
10+
11+
interface IServiceConfig {
12+
[key: string]: {
13+
build: IBuildConfig;
14+
image: string;
15+
environment: {
16+
[key: string]: string;
2417
};
18+
container_name: string;
19+
ports: string[];
20+
command?: string;
21+
volumes: string[];
22+
networks: string[];
23+
depends_on: string[];
2524
};
2625
}
2726

27+
export interface INetworkConfig {
28+
[key: string]:
29+
| {
30+
driver: 'bridge' | 'host' | 'none' | 'overlay';
31+
}
32+
| {
33+
name: string;
34+
external: boolean;
35+
};
36+
}
37+
38+
export interface DockerComposeBody {
39+
version: string;
40+
services: IServiceConfig;
41+
networks: INetworkConfig;
42+
}
43+
2844
export interface DockerComposeResponse {
2945
output: string;
3046
}
@@ -54,12 +70,8 @@ const KV_Schema = zod.array(
5470
export const BuildSchema = zod.object({
5571
enabled: zod.boolean(),
5672
args: KV_Schema,
57-
context: zod
58-
.string()
59-
.min(1, { message: 'Context must be at least 1 character long' }),
60-
dockerfile: zod
61-
.string()
62-
.min(1, { message: 'Dockerfile must be at least 1 character long' }),
73+
context: zod.string(),
74+
dockerfile: zod.string(),
6375
});
6476

6577
export const ServiceSchema = zod.object({
@@ -80,7 +92,7 @@ const labelValueSchema = zod.object({
8092
value: zod.enum(['bridge', 'host', 'none', 'overlay']),
8193
});
8294

83-
const NetworkSchema = zod.union([
95+
export const NetworkSchema = zod.union([
8496
zod.object({
8597
custom: zod.literal(false),
8698
app_network: zod.array(

0 commit comments

Comments
 (0)