From 81faa88c62bfc44f85f016835657acd98b9da4a2 Mon Sep 17 00:00:00 2001 From: Nitwel Date: Fri, 11 Sep 2020 14:18:05 +0200 Subject: [PATCH 01/20] add v-field-select --- app/src/components/register.ts | 2 + .../v-field-select/field-list-item.vue | 37 +++++ app/src/components/v-field-select/index.ts | 4 + app/src/components/v-field-select/readme.md | 1 + app/src/components/v-field-select/types.ts | 7 + .../v-field-select/v-field-select.vue | 138 ++++++++++++++++++ app/src/layouts/tabular/tabular.vue | 7 + 7 files changed, 196 insertions(+) create mode 100644 app/src/components/v-field-select/field-list-item.vue create mode 100644 app/src/components/v-field-select/index.ts create mode 100644 app/src/components/v-field-select/readme.md create mode 100644 app/src/components/v-field-select/types.ts create mode 100644 app/src/components/v-field-select/v-field-select.vue diff --git a/app/src/components/register.ts b/app/src/components/register.ts index b0ddc02027..791834dcaa 100644 --- a/app/src/components/register.ts +++ b/app/src/components/register.ts @@ -13,6 +13,7 @@ import VDivider from './v-divider'; import VError from './v-error'; import VFancySelect from './v-fancy-select'; import VFieldTemplate from './v-field-template'; +import VFieldSelect from './v-field-select'; import VForm from './v-form'; import VHover from './v-hover/'; import VIcon from './v-icon/'; @@ -64,6 +65,7 @@ Vue.component('v-divider', VDivider); Vue.component('v-error', VError); Vue.component('v-fancy-select', VFancySelect); Vue.component('v-field-template', VFieldTemplate); +Vue.component('v-field-select', VFieldSelect); Vue.component('v-form', VForm); Vue.component('v-hover', VHover); Vue.component('v-icon', VIcon); diff --git a/app/src/components/v-field-select/field-list-item.vue b/app/src/components/v-field-select/field-list-item.vue new file mode 100644 index 0000000000..ca48b7cdb4 --- /dev/null +++ b/app/src/components/v-field-select/field-list-item.vue @@ -0,0 +1,37 @@ + + + diff --git a/app/src/components/v-field-select/index.ts b/app/src/components/v-field-select/index.ts new file mode 100644 index 0000000000..b1c710c945 --- /dev/null +++ b/app/src/components/v-field-select/index.ts @@ -0,0 +1,4 @@ +import VFieldSelect from './v-field-select.vue'; + +export default VFieldSelect; +export { VFieldSelect }; diff --git a/app/src/components/v-field-select/readme.md b/app/src/components/v-field-select/readme.md new file mode 100644 index 0000000000..0797026f8a --- /dev/null +++ b/app/src/components/v-field-select/readme.md @@ -0,0 +1 @@ +# Field Select diff --git a/app/src/components/v-field-select/types.ts b/app/src/components/v-field-select/types.ts new file mode 100644 index 0000000000..017198e912 --- /dev/null +++ b/app/src/components/v-field-select/types.ts @@ -0,0 +1,7 @@ +import { TranslateResult } from 'vue-i18n'; + +export type FieldTree = { + field: string; + name: string | TranslateResult; + children?: FieldTree[]; +}; diff --git a/app/src/components/v-field-select/v-field-select.vue b/app/src/components/v-field-select/v-field-select.vue new file mode 100644 index 0000000000..3135187a4a --- /dev/null +++ b/app/src/components/v-field-select/v-field-select.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/app/src/layouts/tabular/tabular.vue b/app/src/layouts/tabular/tabular.vue index 939b05d6ae..c7883a33c5 100644 --- a/app/src/layouts/tabular/tabular.vue +++ b/app/src/layouts/tabular/tabular.vue @@ -1,6 +1,11 @@ diff --git a/app/src/interfaces/one-to-many/options.vue b/app/src/interfaces/one-to-many/options.vue index 1ac74395b9..b2033e5317 100644 --- a/app/src/interfaces/one-to-many/options.vue +++ b/app/src/interfaces/one-to-many/options.vue @@ -1,11 +1,11 @@ @@ -17,10 +17,18 @@ import { useRelationsStore } from '@/stores/'; export default defineComponent({ props: { + collection: { + type: String, + required: true, + }, fieldData: { type: Object as PropType, default: null, }, + relations: { + type: Array as PropType, + default: () => [], + }, value: { type: Object as PropType, default: null, @@ -33,26 +41,24 @@ export default defineComponent({ get() { return props.value?.fields; }, - set(newTemplate: string) { + set(newFields: string) { emit('input', { ...(props.value || {}), - fields: newTemplate, + fields: newFields, }); }, }); - const collection = computed(() => { - const collection = props.fieldData.meta?.collection; - const field = props.fieldData.field; - - if (collection == null || field == null) return null; - - const relationData: Relation[] = relationsStore.getRelationsForField(collection, field); - - return relationData.find((r) => r.one_collection === collection && r.one_field === field)?.many_collection; + const relatedCollection = computed(() => { + if (!props.fieldData || !props.relations || props.relations.length === 0) return null; + const { field } = props.fieldData; + const relatedRelation = props.relations.find( + (relation) => relation.one_collection === props.collection && relation.one_field === field + ); + return relatedRelation?.many_collection || null; }); - return { fields, collection }; + return { fields, relatedCollection }; }, }); From 4b43585dd31bc13dc8c84211f79d9357e6f38d00 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Thu, 24 Sep 2020 16:08:15 -0400 Subject: [PATCH 19/20] remove unused type --- app/src/components/v-field-template/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/components/v-field-template/types.ts b/app/src/components/v-field-template/types.ts index 399c9a239b..f3606450c7 100644 --- a/app/src/components/v-field-template/types.ts +++ b/app/src/components/v-field-template/types.ts @@ -4,7 +4,6 @@ import { TranslateResult } from 'vue-i18n'; export type FieldTree = { field: string; name: string | TranslateResult; - fieldInfo?: Field; disabled?: boolean; children?: FieldTree[]; }; From c0874e0133cdb6b42f7c7f06a8cd696363781bc8 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Thu, 24 Sep 2020 16:08:47 -0400 Subject: [PATCH 20/20] Make classes in options consistent --- app/src/interfaces/one-to-many/options.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/interfaces/one-to-many/options.vue b/app/src/interfaces/one-to-many/options.vue index b2033e5317..aa0ab974d5 100644 --- a/app/src/interfaces/one-to-many/options.vue +++ b/app/src/interfaces/one-to-many/options.vue @@ -2,8 +2,8 @@ {{ $t('interfaces.one-to-many.no_collection') }} -
-
+
+

{{ $t('select_fields') }}

@@ -66,7 +66,7 @@ export default defineComponent({