From ef55b625034bc97ef52abd4195340e983f9c601c Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Wed, 19 Aug 2020 12:34:24 -0600 Subject: [PATCH] Allow configuring presentation type fields --- .../data-model/field-detail/components/interface.vue | 4 ++-- .../routes/data-model/field-detail/field-detail.vue | 6 +++++- .../settings/routes/data-model/field-detail/store.ts | 8 +++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue b/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue index dc5e114011..cda0c5ec18 100644 --- a/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue +++ b/app/src/modules/settings/routes/data-model/field-detail/components/interface.vue @@ -40,13 +40,13 @@ export default defineComponent({ required: true, }, }, - setup(props, { emit }) { + setup(props) { const availableInterfaces = computed(() => interfaces.filter((inter) => { const matchesType = inter.types.includes(state.fieldData?.type || 'alias'); let matchesRelation = false; - if (props.type === 'standard') { + if (props.type === 'standard' || props.type === 'presentation') { matchesRelation = inter.relationship === null || inter.relationship === undefined; } else if (props.type === 'file') { matchesRelation = inter.relationship === 'm2o'; diff --git a/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue b/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue index 6ab985f90a..8d28dbd25b 100644 --- a/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue +++ b/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue @@ -104,7 +104,7 @@ export default defineComponent({ const localType = computed(() => { if (props.field === '+') return props.type; - let type: 'standard' | 'file' | 'files' | 'o2m' | 'm2m' | 'm2o' = 'standard'; + let type: 'standard' | 'file' | 'files' | 'o2m' | 'm2m' | 'm2o' | 'presentation' = 'standard'; type = getLocalTypeForField(props.collection, props.field); return type; @@ -195,6 +195,10 @@ export default defineComponent({ ); } + if (localType.value === 'presentation') { + return isEmpty(state.fieldData.field); + } + return isEmpty(state.fieldData.field) || isEmpty(state.fieldData.type); } } 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 1caddf61e5..8d008ba099 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 @@ -18,7 +18,7 @@ export { state, initLocalStore, clearLocalStore }; function initLocalStore( collection: string, field: string, - type: 'standard' | 'file' | 'files' | 'm2o' | 'o2m' | 'm2m' + type: 'standard' | 'file' | 'files' | 'm2o' | 'o2m' | 'm2m' | 'presentation' ) { state = reactive({ fieldData: { @@ -223,6 +223,12 @@ function initLocalStore( } ); } + + if (type === 'presentation') { + delete state.fieldData.schema; + delete state.fieldData.type; + state.fieldData.meta.special = 'alias'; + } } function clearLocalStore() {