Skip to content

Commit e415d99

Browse files
author
Sean Wilson
committed
fix anyOf data being set to empty object when no schema selected
1 parent c0143ac commit e415d99

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

src/lib/controls/AnyOfControl.svelte

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626
$: resetSelected(schemas);
2727
$: resetData(selected, type);
2828
29+
function isObjSchema() {
30+
return isObjectSchema({ type: selected?.type ?? type });
31+
}
32+
2933
function getKey(schema: JSONSchema7) {
3034
return keys.get(schema) ?? "";
3135
}
@@ -50,24 +54,29 @@
5054
}
5155
5256
async function resetData(selected: JSONSchema7 | null, type: JSONSchema7['type']) {
53-
if (isObjectSchema({ type: selected?.type ?? type })) {
54-
if (selectedProps) {
55-
const omitted = omit(data, selectedProps);
56-
// make sure it's changed (to prevent infinite loop)
57-
if (Object.keys(data).length != Object.keys(omitted).length) {
58-
await tick();
59-
data = omitted;
60-
}
57+
let newData = data;
58+
if (isObjSchema() && (selected != null)) {
59+
if (selectedProps && data) {
60+
newData = omit(data, selectedProps, { keepUnchanged: true });
6161
}
6262
else if ((data == null) || !isEmpty(data)) {
63-
await tick();
64-
data = {};
63+
newData = {};
6564
}
66-
selectedProps = Object.keys(selected?.properties ?? {})
6765
}
6866
else {
69-
if (data != null) data = undefined;
70-
if (selectedProps != null) selectedProps = undefined;
67+
newData = undefined;
68+
}
69+
if (newData !== data) {
70+
await tick();
71+
data = newData;
72+
}
73+
resetSelectedProps();
74+
}
75+
76+
function resetSelectedProps() {
77+
const newSelectedProps = isObjSchema() ? Object.keys(selected?.properties ?? {}) : undefined;
78+
if (newSelectedProps !== selectedProps) {
79+
selectedProps = newSelectedProps;
7180
}
7281
}
7382
</script>

0 commit comments

Comments
 (0)