From 2e6673fdab6885b18bfacddb6e333f8a1fca4fde Mon Sep 17 00:00:00 2001 From: Nitwel Date: Mon, 7 Sep 2020 10:19:37 +0200 Subject: [PATCH] add better support for default values --- app/src/lang/en-US/index.json | 2 + .../field-detail/components/schema.vue | 95 +++++++++++++------ .../routes/data-model/field-detail/store.ts | 19 ++++ 3 files changed, 87 insertions(+), 29 deletions(-) diff --git a/app/src/lang/en-US/index.json b/app/src/lang/en-US/index.json index 7b17751c38..f79cc6c65e 100644 --- a/app/src/lang/en-US/index.json +++ b/app/src/lang/en-US/index.json @@ -373,6 +373,8 @@ "primary_key_field": "Primary Key Field", "type": "Type", "number": "Number", + "true": "True", + "false": "False", "creating_new_collection": "Creating New Collection", "status": "Status", "sort": "Sort", diff --git a/app/src/modules/settings/routes/data-model/field-detail/components/schema.vue b/app/src/modules/settings/routes/data-model/field-detail/components/schema.vue index 7e2a4a0d82..efefa247c8 100644 --- a/app/src/modules/settings/routes/data-model/field-detail/components/schema.vue +++ b/app/src/modules/settings/routes/data-model/field-detail/components/schema.vue @@ -40,9 +40,47 @@ -
+
{{ $t('default_value') }}
- + + + + + +
@@ -165,39 +203,37 @@ export default defineComponent({ const default_value = computed({ get() { - switch (state.fieldData.type) { - case 'boolean': - return String(state.fieldData.schema.default_value || false); - default: - return state.fieldData.schema.default_value; - } + return state.fieldData.schema.default_value; }, - set(newVal: string) { - switch (state.fieldData.type) { - case 'boolean': - state.fieldData.schema.default_value = Boolean(newVal); - default: - return state.fieldData.schema.default_value; - } + set(newVal: any) { + state.fieldData.schema.default_value = newVal; }, }); - return { fieldData: state.fieldData, typesWithLabels, setType, typeDisabled, typePlaceholder, default_value }; + const default_type = computed(() => { + if (['integer', 'bigInteger', 'float', 'decimal'].includes(state.fieldData.type)) return 'number'; + else if (['string', 'uuid'].includes(state.fieldData.type)) { + return 'string'; + } else if (['timestamp', 'datetime', 'date', 'time'].includes(state.fieldData.type)) { + return 'datetime'; + } else { + return state.fieldData.type; + } + }); + + return { + fieldData: state.fieldData, + typesWithLabels, + setType, + typeDisabled, + typePlaceholder, + default_value, + default_type, + }; function setType(value: typeof types[number]) { - switch (value) { - case 'uuid': - state.fieldData.meta.special = 'uuid'; - break; - case 'json': - state.fieldData.meta.special = 'json'; - break; - case 'boolean': - state.fieldData.meta.special = 'boolean'; - state.fieldData.schema.is_nullable = false; - break; - default: - state.fieldData.meta.special = null; + if (value === 'uuid') { + state.fieldData.meta.special = 'uuid'; } // We'll reset the interface/display as they most likely won't work for the newly selected @@ -206,6 +242,7 @@ export default defineComponent({ state.fieldData.meta.options = null; state.fieldData.meta.display = null; state.fieldData.meta.display_options = null; + state.fieldData.schema.default_value = undefined; state.fieldData.type = value; } }, diff --git a/app/src/modules/settings/routes/data-model/field-detail/store.ts b/app/src/modules/settings/routes/data-model/field-detail/store.ts index 52cea1d8ac..7e9b6b935f 100644 --- a/app/src/modules/settings/routes/data-model/field-detail/store.ts +++ b/app/src/modules/settings/routes/data-model/field-detail/store.ts @@ -291,6 +291,25 @@ function initLocalStore( delete state.fieldData.type; state.fieldData.meta.special = 'alias'; } + + if (type === 'standard') { + watch( + () => state.fieldData.type, + () => { + switch (state.fieldData.type) { + case 'json': + state.fieldData.meta.special = 'json'; + break; + case 'boolean': + state.fieldData.meta.special = 'boolean'; + state.fieldData.schema.is_nullable = false; + break; + default: + state.fieldData.meta.special = null; + } + } + ); + } } function clearLocalStore() {