Skip to content

Commit bcb6933

Browse files
author
dterefe
committed
Fixed bug overwriting imported or prefilled component details.
1 parent 63a5407 commit bcb6933

File tree

2 files changed

+55
-12
lines changed

2 files changed

+55
-12
lines changed

DUUIWeb/src/lib/svelte/components/ComponentPopup.svelte

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,61 @@
2929
const importComponent = async () => {
3030
if (!files) return
3131
const file: File = files[0]
32-
async function parseJsonFile(file) {
32+
33+
async function parseJsonFile(file: File): Promise<any> {
3334
return new Promise((resolve, reject) => {
3435
const fileReader = new FileReader()
35-
fileReader.onload = (event) => resolve(JSON.parse(event.target.result))
36+
fileReader.onload = (event) => {
37+
try {
38+
const text = (event.target?.result || '') as string
39+
resolve(JSON.parse(text))
40+
} catch (err) {
41+
reject(err)
42+
}
43+
}
3644
fileReader.onerror = (error) => reject(error)
3745
fileReader.readAsText(file)
3846
})
3947
}
48+
4049
const result = await parseJsonFile(file)
4150
if (!result) return
4251
43-
let component = blankComponent($currentPipelineStore.oid, index)
52+
// Support both plain component JSON and pipeline JSON (with a components array).
53+
const source: any =
54+
result && Array.isArray(result.components) && result.components.length > 0
55+
? result.components[0]
56+
: result
57+
58+
const base = blankComponent($currentPipelineStore.oid, index)
59+
60+
const mergedOptions = {
61+
...base.options,
62+
...(source.options || {}),
63+
registry_auth: {
64+
...base.options.registry_auth,
65+
...(source.options?.registry_auth || {})
66+
}
67+
}
68+
69+
const component: DUUIComponent = {
70+
...base,
71+
...source,
72+
// Ensure required fields always exist and keep sensible defaults
73+
name: source.name ?? base.name,
74+
driver: source.driver ?? base.driver,
75+
target: source.target ?? base.target,
76+
options: mergedOptions,
77+
parameters: source.parameters ?? base.parameters,
78+
id: uuidv4()
79+
}
4480
4581
drawerStore.open({
4682
id: 'component',
4783
...componentDrawerSettings,
4884
meta: {
49-
component: { ...component, ...result, id: uuidv4() },
50-
inEditor: inEditor,
85+
component,
86+
inEditor,
5187
creating: true
5288
}
5389
})

DUUIWeb/src/lib/svelte/components/Drawer/ComponentDrawer.svelte

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -410,16 +410,23 @@
410410

411411
if (isEmpty(registryEntry.name)) return;
412412

413-
component.name = registryEntry.name
414-
component.target = registryEntry.registry_url
413+
// Build a suggested target from the registry entry.
414+
// If the registry URL is missing, fall back to name:tag.
415+
let suggestedTarget = registryEntry.registry_url
415416
? `${registryEntry.registry_url}${registryEntry.name}:${entryMetadata.tag}`
416-
: "";
417-
418-
if (component.target.startsWith('https://')) {
419-
component.target = component.target.replace(/^https?:\/\//, '');
417+
: `${registryEntry.name}:${entryMetadata.tag}`;
418+
419+
if (suggestedTarget.startsWith('https://')) {
420+
suggestedTarget = suggestedTarget.replace(/^https?:\/\//, '');
421+
}
422+
423+
// Only overwrite the existing target if it is empty.
424+
if (!component.target) {
425+
component.name = registryEntry.name
426+
component.target = suggestedTarget;
427+
component.description = entryMetadata.description
420428
}
421429

422-
component.description = entryMetadata.description
423430
}
424431
}
425432
/>

0 commit comments

Comments
 (0)