From 6f9b2cafcdf8e2ec7ce7c0d52b9cce5a6fdff26e Mon Sep 17 00:00:00 2001 From: Nitwel Date: Wed, 31 Mar 2021 16:53:57 +0200 Subject: [PATCH] Add page titles (#4775) * restructure template rendering * add useTitle composable * Split up render-string-template from getFieldsFromTemplate Co-authored-by: rijkvanzanten --- app/src/composables/use-title/index.ts | 4 +++ app/src/composables/use-title/use-title.ts | 18 ++++++++++++ app/src/displays/related-values/index.ts | 2 +- .../interfaces/many-to-one/many-to-one.vue | 29 ++++--------------- .../repeater/repeater-row-header.vue | 3 +- .../interfaces/translations/translations.vue | 2 +- app/src/interfaces/tree-view/tree-view.vue | 2 +- app/src/layouts/cards/cards.vue | 2 +- app/src/modules/collections/routes/item.vue | 20 +++++++++++++ .../get-fields-from-template.ts | 8 +++-- .../utils/get-fields-from-template/index.ts | 4 --- app/src/utils/render-string-template.ts | 19 ++++++++++++ app/src/views/private/private-view.vue | 18 ++++-------- 13 files changed, 81 insertions(+), 50 deletions(-) create mode 100644 app/src/composables/use-title/index.ts create mode 100644 app/src/composables/use-title/use-title.ts rename app/src/utils/{get-fields-from-template => }/get-fields-from-template.ts (52%) delete mode 100644 app/src/utils/get-fields-from-template/index.ts create mode 100644 app/src/utils/render-string-template.ts diff --git a/app/src/composables/use-title/index.ts b/app/src/composables/use-title/index.ts new file mode 100644 index 0000000000..122f3049bb --- /dev/null +++ b/app/src/composables/use-title/index.ts @@ -0,0 +1,4 @@ +import { useTitle } from './use-title'; + +export { useTitle }; +export default useTitle; diff --git a/app/src/composables/use-title/use-title.ts b/app/src/composables/use-title/use-title.ts new file mode 100644 index 0000000000..e5a0e8dd57 --- /dev/null +++ b/app/src/composables/use-title/use-title.ts @@ -0,0 +1,18 @@ +import { ref, Ref, watch } from '@vue/composition-api'; +import { TranslateResult } from 'vue-i18n'; + +export function useTitle(newTitle: string | Ref) { + if (newTitle === undefined || newTitle === null) return; + + const titleRef = typeof newTitle === 'string' ? ref(newTitle) : newTitle; + + watch( + titleRef, + (title, oldTitle) => { + if (typeof title === 'string' && oldTitle !== title) document.title = title; + }, + { immediate: true } + ); + + return titleRef; +} diff --git a/app/src/displays/related-values/index.ts b/app/src/displays/related-values/index.ts index 7fc32a0516..a5db0238a4 100644 --- a/app/src/displays/related-values/index.ts +++ b/app/src/displays/related-values/index.ts @@ -1,6 +1,6 @@ import { defineDisplay } from '@/displays/define'; import DisplayRelatedValues from './related-values.vue'; -import getFieldsFromTemplate from '@/utils/get-fields-from-template'; +import { getFieldsFromTemplate } from '@/utils/get-fields-from-template'; import adjustFieldsForDisplays from '@/utils/adjust-fields-for-displays'; import getRelatedCollection from '@/utils/get-related-collection'; import useCollection from '@/composables/use-collection'; 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 b6cb7cfd4f..1a8535db4f 100644 --- a/app/src/interfaces/many-to-one/many-to-one.vue +++ b/app/src/interfaces/many-to-one/many-to-one.vue @@ -28,26 +28,11 @@ @@ -71,11 +56,7 @@ @click="setCurrent(item)" > - + @@ -105,7 +86,7 @@ import { defineComponent, computed, ref, toRefs, watch, PropType } from '@vue/composition-api'; import { useCollectionsStore, useRelationsStore } from '@/stores/'; import useCollection from '@/composables/use-collection'; -import getFieldsFromTemplate from '@/utils/get-fields-from-template'; +import { getFieldsFromTemplate } from '@/utils/get-fields-from-template'; import api from '@/api'; import DrawerItem from '@/views/private/components/drawer-item'; import DrawerCollection from '@/views/private/components/drawer-collection'; diff --git a/app/src/interfaces/repeater/repeater-row-header.vue b/app/src/interfaces/repeater/repeater-row-header.vue index e349408bf5..ec56eaba49 100644 --- a/app/src/interfaces/repeater/repeater-row-header.vue +++ b/app/src/interfaces/repeater/repeater-row-header.vue @@ -10,8 +10,7 @@