From 4e8a7de00402f9fabd8b03595a38a9e7c1e362fb Mon Sep 17 00:00:00 2001 From: Rijk van Zanten Date: Fri, 12 Jun 2020 14:20:08 -0400 Subject: [PATCH] Add types to interfaces & displays (#716) * Add types to interfaces * Update display types to match interfaces * Update i/d to use strings --- src/displays/datetime/index.ts | 2 +- src/displays/file/index.ts | 2 +- src/displays/rating/index.ts | 2 +- src/displays/types.ts | 3 +- src/displays/user/index.ts | 2 +- src/interfaces/checkboxes/index.ts | 1 + src/interfaces/code/index.ts | 1 + src/interfaces/collections/index.ts | 1 + src/interfaces/color/index.ts | 1 + src/interfaces/datetime/index.ts | 1 + src/interfaces/divider/index.ts | 1 + src/interfaces/dropdown-multiselect/index.ts | 1 + src/interfaces/dropdown/index.ts | 1 + src/interfaces/file/index.ts | 1 + src/interfaces/files/index.ts | 1 + src/interfaces/hash/index.ts | 1 + src/interfaces/icon/index.ts | 1 + src/interfaces/image/index.ts | 1 + src/interfaces/many-to-many/index.ts | 1 + src/interfaces/many-to-one/index.ts | 1 + src/interfaces/notice/index.ts | 1 + src/interfaces/numeric/index.ts | 2 +- src/interfaces/one-to-many/index.ts | 1 + src/interfaces/radio-buttons/index.ts | 1 + src/interfaces/repeater/index.ts | 2 +- src/interfaces/slider/index.ts | 1 + src/interfaces/slug/index.ts | 1 + src/interfaces/status/index.ts | 1 + src/interfaces/tags/index.ts | 1 + src/interfaces/text-input/index.ts | 1 + src/interfaces/textarea/index.ts | 1 + src/interfaces/toggle/index.ts | 1 + src/interfaces/translations/index.ts | 2 +- src/interfaces/types.ts | 35 ++++++++++++++++++++ src/interfaces/user/index.ts | 1 + src/interfaces/wysiwyg/index.ts | 1 + 36 files changed, 71 insertions(+), 8 deletions(-) diff --git a/src/displays/datetime/index.ts b/src/displays/datetime/index.ts index aa47cf3a84..51d2ad63e1 100644 --- a/src/displays/datetime/index.ts +++ b/src/displays/datetime/index.ts @@ -7,5 +7,5 @@ export default defineDisplay(({ i18n }) => ({ icon: 'query_builder', handler: DisplayDateTime, options: [], - types: ['datetime', 'date', 'time'], + types: ['datetime', 'datetime_created', 'datetime_updated', 'date', 'time'], })); diff --git a/src/displays/file/index.ts b/src/displays/file/index.ts index 44a25fc2fd..4f8448bb38 100644 --- a/src/displays/file/index.ts +++ b/src/displays/file/index.ts @@ -4,9 +4,9 @@ import DisplayFile from './file.vue'; export default defineDisplay(({ i18n }) => ({ id: 'file', name: i18n.t('file'), - types: ['file'], icon: 'insert_photo', handler: DisplayFile, + types: ['file'], options: [], fields: ['data', 'type', 'title'], })); diff --git a/src/displays/rating/index.ts b/src/displays/rating/index.ts index 1d9ef22c28..3609f19edb 100644 --- a/src/displays/rating/index.ts +++ b/src/displays/rating/index.ts @@ -7,5 +7,5 @@ export default defineDisplay(({ i18n }) => ({ icon: 'star', handler: DisplayRating, options: null, - types: ['integer'], + types: ['integer', 'decimal'], })); diff --git a/src/displays/types.ts b/src/displays/types.ts index 298d7c7b96..75f2e3669f 100644 --- a/src/displays/types.ts +++ b/src/displays/types.ts @@ -1,6 +1,7 @@ import VueI18n from 'vue-i18n'; import { Component } from 'vue'; import { Field } from '@/stores/fields/types'; +import { Type } from '@/interfaces/types'; export type DisplayHandlerFunctionContext = { type: string; @@ -28,7 +29,7 @@ export type DisplayConfig = { handler: DisplayHandlerFunction | Component; options: null | Partial[] | Component; - types: string[]; + types: Type[]; fields?: string[] | DisplayFieldsFunction; }; diff --git a/src/displays/user/index.ts b/src/displays/user/index.ts index 31da1f7db6..6409c4c1af 100644 --- a/src/displays/user/index.ts +++ b/src/displays/user/index.ts @@ -4,7 +4,7 @@ import DisplayUser from './user.vue'; export default defineDisplay(({ i18n }) => ({ id: 'user', name: i18n.t('user'), - types: ['user', 'owner', 'user_modified'], + types: ['user', 'user_created', 'user_updated'], icon: 'person', handler: DisplayUser, options: [ diff --git a/src/interfaces/checkboxes/index.ts b/src/interfaces/checkboxes/index.ts index 17a48ba8d9..bd9c572930 100644 --- a/src/interfaces/checkboxes/index.ts +++ b/src/interfaces/checkboxes/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('checkboxes'), icon: 'radio_button_checked', component: InterfaceCheckboxes, + types: ['array'], options: [ { field: 'choices', diff --git a/src/interfaces/code/index.ts b/src/interfaces/code/index.ts index 3f59bd8677..0538de3159 100644 --- a/src/interfaces/code/index.ts +++ b/src/interfaces/code/index.ts @@ -15,6 +15,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('code'), icon: 'code', component: InterfaceCode, + types: ['string', 'json', 'array'], options: [ { field: 'template', diff --git a/src/interfaces/collections/index.ts b/src/interfaces/collections/index.ts index 5f9899fe3e..590befddc5 100644 --- a/src/interfaces/collections/index.ts +++ b/src/interfaces/collections/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('collections'), icon: 'featured_play_list', component: InterfaceCollections, + types: ['string'], options: [ { field: 'includeSystem', diff --git a/src/interfaces/color/index.ts b/src/interfaces/color/index.ts index 9d7b6a0769..81db301c03 100644 --- a/src/interfaces/color/index.ts +++ b/src/interfaces/color/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('color'), icon: 'palette', component: InterfaceColor, + types: ['string'], options: [ { field: 'presets', diff --git a/src/interfaces/datetime/index.ts b/src/interfaces/datetime/index.ts index 7f8bdd945e..401ec9495e 100644 --- a/src/interfaces/datetime/index.ts +++ b/src/interfaces/datetime/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('datetime'), icon: 'today', component: InterfaceDateTime, + types: ['datetime', 'datetime_created', 'datetime_updated', 'date', 'time'], options: [ { field: 'includeSeconds', diff --git a/src/interfaces/divider/index.ts b/src/interfaces/divider/index.ts index dafe1dd46a..480f95baf1 100644 --- a/src/interfaces/divider/index.ts +++ b/src/interfaces/divider/index.ts @@ -8,6 +8,7 @@ export default defineInterface(({ i18n }) => ({ component: InterfaceDivider, hideLabel: true, hideLoader: true, + types: ['alias'], options: [ { field: 'color', diff --git a/src/interfaces/dropdown-multiselect/index.ts b/src/interfaces/dropdown-multiselect/index.ts index 787a8eb5e2..6957e0c1b1 100644 --- a/src/interfaces/dropdown-multiselect/index.ts +++ b/src/interfaces/dropdown-multiselect/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('dropdown_multiple'), icon: 'arrow_drop_down_circle', component: InterfaceDropdownMultiselect, + types: ['array'], options: [ { field: 'choices', diff --git a/src/interfaces/dropdown/index.ts b/src/interfaces/dropdown/index.ts index 292810b4fc..89ebcf4193 100644 --- a/src/interfaces/dropdown/index.ts +++ b/src/interfaces/dropdown/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('dropdown'), icon: 'arrow_drop_down_circle', component: InterfaceDropdown, + types: ['string'], options: [ { field: 'choices', diff --git a/src/interfaces/file/index.ts b/src/interfaces/file/index.ts index 5955957775..364847b15e 100644 --- a/src/interfaces/file/index.ts +++ b/src/interfaces/file/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('file'), icon: 'note_add', component: InterfaceFile, + types: ['file'], options: [], })); diff --git a/src/interfaces/files/index.ts b/src/interfaces/files/index.ts index baf927858b..2832d28124 100644 --- a/src/interfaces/files/index.ts +++ b/src/interfaces/files/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('files'), icon: 'note_add', component: InterfaceFiles, + types: ['files'], options: [], })); diff --git a/src/interfaces/hash/index.ts b/src/interfaces/hash/index.ts index c103864a12..cd8866fafd 100644 --- a/src/interfaces/hash/index.ts +++ b/src/interfaces/hash/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('hash'), icon: 'text_fields', component: InterfaceHash, + types: ['string'], options: [ { field: 'placeholder', diff --git a/src/interfaces/icon/index.ts b/src/interfaces/icon/index.ts index 20e5bf7634..eb4e992886 100644 --- a/src/interfaces/icon/index.ts +++ b/src/interfaces/icon/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('icon'), icon: 'insert_emoticon', component: InterfaceIcon, + types: ['string'], options: [], })); diff --git a/src/interfaces/image/index.ts b/src/interfaces/image/index.ts index a310ef9759..57252fc17d 100644 --- a/src/interfaces/image/index.ts +++ b/src/interfaces/image/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('image'), icon: 'insert_photo', component: InterfaceImage, + types: ['file'], options: [], })); diff --git a/src/interfaces/many-to-many/index.ts b/src/interfaces/many-to-many/index.ts index 43c30f46be..bc905e185d 100644 --- a/src/interfaces/many-to-many/index.ts +++ b/src/interfaces/many-to-many/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('many_to_many'), icon: 'note_add', component: InterfaceManyToMany, + types: ['m2m'], options: [], })); diff --git a/src/interfaces/many-to-one/index.ts b/src/interfaces/many-to-one/index.ts index 6057a72ec8..cc1e54d4d3 100644 --- a/src/interfaces/many-to-one/index.ts +++ b/src/interfaces/many-to-one/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('many_to_one'), icon: 'arrow_right_alt', component: InterfaceManyToOne, + types: ['m2o'], options: [ { field: 'template', diff --git a/src/interfaces/notice/index.ts b/src/interfaces/notice/index.ts index b08172fd88..00605eacd6 100644 --- a/src/interfaces/notice/index.ts +++ b/src/interfaces/notice/index.ts @@ -8,6 +8,7 @@ export default defineInterface(({ i18n }) => ({ component: InterfaceNotice, hideLabel: true, hideLoader: true, + types: ['alias'], options: [ { field: 'color', diff --git a/src/interfaces/numeric/index.ts b/src/interfaces/numeric/index.ts index 9a643a54de..b39dbd4e15 100644 --- a/src/interfaces/numeric/index.ts +++ b/src/interfaces/numeric/index.ts @@ -1,5 +1,4 @@ import InterfaceNumeric from './numeric.vue'; - import { defineInterface } from '@/interfaces/define'; export default defineInterface(({ i18n }) => ({ @@ -7,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('numeric'), icon: 'dialpad', component: InterfaceNumeric, + types: ['integer', 'decimal'], options: [ { field: 'placeholder', diff --git a/src/interfaces/one-to-many/index.ts b/src/interfaces/one-to-many/index.ts index 7b2275798a..b18cc4d020 100644 --- a/src/interfaces/one-to-many/index.ts +++ b/src/interfaces/one-to-many/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('one_to_many'), icon: 'arrow_right_alt', component: InterfaceOneToMany, + types: ['o2m'], options: [], })); diff --git a/src/interfaces/radio-buttons/index.ts b/src/interfaces/radio-buttons/index.ts index f16a470929..21a3df2604 100644 --- a/src/interfaces/radio-buttons/index.ts +++ b/src/interfaces/radio-buttons/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('radio_buttons'), icon: 'radio_button_checked', component: InterfaceRadioButtons, + types: ['string'], options: [ { field: 'choices', diff --git a/src/interfaces/repeater/index.ts b/src/interfaces/repeater/index.ts index d0ac5c5ed5..742c058a4d 100644 --- a/src/interfaces/repeater/index.ts +++ b/src/interfaces/repeater/index.ts @@ -5,7 +5,7 @@ export default defineInterface(({ i18n }) => ({ id: 'repeater', name: i18n.t('repeater'), icon: 'replay', - types: ['json'], component: InterfaceRepeater, + types: ['json'], options: [], })); diff --git a/src/interfaces/slider/index.ts b/src/interfaces/slider/index.ts index aac72409e9..aa1441779b 100644 --- a/src/interfaces/slider/index.ts +++ b/src/interfaces/slider/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('slider'), icon: 'linear_scale', component: InterfaceSlider, + types: ['integer', 'decimal'], options: [ { field: 'minValue', diff --git a/src/interfaces/slug/index.ts b/src/interfaces/slug/index.ts index 5456924470..91080acc3b 100644 --- a/src/interfaces/slug/index.ts +++ b/src/interfaces/slug/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('slug'), icon: 'link', component: InterfaceSlug, + types: ['string'], options: [], })); diff --git a/src/interfaces/status/index.ts b/src/interfaces/status/index.ts index ae52f77502..b7f75192e7 100644 --- a/src/interfaces/status/index.ts +++ b/src/interfaces/status/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('status'), icon: 'bubble_chart', component: InterfaceStatus, + types: ['status'], options: [ { field: 'status_mapping', diff --git a/src/interfaces/tags/index.ts b/src/interfaces/tags/index.ts index 6c92284415..526155f546 100644 --- a/src/interfaces/tags/index.ts +++ b/src/interfaces/tags/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('tags'), icon: 'local_offer', component: InterfaceTags, + types: ['array'], options: [ { field: 'placeholder', diff --git a/src/interfaces/text-input/index.ts b/src/interfaces/text-input/index.ts index 58f81b2d2b..c8d96226db 100644 --- a/src/interfaces/text-input/index.ts +++ b/src/interfaces/text-input/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('text_input'), icon: 'text_fields', component: InterfaceTextInput, + types: ['string'], options: [ { field: 'placeholder', diff --git a/src/interfaces/textarea/index.ts b/src/interfaces/textarea/index.ts index 87a5aafc06..c70fe9a158 100644 --- a/src/interfaces/textarea/index.ts +++ b/src/interfaces/textarea/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('textarea'), icon: 'text_fields', component: InterfaceTextarea, + types: ['string'], options: [ { field: 'placeholder', diff --git a/src/interfaces/toggle/index.ts b/src/interfaces/toggle/index.ts index 5db8bce952..7f5691856d 100644 --- a/src/interfaces/toggle/index.ts +++ b/src/interfaces/toggle/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('toggle'), icon: 'check_box', component: InterfaceToggle, + types: ['boolean'], options: [ { field: 'iconOff', diff --git a/src/interfaces/translations/index.ts b/src/interfaces/translations/index.ts index c0690189ea..eb149faa14 100644 --- a/src/interfaces/translations/index.ts +++ b/src/interfaces/translations/index.ts @@ -5,7 +5,7 @@ export default defineInterface(({ i18n }) => ({ id: 'translations', name: i18n.t('translations'), icon: 'replay', - types: ['o2m'], + types: ['translation'], component: InterfaceTranslations, options: [], })); diff --git a/src/interfaces/types.ts b/src/interfaces/types.ts index 4e8b5d9bb6..2c4cfa72c6 100644 --- a/src/interfaces/types.ts +++ b/src/interfaces/types.ts @@ -2,12 +2,47 @@ import VueI18n from 'vue-i18n'; import { Component } from 'vue'; import { Field } from '@/stores/fields/types'; +const types = [ + 'alias', + 'array', + 'boolean', + 'binary', + 'datetime', + 'date', + 'time', + 'file', + 'files', + 'hash', + 'group', + 'integer', + 'decimal', + 'json', + 'lang', + 'm2o', + 'o2m', + 'm2m', + 'slug', + 'sort', + 'status', + 'string', + 'translation', + 'uuid', + 'datetime_created', + 'datetime_updated', + 'user_created', + 'user_updated', + 'user', +] as const; + +export type Type = typeof types[number]; + export type InterfaceConfig = { id: string; icon: string; name: string | VueI18n.TranslateResult; component: Component; options: Partial[] | Component; + types: Type[]; hideLabel?: boolean; hideLoader?: boolean; }; diff --git a/src/interfaces/user/index.ts b/src/interfaces/user/index.ts index 38895b1336..6a32603116 100644 --- a/src/interfaces/user/index.ts +++ b/src/interfaces/user/index.ts @@ -6,5 +6,6 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('user'), icon: 'person', component: InterfaceUser, + types: ['user', 'user_created', 'user_updated'], options: [], })); diff --git a/src/interfaces/wysiwyg/index.ts b/src/interfaces/wysiwyg/index.ts index 222f8337d8..c96b4b94b3 100644 --- a/src/interfaces/wysiwyg/index.ts +++ b/src/interfaces/wysiwyg/index.ts @@ -6,6 +6,7 @@ export default defineInterface(({ i18n }) => ({ name: i18n.t('wysiwyg'), icon: 'format_quote', component: InterfaceWYSIWYG, + types: ['string'], options: [ { field: 'toolbar',