Skip to content

Commit 8da4f01

Browse files
authored
Merge pull request #230 from dgageot/save-non-default
Save properties with non default values
2 parents 1f4fe91 + 350cb98 commit 8da4f01

File tree

2 files changed

+22
-20
lines changed

2 files changed

+22
-20
lines changed

src/extension/ui/src/Registry.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ParsedParameters } from "./types/config";
77

88
export const getRegistry = async (client: v1.DockerDesktopClient) => {
99
const parseRegistry = async () => {
10-
const registry = await readFileInPromptsVolume(client, 'registry.yaml')
10+
const registry = await readFileInPromptsVolume(client, REGISTRY_YAML)
1111
if (registry) {
1212
const value = parse(registry)['registry'] as { [key: string]: { ref: string, config: any } }
1313
if (!value) {
@@ -18,7 +18,7 @@ export const getRegistry = async (client: v1.DockerDesktopClient) => {
1818
return {};
1919
}
2020
const writeRegistryIfNotExists = async () => {
21-
const registry = await readFileInPromptsVolume(client, 'registry.yaml')
21+
const registry = await readFileInPromptsVolume(client, REGISTRY_YAML)
2222
if (!registry) {
2323
await writeToPromptsVolume(client, REGISTRY_YAML, 'registry: {}')
2424
}
@@ -95,12 +95,7 @@ export const syncRegistryWithConfig = async (client: v1.DockerDesktopClient, reg
9595
}
9696
const oldRegString = JSON.stringify(registry)
9797
for (const [itemName, itemConfig] of Object.entries(config)) {
98-
const registryItem = registry[itemName]
99-
if (registryItem && registryItem.config?.[itemName]) {
100-
const mergedConfig = mergeDeep(registryItem.config[itemName] || {}, itemConfig)
101-
registry[itemName].config = { [itemName]: mergedConfig }
102-
}
103-
else if (registryItem) {
98+
if (registry[itemName]) {
10499
registry[itemName].config = { [itemName]: itemConfig }
105100
}
106101
}

src/extension/ui/src/components/tile/ConfigEditor.tsx

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ import { v1 } from '@docker/extension-api-client-types';
22
import CheckOutlined from '@mui/icons-material/CheckOutlined';
33
import CloseOutlined from '@mui/icons-material/CloseOutlined';
44
import {
5-
ButtonGroup,
65
CircularProgress,
76
IconButton,
87
Stack,
98
TextField,
10-
Typography,
9+
Typography
1110
} from '@mui/material';
1211
import * as JsonSchema from 'json-schema-library';
1312
import { useEffect, useMemo, useState } from 'react';
1413

14+
import * as JsonSchemaLibrary from "json-schema-library";
1515
import {
1616
buildObjectFromFlattenedObject,
1717
deepFlattenObject,
@@ -50,9 +50,9 @@ const ConfigEditor = ({
5050
() =>
5151
configSchema
5252
? deepFlattenObject({
53-
...catalogItem.configTemplate,
54-
...existingConfigForItem,
55-
})
53+
...catalogItem.configTemplate,
54+
...existingConfigForItem,
55+
})
5656
: {},
5757
[catalogItem.configTemplate, existingConfigForItem, configSchema]
5858
);
@@ -101,7 +101,7 @@ const ConfigEditor = ({
101101
fullWidth
102102
size="small"
103103
label={key}
104-
value={localConfig[key] || ''}
104+
value={localConfig[key]}
105105
onChange={(e) =>
106106
setLocalConfig({ ...localConfig, [key]: e.target.value })
107107
}
@@ -115,12 +115,19 @@ const ConfigEditor = ({
115115
<Stack direction="row" spacing={1}>
116116
<IconButton
117117
size="small"
118-
onClick={() =>
119-
updateExistingConfig(
120-
catalogItem.name,
121-
buildObjectFromFlattenedObject(localConfig)
122-
)
123-
}
118+
onClick={() => {
119+
const newConfig = buildObjectFromFlattenedObject(localConfig);
120+
121+
// Remove all attributes which are optional and which have the defautl value
122+
const schema = new JsonSchemaLibrary.Draft2019(catalogItem.config[0]);
123+
const requiredAttributes = (schema.rootSchema.required || []) as string[];
124+
const template = schema.getTemplate({});
125+
const requiredConfig = Object.fromEntries(Object.entries(newConfig).filter(([key, value]) => {
126+
return requiredAttributes.includes(key) || (value !== template[key]);
127+
}));
128+
129+
updateExistingConfig(catalogItem.name, requiredConfig)
130+
}}
124131
disabled={isSaving}
125132
>
126133
<CheckOutlined

0 commit comments

Comments
 (0)