Skip to content

Commit d6293f3

Browse files
committed
vue-vuetify: Extract control entries and fix usage instructions
fix #2378 The registry entries for the renderers were configured in the same files as the renderers. This lead to the entries being removed due to tree shaking during production builds using esbuild (as used by Vite). This extracts all entries to separate files and improves the README to no longer import the renderers asynchronously .
1 parent cf45f9b commit d6293f3

File tree

89 files changed

+563
-509
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+563
-509
lines changed

packages/vue-vuetify/README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ Use the `json-forms` component for each form you want to render and hand over th
3636
```vue
3737
<script>
3838
import { JsonForms } from '@jsonforms/vue';
39+
import { extendedVuetifyRenderers } from '@jsonforms/vue-vuetify';
3940
import { markRaw } from 'vue';
4041
41-
const { extendedVuetifyRenderers } = await import('@jsonforms/vue-vuetify');
42-
4342
const renderers = markRaw([
4443
...extendedVuetifyRenderers,
4544
// here you can add custom renderers
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {
2+
rankWith,
3+
uiTypeIs,
4+
type JsonFormsRendererRegistryEntry,
5+
} from '@jsonforms/core';
6+
import labelRenderer from './LabelRenderer.vue';
7+
8+
export const entry: JsonFormsRendererRegistryEntry = {
9+
renderer: labelRenderer,
10+
tester: rankWith(1, uiTypeIs('Label')),
11+
};

packages/vue-vuetify/src/additional/LabelRenderer.vue

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,7 @@
99
</template>
1010

1111
<script lang="ts">
12-
import {
13-
rankWith,
14-
uiTypeIs,
15-
type JsonFormsRendererRegistryEntry,
16-
type LabelElement,
17-
} from '@jsonforms/core';
12+
import { type LabelElement } from '@jsonforms/core';
1813
import {
1914
rendererProps,
2015
useJsonFormsLabel,
@@ -38,9 +33,4 @@ const labelRenderer = defineComponent({
3833
});
3934
4035
export default labelRenderer;
41-
42-
export const entry: JsonFormsRendererRegistryEntry = {
43-
renderer: labelRenderer,
44-
tester: rankWith(1, uiTypeIs('Label')),
45-
};
4636
</script>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {
2+
and,
3+
isObjectArray,
4+
rankWith,
5+
uiTypeIs,
6+
type JsonFormsRendererRegistryEntry,
7+
} from '@jsonforms/core';
8+
import controlRenderer from './ListWithDetailRenderer.vue';
9+
10+
export const entry: JsonFormsRendererRegistryEntry = {
11+
renderer: controlRenderer,
12+
tester: rankWith(4, and(uiTypeIs('ListWithDetail'), isObjectArray)),
13+
};

packages/vue-vuetify/src/additional/ListWithDetailRenderer.vue

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,11 +318,6 @@ const controlRenderer = defineComponent({
318318
});
319319
320320
export default controlRenderer;
321-
322-
export const entry: JsonFormsRendererRegistryEntry = {
323-
renderer: controlRenderer,
324-
tester: rankWith(4, and(uiTypeIs('ListWithDetail'), isObjectArray)),
325-
};
326321
</script>
327322

328323
<style scoped>

packages/vue-vuetify/src/additional/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
export { default as LabelRenderer } from './LabelRenderer.vue';
22
export { default as ListWithDetailRenderer } from './ListWithDetailRenderer.vue';
33

4-
import { entry as labelRendererEntry } from './LabelRenderer.vue';
5-
import { entry as listWithDetailRendererEntry } from './ListWithDetailRenderer.vue';
4+
import { entry as labelRendererEntry } from './LabelRenderer.entry';
5+
import { entry as listWithDetailRendererEntry } from './ListWithDetailRenderer.entry';
66

77
export const additionalRenderers = [
88
labelRendererEntry,
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {
2+
isAllOfControl,
3+
rankWith,
4+
type JsonFormsRendererRegistryEntry,
5+
} from '@jsonforms/core';
6+
import controlRenderer from './AllOfRenderer.vue';
7+
8+
export const entry: JsonFormsRendererRegistryEntry = {
9+
renderer: controlRenderer,
10+
tester: rankWith(3, isAllOfControl),
11+
};

packages/vue-vuetify/src/complex/AllOfRenderer.vue

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,8 @@
3636
import {
3737
createCombinatorRenderInfos,
3838
findMatchingUISchema,
39-
isAllOfControl,
40-
rankWith,
4139
type CombinatorSubSchemaRenderInfo,
4240
type ControlElement,
43-
type JsonFormsRendererRegistryEntry,
4441
type UISchemaElement,
4542
} from '@jsonforms/core';
4643
import {
@@ -90,9 +87,4 @@ const controlRenderer = defineComponent({
9087
});
9188
9289
export default controlRenderer;
93-
94-
export const entry: JsonFormsRendererRegistryEntry = {
95-
renderer: controlRenderer,
96-
tester: rankWith(3, isAllOfControl),
97-
};
9890
</script>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {
2+
isAnyOfControl,
3+
rankWith,
4+
type JsonFormsRendererRegistryEntry,
5+
} from '@jsonforms/core';
6+
import controlRenderer from './AnyOfRenderer.vue';
7+
8+
export const entry: JsonFormsRendererRegistryEntry = {
9+
renderer: controlRenderer,
10+
tester: rankWith(3, isAnyOfControl),
11+
};

packages/vue-vuetify/src/complex/AnyOfRenderer.vue

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@ import {
3939
type CombinatorSubSchemaRenderInfo,
4040
type ControlElement,
4141
createCombinatorRenderInfos,
42-
isAnyOfControl,
43-
type JsonFormsRendererRegistryEntry,
44-
rankWith,
4542
} from '@jsonforms/core';
4643
import {
4744
DispatchRenderer,
@@ -94,9 +91,4 @@ const controlRenderer = defineComponent({
9491
});
9592
9693
export default controlRenderer;
97-
98-
export const entry: JsonFormsRendererRegistryEntry = {
99-
renderer: controlRenderer,
100-
tester: rankWith(3, isAnyOfControl),
101-
};
10294
</script>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {
2+
isObjectArrayControl,
3+
isPrimitiveArrayControl,
4+
or,
5+
rankWith,
6+
type JsonFormsRendererRegistryEntry,
7+
} from '@jsonforms/core';
8+
import controlRenderer from './ArrayControlRenderer.vue';
9+
10+
export const entry: JsonFormsRendererRegistryEntry = {
11+
renderer: controlRenderer,
12+
tester: rankWith(3, or(isObjectArrayControl, isPrimitiveArrayControl)),
13+
};

packages/vue-vuetify/src/complex/ArrayControlRenderer.vue

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,7 @@ import {
181181
Resolve,
182182
composePaths,
183183
createDefaultValue,
184-
isObjectArrayControl,
185-
isPrimitiveArrayControl,
186-
or,
187-
rankWith,
188184
type ControlElement,
189-
type JsonFormsRendererRegistryEntry,
190185
type JsonSchema,
191186
} from '@jsonforms/core';
192187
import {
@@ -303,11 +298,6 @@ const controlRenderer = defineComponent({
303298
});
304299
305300
export default controlRenderer;
306-
307-
export const entry: JsonFormsRendererRegistryEntry = {
308-
renderer: controlRenderer,
309-
tester: rankWith(3, or(isObjectArrayControl, isPrimitiveArrayControl)),
310-
};
311301
</script>
312302

313303
<style scoped>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
and,
3+
hasType,
4+
rankWith,
5+
schemaMatches,
6+
schemaSubPathMatches,
7+
uiTypeIs,
8+
type JsonFormsRendererRegistryEntry,
9+
type JsonSchema,
10+
} from '@jsonforms/core';
11+
import controlRenderer from './EnumArrayRenderer.vue';
12+
13+
export const entry: JsonFormsRendererRegistryEntry = {
14+
renderer: controlRenderer,
15+
tester: rankWith(
16+
5,
17+
and(
18+
uiTypeIs('Control'),
19+
and(
20+
schemaMatches(
21+
(schema) =>
22+
hasType(schema, 'array') &&
23+
!Array.isArray(schema.items) &&
24+
schema.uniqueItems === true,
25+
),
26+
schemaSubPathMatches('items', (schema) => {
27+
return hasOneOfItems(schema) || hasEnumItems(schema);
28+
}),
29+
),
30+
),
31+
),
32+
};
33+
34+
const hasOneOfItems = (schema: JsonSchema): boolean =>
35+
schema.oneOf !== undefined &&
36+
schema.oneOf.length > 0 &&
37+
(schema.oneOf as JsonSchema[]).every((entry: JsonSchema) => {
38+
return entry.const !== undefined;
39+
});
40+
41+
const hasEnumItems = (schema: JsonSchema): boolean =>
42+
schema.type === 'string' && schema.enum !== undefined;

packages/vue-vuetify/src/complex/EnumArrayRenderer.vue

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,7 @@
1919
</template>
2020

2121
<script lang="ts">
22-
import {
23-
and,
24-
type ControlElement,
25-
hasType,
26-
type JsonFormsRendererRegistryEntry,
27-
type JsonSchema,
28-
rankWith,
29-
schemaMatches,
30-
schemaSubPathMatches,
31-
uiTypeIs,
32-
composePaths,
33-
} from '@jsonforms/core';
22+
import { type ControlElement, composePaths } from '@jsonforms/core';
3423
import { VCheckbox, VContainer, VRow, VCol } from 'vuetify/components';
3524
import {
3625
rendererProps,
@@ -71,35 +60,4 @@ const controlRenderer = defineComponent({
7160
});
7261
7362
export default controlRenderer;
74-
75-
const hasOneOfItems = (schema: JsonSchema): boolean =>
76-
schema.oneOf !== undefined &&
77-
schema.oneOf.length > 0 &&
78-
(schema.oneOf as JsonSchema[]).every((entry: JsonSchema) => {
79-
return entry.const !== undefined;
80-
});
81-
82-
const hasEnumItems = (schema: JsonSchema): boolean =>
83-
schema.type === 'string' && schema.enum !== undefined;
84-
85-
export const entry: JsonFormsRendererRegistryEntry = {
86-
renderer: controlRenderer,
87-
tester: rankWith(
88-
5,
89-
and(
90-
uiTypeIs('Control'),
91-
and(
92-
schemaMatches(
93-
(schema) =>
94-
hasType(schema, 'array') &&
95-
!Array.isArray(schema.items) &&
96-
schema.uniqueItems === true,
97-
),
98-
schemaSubPathMatches('items', (schema) => {
99-
return hasOneOfItems(schema) || hasEnumItems(schema);
100-
}),
101-
),
102-
),
103-
),
104-
};
10563
</script>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {
2+
isObjectControl,
3+
rankWith,
4+
type JsonFormsRendererRegistryEntry,
5+
} from '@jsonforms/core';
6+
import controlRenderer from './ObjectRenderer.vue';
7+
8+
export const entry: JsonFormsRendererRegistryEntry = {
9+
renderer: controlRenderer,
10+
tester: rankWith(2, isObjectControl),
11+
};

packages/vue-vuetify/src/complex/ObjectRenderer.vue

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,4 @@ const controlRenderer = defineComponent({
111111
});
112112
113113
export default controlRenderer;
114-
115-
export const entry: JsonFormsRendererRegistryEntry = {
116-
renderer: controlRenderer,
117-
tester: rankWith(2, isObjectControl),
118-
};
119114
</script>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {
2+
isOneOfControl,
3+
rankWith,
4+
type JsonFormsRendererRegistryEntry,
5+
} from '@jsonforms/core';
6+
import controlRenderer from './OneOfRenderer.vue';
7+
8+
export const entry: JsonFormsRendererRegistryEntry = {
9+
renderer: controlRenderer,
10+
tester: rankWith(3, isOneOfControl),
11+
};

packages/vue-vuetify/src/complex/OneOfRenderer.vue

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,6 @@ import {
8080
type ControlElement,
8181
createCombinatorRenderInfos,
8282
createDefaultValue,
83-
isOneOfControl,
84-
type JsonFormsRendererRegistryEntry,
85-
rankWith,
8683
} from '@jsonforms/core';
8784
import {
8885
DispatchRenderer,
@@ -213,9 +210,4 @@ const controlRenderer = defineComponent({
213210
});
214211
215212
export default controlRenderer;
216-
217-
export const entry: JsonFormsRendererRegistryEntry = {
218-
renderer: controlRenderer,
219-
tester: rankWith(3, isOneOfControl),
220-
};
221213
</script>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {
2+
and,
3+
isOneOfControl,
4+
optionIs,
5+
rankWith,
6+
type JsonFormsRendererRegistryEntry,
7+
} from '@jsonforms/core';
8+
import controlRenderer from './OneOfTabRenderer.vue';
9+
10+
export const entry: JsonFormsRendererRegistryEntry = {
11+
renderer: controlRenderer,
12+
tester: rankWith(4, and(isOneOfControl, optionIs('variant', 'tab'))),
13+
};

packages/vue-vuetify/src/complex/OneOfTabRenderer.vue

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,10 @@
5959

6060
<script lang="ts">
6161
import {
62-
and,
6362
type CombinatorSubSchemaRenderInfo,
6463
type ControlElement,
6564
createCombinatorRenderInfos,
6665
createDefaultValue,
67-
isOneOfControl,
68-
type JsonFormsRendererRegistryEntry,
69-
optionIs,
70-
rankWith,
7166
} from '@jsonforms/core';
7267
import {
7368
DispatchRenderer,
@@ -187,9 +182,4 @@ const controlRenderer = defineComponent({
187182
});
188183
189184
export default controlRenderer;
190-
191-
export const entry: JsonFormsRendererRegistryEntry = {
192-
renderer: controlRenderer,
193-
tester: rankWith(4, and(isOneOfControl, optionIs('variant', 'tab'))),
194-
};
195185
</script>

0 commit comments

Comments
 (0)