112 lines
3.8 KiB
TypeScript
112 lines
3.8 KiB
TypeScript
import type { JsonFormsRendererRegistryEntry } from '@jsonforms/core'
|
|
import {
|
|
and,
|
|
hasType,
|
|
isBooleanControl,
|
|
isDateControl,
|
|
isDateTimeControl,
|
|
isEnumControl,
|
|
isIntegerControl,
|
|
isMultiLineControl,
|
|
isNumberControl,
|
|
isOneOfEnumControl,
|
|
isStringControl,
|
|
isTimeControl,
|
|
rankWith,
|
|
schemaMatches,
|
|
uiTypeIs
|
|
} from '@jsonforms/core'
|
|
import { vanillaRenderers } from '@jsonforms/vue-vanilla'
|
|
import BooleanControlRenderer from '~/components/form/json/BooleanControlRenderer.vue'
|
|
import DateControlRenderer from '~/components/form/json/DateControlRenderer.vue'
|
|
import DateTimeControlRenderer from '~/components/form/json/DateTimeControlRenderer.vue'
|
|
import MultiEnumControlRenderer from '~/components/form/json/MultiEnumControlRenderer.vue'
|
|
import EnumControlRenderer from '~/components/form/json/EnumControlRenderer.vue'
|
|
import EnumOneOfControlRenderer from '~/components/form/json/EnumOneOfControlRenderer.vue'
|
|
import IntegerControlRenderer from '~/components/form/json/IntegerControlRenderer.vue'
|
|
import MultiStringControlRenderer from '~/components/form/json/MultiStringControlRenderer.vue'
|
|
import NumberControlRenderer from '~/components/form/json/NumberControlRenderer.vue'
|
|
import StringControlRenderer from '~/components/form/json/StringControlRenderer.vue'
|
|
import TimeControlRenderer from '~/components/form/json/TimeControlRenderer.vue'
|
|
|
|
export const stringControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: StringControlRenderer as unknown,
|
|
tester: rankWith(3, isStringControl)
|
|
}
|
|
|
|
export const booleanControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: BooleanControlRenderer as unknown,
|
|
tester: rankWith(3, isBooleanControl)
|
|
}
|
|
|
|
export const enumControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: EnumControlRenderer as unknown,
|
|
tester: rankWith(4, isEnumControl)
|
|
}
|
|
|
|
export const enumOneOfControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: EnumOneOfControlRenderer as unknown,
|
|
tester: rankWith(4, isOneOfEnumControl)
|
|
}
|
|
|
|
export const integerControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: IntegerControlRenderer as unknown,
|
|
tester: rankWith(3, isIntegerControl)
|
|
}
|
|
|
|
export const multiStringControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: MultiStringControlRenderer as unknown,
|
|
tester: rankWith(4, and(isStringControl, isMultiLineControl))
|
|
}
|
|
|
|
export const numberControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: NumberControlRenderer as unknown,
|
|
tester: rankWith(3, isNumberControl)
|
|
}
|
|
|
|
export const dateControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: DateControlRenderer as unknown,
|
|
tester: rankWith(4, isDateControl)
|
|
}
|
|
|
|
export const dateTimeControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: DateTimeControlRenderer as unknown,
|
|
tester: rankWith(4, isDateTimeControl)
|
|
}
|
|
|
|
export const timeControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: TimeControlRenderer as unknown,
|
|
tester: rankWith(4, isTimeControl)
|
|
}
|
|
|
|
export const multiEnumControlRenderer: JsonFormsRendererRegistryEntry = {
|
|
renderer: MultiEnumControlRenderer as unknown,
|
|
tester: rankWith(
|
|
6,
|
|
and(
|
|
uiTypeIs('Control'),
|
|
and(
|
|
schemaMatches(
|
|
(schema) => hasType(schema, 'array') && !Array.isArray(schema.items)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
}
|
|
|
|
export const renderers: JsonFormsRendererRegistryEntry[] = markRaw([
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
...vanillaRenderers,
|
|
stringControlRenderer,
|
|
booleanControlRenderer,
|
|
enumControlRenderer,
|
|
enumOneOfControlRenderer,
|
|
integerControlRenderer,
|
|
multiStringControlRenderer,
|
|
numberControlRenderer,
|
|
dateControlRenderer,
|
|
dateTimeControlRenderer,
|
|
timeControlRenderer,
|
|
multiEnumControlRenderer
|
|
])
|