From 214890d8d22788bef902959bbd8d5b4efff04fee Mon Sep 17 00:00:00 2001 From: Felix Neubauer Date: Mon, 4 May 2026 13:10:56 +0200 Subject: [PATCH 1/5] add nullable checkbox to schema diagram --- .../schema-diagram/SchemaObjectAttribute.vue | 37 ++++- .../schema-diagram/SchemaObjectNode.vue | 10 ++ .../panels/schema-diagram/VueFlowPanel.vue | 13 +- .../__tests__/SchemaObjectAttribute.test.ts | 74 ++++++++++ .../__tests__/schemaManipulationUtils.test.ts | 62 +++++++++ .../__tests__/typeUtils.test.ts | 105 ++++++++++++++ .../schemaGraphConstructor.ts | 17 ++- .../schema/graph-representation/typeUtils.ts | 48 ++++++- .../resolveReferencesForDocumentation.ts | 19 +-- .../src/schema/schemaReadingUtils.ts | 128 +++++++++++++++++- .../src/schema/schemaReferenceUtils.ts | 32 +++++ .../__tests__/settingsUpdater.test.ts | 8 ++ .../src/settings/defaultSettingsData.ts | 1 + .../src/settings/settingsSchema.ts | 7 + .../src/settings/settingsTypes.ts | 1 + 15 files changed, 540 insertions(+), 22 deletions(-) create mode 100644 meta_configurator/src/components/panels/schema-diagram/__tests__/SchemaObjectAttribute.test.ts create mode 100644 meta_configurator/src/schema/__tests__/schemaManipulationUtils.test.ts create mode 100644 meta_configurator/src/schema/graph-representation/__tests__/typeUtils.test.ts create mode 100644 meta_configurator/src/schema/schemaReferenceUtils.ts diff --git a/meta_configurator/src/components/panels/schema-diagram/SchemaObjectAttribute.vue b/meta_configurator/src/components/panels/schema-diagram/SchemaObjectAttribute.vue index cafb568b5..af847bae0 100644 --- a/meta_configurator/src/components/panels/schema-diagram/SchemaObjectAttribute.vue +++ b/meta_configurator/src/components/panels/schema-diagram/SchemaObjectAttribute.vue @@ -15,6 +15,7 @@ import { import Button from 'primevue/button'; import {FontAwesomeIcon} from '@fortawesome/vue-fontawesome'; import {useSettings} from '@/settings/useSettings'; +import {doesSchemaAllowNull} from '@/schema/schemaReadingUtils'; const settings = useSettings(); @@ -42,6 +43,11 @@ const emit = defineEmits<{ attributeData: SchemaObjectAttributeData, required: boolean ): void; + ( + e: 'update_attribute_nullable', + attributeData: SchemaObjectAttributeData, + nullable: boolean + ): void; (e: 'delete_element', objectData: SchemaElementData): void; }>(); @@ -49,6 +55,14 @@ function updateRequired() { emit('update_attribute_required', props.data, props.data.required); } +function updateNullable(event: Event) { + emit( + 'update_attribute_nullable', + props.data, + (event.target as HTMLInputElement).checked + ); +} + const attrName = ref(props.data.name); const selectedType: Ref = ref( determineTypeChoiceBySchema(props.typeChoices, props.data.schema) @@ -83,6 +97,10 @@ function isHighlighted() { return props.selectedData && props.selectedData == props.data; } +function isNullable() { + return doesSchemaAllowNull(props.data.schema); +} + function getHandleId() { return `source-${props.data.name}`; } @@ -122,9 +140,11 @@ function getHandleTop() {
+ +