From 4bd4e4ed1bd1661e3e65ce092c6a7556e620b91b Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Thu, 6 Aug 2020 15:40:34 -0400 Subject: [PATCH 1/3] Unbind tooltip on change to falsey value --- app/src/directives/tooltip/tooltip.ts | 37 +++++++++++++++++---------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/app/src/directives/tooltip/tooltip.ts b/app/src/directives/tooltip/tooltip.ts index ffeab207de..9a4265b13d 100644 --- a/app/src/directives/tooltip/tooltip.ts +++ b/app/src/directives/tooltip/tooltip.ts @@ -4,20 +4,31 @@ import { nanoid } from 'nanoid'; const handlers: Record void> = {}; + +function bind(element: HTMLElement, binding: DirectiveBinding) { + element.dataset.tooltip = nanoid(); + handlers[element.dataset.tooltip] = createEnterHandler(element, binding); + element.addEventListener('mouseenter', handlers[element.dataset.tooltip]); + element.addEventListener('mouseleave', onLeaveTooltip); +} + +function unbind(element: HTMLElement) { + element.removeEventListener('mouseenter', handlers[element.dataset.tooltip as string]); + element.removeEventListener('mouseleave', onLeaveTooltip); + clearTimeout(tooltipTimer); + const tooltip = getTooltip(); + tooltip.classList.remove('visible'); + delete handlers[element.dataset.tooltip as string]; +} + const Tooltip: DirectiveOptions = { - bind(element, binding) { - element.dataset.tooltip = nanoid(); - handlers[element.dataset.tooltip] = createEnterHandler(element, binding); - element.addEventListener('mouseenter', handlers[element.dataset.tooltip]); - element.addEventListener('mouseleave', onLeaveTooltip); - }, - unbind(element) { - element.removeEventListener('mouseenter', handlers[element.dataset.tooltip as string]); - element.removeEventListener('mouseleave', onLeaveTooltip); - clearTimeout(tooltipTimer); - const tooltip = getTooltip(); - tooltip.classList.remove('visible'); - delete handlers[element.dataset.tooltip as string]; + bind, unbind, + update(element, binding) { + if (binding.value && !binding.oldValue) { + bind(element, binding); + } else if (!binding.value && binding.oldValue) { + unbind(element); + } } }; From 2163ed5f8eb0bfa84157c3148a2e28a43e23bc9b Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Thu, 6 Aug 2020 15:42:30 -0400 Subject: [PATCH 2/3] Add tooltips to collections browse --- app/src/modules/collections/routes/browse/browse.vue | 6 +++--- .../views/private/components/search-input/search-input.vue | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/modules/collections/routes/browse/browse.vue b/app/src/modules/collections/routes/browse/browse.vue index 4669e533b4..6e41911f3d 100644 --- a/app/src/modules/collections/routes/browse/browse.vue +++ b/app/src/modules/collections/routes/browse/browse.vue @@ -48,7 +48,7 @@ @@ -67,11 +67,11 @@ - + - + diff --git a/app/src/views/private/components/search-input/search-input.vue b/app/src/views/private/components/search-input/search-input.vue index f0643787ef..3d3bb1a3a0 100644 --- a/app/src/views/private/components/search-input/search-input.vue +++ b/app/src/views/private/components/search-input/search-input.vue @@ -4,6 +4,7 @@ :class="{ active, 'has-content': !!value }" v-click-outside="disable" @click="active = true" + v-tooltip.bottom="active ? null : $t('search')" > From 50c5a66bba9d53b8eb3512bed75f344927023613 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Thu, 6 Aug 2020 16:06:01 -0400 Subject: [PATCH 3/3] Add tooltips to save buttons --- app/.eslintrc.js | 1 + app/src/composables/use-item/use-item.ts | 2 +- .../interfaces/many-to-one/many-to-one.vue | 2 +- app/src/lang/en-US/index.json | 4 ++++ .../collections/composables/use-navigation.ts | 4 ++-- .../browse-or-detail/browse-or-detail.vue | 2 +- .../collections/routes/detail/detail.vue | 2 +- .../components/add-folder/add-folder.vue | 2 +- .../modules/files/routes/browse/browse.vue | 8 ++++---- .../modules/files/routes/detail/detail.vue | 8 ++++---- .../data-model/collections/collections.vue | 20 +++++++++---------- .../routes/data-model/fields/fields.vue | 8 ++++---- .../settings/routes/presets/browse/browse.vue | 4 ++-- .../settings/routes/presets/detail/detail.vue | 4 ++-- .../settings/routes/project/project.vue | 2 +- .../settings/routes/roles/browse/browse.vue | 2 +- .../settings/routes/roles/detail/detail.vue | 4 ++-- .../modules/users/routes/browse/browse.vue | 4 ++-- .../modules/users/routes/detail/detail.vue | 4 ++-- app/src/stores/collections/collections.ts | 10 +++++----- app/src/stores/collections/types.ts | 4 ++-- app/src/styles/_tooltip.scss | 2 +- 22 files changed, 54 insertions(+), 49 deletions(-) diff --git a/app/.eslintrc.js b/app/.eslintrc.js index 29b594145a..99482da666 100644 --- a/app/.eslintrc.js +++ b/app/.eslintrc.js @@ -17,6 +17,7 @@ module.exports = { '@typescript-eslint/no-use-before-define': 0, '@typescript-eslint/ban-ts-ignore': 0, '@typescript-eslint/no-explicit-any': 0, + 'vue/valid-v-slot': 0, 'comma-dangle': [ 'error', { diff --git a/app/src/composables/use-item/use-item.ts b/app/src/composables/use-item/use-item.ts index dc1a141f65..d9d3d31fba 100644 --- a/app/src/composables/use-item/use-item.ts +++ b/app/src/composables/use-item/use-item.ts @@ -17,7 +17,7 @@ export function useItem(collection: Ref, primaryKey: Ref primaryKey.value === '+'); const isBatch = computed(() => typeof primaryKey.value === 'string' && primaryKey.value.includes(',')); - const isSingle = computed(() => !!collectionInfo.value?.system?.single); + const isSingle = computed(() => !!collectionInfo.value?.meta?.single); const endpoint = computed(() => { return collection.value.startsWith('directus_') diff --git a/app/src/interfaces/many-to-one/many-to-one.vue b/app/src/interfaces/many-to-one/many-to-one.vue index 63a010e750..985f885671 100644 --- a/app/src/interfaces/many-to-one/many-to-one.vue +++ b/app/src/interfaces/many-to-one/many-to-one.vue @@ -361,7 +361,7 @@ export default defineComponent({ function usePreview() { const displayTemplate = computed(() => { if (props.template !== null) return props.template; - return collectionInfo.value?.system?.display_template; + return collectionInfo.value?.meta?.display_template; }); const requiredFields = computed(() => { diff --git a/app/src/lang/en-US/index.json b/app/src/lang/en-US/index.json index 640e36db78..979f669f6e 100644 --- a/app/src/lang/en-US/index.json +++ b/app/src/lang/en-US/index.json @@ -10,6 +10,10 @@ "only_show_the_file_extension": "Only show the file extension", "textarea": "Textarea", + "add_preset": "Add Preset", + "add_role": "Add Role", + "add_user": "Add User", + "uploaded_by": "Uploaded By", "hide_field_on_detail": "Hide Field on Detail", "show_field_on_detail": "Show Field on Detail", diff --git a/app/src/modules/collections/composables/use-navigation.ts b/app/src/modules/collections/composables/use-navigation.ts index 039d603c17..4607d21ee5 100644 --- a/app/src/modules/collections/composables/use-navigation.ts +++ b/app/src/modules/collections/composables/use-navigation.ts @@ -38,7 +38,7 @@ export default function useNavigation() { const navItem: NavItem = { collection: collection, name: collectionInfo.name, - icon: collectionInfo.system?.icon || 'box', + icon: collectionInfo.meta?.icon || 'box', to: `/collections/${collection}`, }; @@ -57,7 +57,7 @@ export default function useNavigation() { const navItem: NavItem = { collection: collection.collection, name: collection.name, - icon: collection.system?.icon || 'box', + icon: collection.meta?.icon || 'box', to: `/collections/${collection.collection}`, }; diff --git a/app/src/modules/collections/routes/browse-or-detail/browse-or-detail.vue b/app/src/modules/collections/routes/browse-or-detail/browse-or-detail.vue index 4029d54ab5..4027ec97c7 100644 --- a/app/src/modules/collections/routes/browse-or-detail/browse-or-detail.vue +++ b/app/src/modules/collections/routes/browse-or-detail/browse-or-detail.vue @@ -26,7 +26,7 @@ export default defineComponent({ const isSingle = computed(() => { const collectionInfo = collectionsStore.getCollection(props.collection); - return !!collectionInfo?.system?.single === true; + return !!collectionInfo?.meta?.single === true; }); return { component, isSingle }; diff --git a/app/src/modules/collections/routes/detail/detail.vue b/app/src/modules/collections/routes/detail/detail.vue index 8ab1973cd7..3f5dfbeeef 100644 --- a/app/src/modules/collections/routes/detail/detail.vue +++ b/app/src/modules/collections/routes/detail/detail.vue @@ -105,7 +105,7 @@ diff --git a/app/src/modules/files/routes/detail/detail.vue b/app/src/modules/files/routes/detail/detail.vue index 78350eda55..95aa77f6c4 100644 --- a/app/src/modules/files/routes/detail/detail.vue +++ b/app/src/modules/files/routes/detail/detail.vue @@ -14,7 +14,7 @@ diff --git a/app/src/modules/settings/routes/roles/browse/browse.vue b/app/src/modules/settings/routes/roles/browse/browse.vue index 382a4caba1..3effc589b2 100644 --- a/app/src/modules/settings/routes/roles/browse/browse.vue +++ b/app/src/modules/settings/routes/roles/browse/browse.vue @@ -9,7 +9,7 @@ diff --git a/app/src/modules/settings/routes/roles/detail/detail.vue b/app/src/modules/settings/routes/roles/detail/detail.vue index 54e693da4f..1a763d9f07 100644 --- a/app/src/modules/settings/routes/roles/detail/detail.vue +++ b/app/src/modules/settings/routes/roles/detail/detail.vue @@ -9,7 +9,7 @@