Skip to content

Commit d67e322

Browse files
authored
fix: Unify behavior of empty and undefined viewSpec.order in object form (#246)
1 parent 5bbf2a2 commit d67e322

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

src/lib/kit/components/Inputs/MultiOneOf/MultiOneOf.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,14 @@ export const MultiOneOf: React.FC<MultiOneOfProps> = (props) => {
5959
[spec.properties],
6060
);
6161

62+
const propertiesOrder = React.useMemo(
63+
() => (spec.viewSpec.order?.length ? spec.viewSpec.order : Object.keys(specProperties)),
64+
[spec.viewSpec.order, specProperties],
65+
);
66+
6267
const options = React.useMemo(
6368
() =>
64-
(spec.viewSpec.order || Object.keys(specProperties)).map((value) => {
69+
propertiesOrder.map((value) => {
6570
const title =
6671
spec.description?.[value] ||
6772
specProperties[value]?.viewSpec.layoutTitle ||
@@ -74,7 +79,7 @@ export const MultiOneOf: React.FC<MultiOneOfProps> = (props) => {
7479
content: title,
7580
};
7681
}),
77-
[spec.description, spec.viewSpec.order, specProperties],
82+
[propertiesOrder, spec.description, specProperties],
7883
);
7984

8085
const filterable = React.useMemo(() => (options.length || 0) > 9, [options.length]);

src/lib/kit/components/Inputs/ObjectBase/ObjectBase.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ export const ObjectBase: React.FC<ObjectBaseProps> = ({
8282
: spec.properties;
8383

8484
const delimiter = spec.viewSpec.delimiter;
85-
const orderProperties = spec.viewSpec.order || Object.keys(specProperties);
85+
const orderProperties = spec.viewSpec.order?.length
86+
? spec.viewSpec.order
87+
: Object.keys(specProperties);
8688

8789
return (
8890
<div className={b('content', {inline})}>

src/lib/kit/components/Views/ObjectBaseView/ObjectBaseView.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ export const ObjectBaseView: React.FC<ObjectBaseViewProps> = ({
3131
: spec.properties;
3232

3333
const delimiter = spec.viewSpec.delimiter;
34-
const orderProperties = spec.viewSpec.order || Object.keys(specProperties);
34+
const orderProperties = spec.viewSpec.order?.length
35+
? spec.viewSpec.order
36+
: Object.keys(specProperties);
3537

3638
return (
3739
<div className={b('content', {inline})}>

src/lib/kit/hooks/useOneOf/useOneOf.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
4343
}
4444
}
4545

46-
return (valueKeys || spec.viewSpec.order || Object.keys(specProperties))[0];
46+
if (valueKeys) return valueKeys[0];
47+
48+
if (spec.viewSpec.order?.length) return spec.viewSpec.order[0];
49+
50+
return Object.keys(specProperties)[0];
4751
});
4852

4953
const onOneOfChange = React.useCallback(
@@ -81,9 +85,14 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
8185
return undefined;
8286
}, [oneOfValue, specBooleanMap]);
8387

88+
const propertiesOrder = React.useMemo(
89+
() => (spec.viewSpec.order?.length ? spec.viewSpec.order : Object.keys(specProperties)),
90+
[spec.viewSpec.order, specProperties],
91+
);
92+
8493
const options = React.useMemo(
8594
() =>
86-
(spec.viewSpec.order || Object.keys(specProperties)).map((value) => {
95+
propertiesOrder.map((value) => {
8796
const title =
8897
spec.description?.[value] ||
8998
specProperties[value]?.viewSpec.layoutTitle ||
@@ -96,7 +105,7 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
96105
content: title,
97106
};
98107
}),
99-
[spec.description, spec.viewSpec.order, specProperties],
108+
[propertiesOrder, spec.description, specProperties],
100109
);
101110

102111
const togglerType = React.useMemo(() => {

0 commit comments

Comments
 (0)