From 218f3c562d022ecdde7d37afe1337b3cedf45ece Mon Sep 17 00:00:00 2001 From: Tony DevOps <868644+TonyLovesDevOps@users.noreply.github.com> Date: Wed, 15 Sep 2021 13:09:16 -0600 Subject: [PATCH 01/45] Fix broken anchor link. (#8055) --- docs/reference/api/system/authentication.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/api/system/authentication.md b/docs/reference/api/system/authentication.md index d75a19237a..3209f0bf7f 100644 --- a/docs/reference/api/system/authentication.md +++ b/docs/reference/api/system/authentication.md @@ -341,7 +341,7 @@ List all the configured oAuth providers. ::: tip Configuring oAuth To learn more about setting up oAuth providers, see -[Configuring SSO through oAuth](/guides/api-config/#oauth-single-sign-on-openid). +[Configuring SSO through oAuth](/guides/api-config/#oauth-single-sign-on-sso-openid). ::: From fb53ae69804bdc40e2db49b40bb0415a69817941 Mon Sep 17 00:00:00 2001 From: Rijk van Zanten Date: Wed, 15 Sep 2021 15:46:12 -0400 Subject: [PATCH 02/45] Don't flush schema cache on content update (#8056) --- api/src/cache.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/api/src/cache.ts b/api/src/cache.ts index 3371a6bed7..276f54b337 100644 --- a/api/src/cache.ts +++ b/api/src/cache.ts @@ -16,7 +16,7 @@ export function getCache(): { cache: Keyv | null; schemaCache: Keyv | null } { } if (env.CACHE_SCHEMA !== false && schemaCache === null) { - schemaCache = getKeyvInstance(typeof env.CACHE_SCHEMA === 'string' ? ms(env.CACHE_SCHEMA) : undefined); + schemaCache = getKeyvInstance(typeof env.CACHE_SCHEMA === 'string' ? ms(env.CACHE_SCHEMA) : undefined, '_schema'); schemaCache.on('error', (err) => logger.warn(err, `[cache] ${err}`)); } @@ -29,21 +29,25 @@ export async function flushCaches(): Promise { await cache?.clear(); } -function getKeyvInstance(ttl: number | undefined): Keyv { +function getKeyvInstance(ttl: number | undefined, namespaceSuffix?: string): Keyv { switch (env.CACHE_STORE) { case 'redis': - return new Keyv(getConfig('redis', ttl)); + return new Keyv(getConfig('redis', ttl, namespaceSuffix)); case 'memcache': - return new Keyv(getConfig('memcache', ttl)); + return new Keyv(getConfig('memcache', ttl, namespaceSuffix)); case 'memory': default: - return new Keyv(getConfig('memory', ttl)); + return new Keyv(getConfig('memory', ttl, namespaceSuffix)); } } -function getConfig(store: 'memory' | 'redis' | 'memcache' = 'memory', ttl: number | undefined): Options { +function getConfig( + store: 'memory' | 'redis' | 'memcache' = 'memory', + ttl: number | undefined, + namespaceSuffix = '' +): Options { const config: Options = { - namespace: env.CACHE_NAMESPACE, + namespace: `${env.CACHE_NAMESPACE}${namespaceSuffix}`, ttl, }; From 4e624d5c7a5e95e718ffd6b8edd75d85f2cbba51 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Wed, 15 Sep 2021 16:03:37 -0400 Subject: [PATCH 03/45] Move default module listing to app --- .../migrations/20210910A-move-module-setup.ts | 36 +------------------ app/src/constants.ts | 34 ++++++++++++++++++ .../_system/system-modules/system-modules.vue | 19 +++++----- .../views/private/components/module-bar.vue | 3 +- 4 files changed, 47 insertions(+), 45 deletions(-) diff --git a/api/src/database/migrations/20210910A-move-module-setup.ts b/api/src/database/migrations/20210910A-move-module-setup.ts index 774430cbcc..3d8489b882 100644 --- a/api/src/database/migrations/20210910A-move-module-setup.ts +++ b/api/src/database/migrations/20210910A-move-module-setup.ts @@ -6,41 +6,7 @@ export async function up(knex: Knex): Promise { }); await knex.schema.alterTable('directus_settings', (table) => { - table.json('module_bar').defaultTo( - JSON.stringify([ - { - type: 'module', - id: 'collections', - enabled: true, - }, - { - type: 'module', - id: 'users', - enabled: true, - }, - { - type: 'module', - id: 'files', - enabled: true, - }, - { - type: 'module', - id: 'insights', - enabled: false, - }, - { - type: 'module', - id: 'docs', - enabled: true, - }, - { - type: 'module', - id: 'settings', - enabled: true, - locked: true, - }, - ]) - ); + table.json('module_bar'); }); } diff --git a/app/src/constants.ts b/app/src/constants.ts index a436aef802..8dadf3fa18 100644 --- a/app/src/constants.ts +++ b/app/src/constants.ts @@ -21,3 +21,37 @@ export const DIRECTUS_LOGO = ` ⠀⠀⠀⠀⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ `; + +export const MODULE_BAR_DEFAULT = [ + { + type: 'module', + id: 'collections', + enabled: true, + }, + { + type: 'module', + id: 'users', + enabled: true, + }, + { + type: 'module', + id: 'files', + enabled: true, + }, + { + type: 'module', + id: 'insights', + enabled: false, + }, + { + type: 'module', + id: 'docs', + enabled: true, + }, + { + type: 'module', + id: 'settings', + enabled: true, + locked: true, + }, +]; diff --git a/app/src/interfaces/_system/system-modules/system-modules.vue b/app/src/interfaces/_system/system-modules/system-modules.vue index 04dbb97801..9fea557f17 100644 --- a/app/src/interfaces/_system/system-modules/system-modules.vue +++ b/app/src/interfaces/_system/system-modules/system-modules.vue @@ -68,6 +68,7 @@ import { assign } from 'lodash'; import { useI18n } from 'vue-i18n'; import { nanoid } from 'nanoid'; import { Field, DeepPartial } from '@directus/shared/types'; +import { MODULE_BAR_DEFAULT } from '@/constants'; type PreviewExtra = { to: string; @@ -118,7 +119,7 @@ export default defineComponent({ props: { value: { type: Array as PropType, - default: () => [], + default: () => MODULE_BAR_DEFAULT, }, }, emits: ['input'], @@ -145,12 +146,12 @@ export default defineComponent({ const valuesWithData = computed({ get() { - const savedModules = (props.value.filter((value) => value.type === 'module') as SettingsModuleBarModule[]).map( - (value) => value.id - ); + const savedModules = ( + (props.value ?? MODULE_BAR_DEFAULT).filter((value) => value.type === 'module') as SettingsModuleBarModule[] + ).map((value) => value.id); return valueToPreview([ - ...props.value, + ...(props.value ?? MODULE_BAR_DEFAULT), ...availableModulesAsBarModule.value.filter( (availableModuleAsBarModule) => savedModules.includes(availableModuleAsBarModule.id) === false ), @@ -230,7 +231,7 @@ export default defineComponent({ let value: SettingsModuleBarLink; if (id !== '+') { - value = props.value.find((val) => val.id === id) as SettingsModuleBarLink; + value = (props.value ?? MODULE_BAR_DEFAULT).find((val) => val.id === id) as SettingsModuleBarLink; } else { value = { id: nanoid(), @@ -248,11 +249,11 @@ export default defineComponent({ function save() { if (editing.value === '+') { - emit('input', [...props.value, values.value]); + emit('input', [...(props.value ?? MODULE_BAR_DEFAULT), values.value]); } else { emit( 'input', - props.value.map((val) => (val.id === editing.value ? values.value : val)) + (props.value ?? MODULE_BAR_DEFAULT).map((val) => (val.id === editing.value ? values.value : val)) ); } @@ -263,7 +264,7 @@ export default defineComponent({ function remove(id: string) { emit( 'input', - props.value.filter((val) => val.id !== id) + (props.value ?? MODULE_BAR_DEFAULT).filter((val) => val.id !== id) ); } }, diff --git a/app/src/views/private/components/module-bar.vue b/app/src/views/private/components/module-bar.vue index f6401ba9d2..ebaef39533 100644 --- a/app/src/views/private/components/module-bar.vue +++ b/app/src/views/private/components/module-bar.vue @@ -34,6 +34,7 @@ import ModuleBarLogo from './module-bar-logo/'; import ModuleBarAvatar from './module-bar-avatar/'; import { useSettingsStore } from '@/stores/'; import { translate } from '@/utils/translate-object-values'; +import { MODULE_BAR_DEFAULT } from '@/constants'; export default defineComponent({ components: { @@ -49,7 +50,7 @@ export default defineComponent({ const modules = computed(() => { if (!settingsStore.settings) return []; - return settingsStore.settings.module_bar + return (settingsStore.settings.module_bar ?? MODULE_BAR_DEFAULT) .filter((modulePart) => { if (modulePart.type === 'link') return true; return modulePart.enabled && registeredModuleIDs.value.includes(modulePart.id); From ce8401b94022f1a3a510048ba4980c56148f322a Mon Sep 17 00:00:00 2001 From: Nitwel Date: Wed, 15 Sep 2021 22:41:08 +0200 Subject: [PATCH 04/45] Move some compositons, utils and types to shared (#8059) * move composables, types and utils to shared * move composables, utils and types to shared * expose utils and composables in extensionsSDK * fix missing dependencies * Sort index.ts exports * Do the thing Co-authored-by: rijkvanzanten --- app/src/components/v-checkbox/v-checkbox.vue | 2 +- .../v-field-select/v-field-select.vue | 5 +- .../v-field-template/v-field-template.vue | 3 +- app/src/composables/use-collection/index.ts | 4 -- .../use-field-tree/use-field-tree.ts | 5 +- app/src/composables/use-item/use-item.ts | 2 +- app/src/composables/use-items/index.ts | 4 -- app/src/composables/use-items/readme.md | 0 app/src/composables/use-permissions.ts | 2 +- app/src/composables/use-preset/use-preset.ts | 2 +- app/src/composables/use-sync/index.ts | 4 -- app/src/composables/use-sync/readme.md | 31 ----------- app/src/composables/use-template-data.ts | 4 +- app/src/displays/collection/collection.vue | 2 +- app/src/displays/related-values/index.ts | 4 +- app/src/displays/related-values/options.vue | 3 +- .../related-values/related-values.vue | 2 +- app/src/interfaces/list-m2a/list-m2a.vue | 4 +- app/src/interfaces/list-m2m/list-m2m.vue | 2 +- app/src/interfaces/list-m2m/options.vue | 3 +- app/src/interfaces/list-m2m/use-relation.ts | 5 +- .../list-o2m-tree-view/list-o2m-tree-view.vue | 7 ++- .../interfaces/list-o2m-tree-view/options.vue | 3 +- app/src/interfaces/list-o2m/list-o2m.vue | 7 ++- app/src/interfaces/list-o2m/options.vue | 3 +- .../select-dropdown-m2o/options.vue | 3 +- .../select-dropdown-m2o.vue | 4 +- app/src/interfaces/translations/options.vue | 3 +- .../interfaces/translations/translations.vue | 4 +- app/src/layouts/calendar/index.ts | 8 +-- app/src/layouts/calendar/options.vue | 2 +- app/src/layouts/calendar/sidebar.vue | 2 +- app/src/layouts/cards/cards.vue | 4 +- app/src/layouts/cards/components/header.vue | 2 +- app/src/layouts/cards/index.ts | 8 +-- app/src/layouts/cards/options.vue | 2 +- app/src/layouts/cards/sidebar.vue | 2 +- app/src/layouts/map/index.ts | 8 +-- app/src/layouts/map/map.vue | 2 +- app/src/layouts/map/options.vue | 2 +- app/src/layouts/map/sidebar.vue | 2 +- app/src/layouts/tabular/index.ts | 6 +-- app/src/layouts/tabular/options.vue | 2 +- app/src/layouts/tabular/sidebar.vue | 2 +- app/src/layouts/tabular/tabular.vue | 5 +- .../collections/composables/use-navigation.ts | 2 +- .../modules/collections/routes/collection.vue | 2 +- app/src/modules/collections/routes/item.vue | 2 +- app/src/modules/settings/index.ts | 2 +- .../data-model/collections/collections.vue | 2 +- .../components/collection-options.vue | 2 +- .../field-detail/components/actions.vue | 2 +- .../field-detail/components/tabs.vue | 2 +- .../data-model/field-detail/field-detail.vue | 2 +- .../routes/data-model/field-detail/store.ts | 12 ++++- .../fields/components/fields-management.vue | 2 +- .../routes/data-model/fields/fields.vue | 2 +- .../routes/data-model/get-local-type.ts | 3 +- .../routes/data-model/new-collection.vue | 3 +- .../settings/routes/project/project.vue | 2 +- .../components/permissions-overview-row.vue | 3 +- .../permissions-overview-toggle.vue | 3 +- .../composables/use-update-permissions.ts | 3 +- .../permissions-detail/components/fields.vue | 2 +- .../components/permissions.vue | 2 +- .../permissions-detail/components/presets.vue | 2 +- .../permissions-detail/components/tabs.vue | 2 +- .../components/validation.vue | 2 +- app/src/modules/users/routes/item.vue | 2 +- app/src/stores/collections.ts | 2 +- app/src/stores/fields.ts | 3 +- app/src/stores/relations.ts | 2 +- .../add-related-primary-key-to-fields.ts | 2 +- app/src/utils/filters-to-query/index.ts | 4 -- app/src/utils/filters-to-query/readme.md | 53 ------------------- .../get-related-collection.ts | 2 +- app/src/utils/move-in-array/index.ts | 4 -- app/src/utils/render-string-template.ts | 2 +- .../drawer-collection/drawer-collection.vue | 2 +- .../components/drawer-item/drawer-item.vue | 5 +- .../export-sidebar-detail.vue | 2 +- .../filter-sidebar-detail.vue | 2 +- .../layout-sidebar-detail.vue | 2 +- .../revisions-drawer-picker.vue | 2 +- .../revisions-drawer.vue | 2 +- package-lock.json | 22 ++------ packages/extensions-sdk/src/index.ts | 4 +- packages/shared/package.json | 1 + packages/shared/src/composables/index.ts | 4 ++ .../shared/src/composables}/use-collection.ts | 12 +++-- .../src/composables/use-filter-fields.ts | 21 ++++++++ .../shared/src/composables}/use-items.ts | 16 +++--- .../shared/src/composables}/use-sync.ts | 10 ++-- .../shared/src/types/collection.ts | 0 packages/shared/src/types/index.ts | 2 + .../shared}/src/types/relations.ts | 0 .../shared/src/utils}/filters-to-query.ts | 6 +-- .../src/utils/get-fields-from-template.ts | 0 .../shared}/src/utils/get-relation-type.ts | 2 +- packages/shared/src/utils/index.ts | 4 ++ .../shared/src/utils}/move-in-array.ts | 4 +- 101 files changed, 178 insertions(+), 270 deletions(-) delete mode 100644 app/src/composables/use-collection/index.ts delete mode 100644 app/src/composables/use-items/index.ts delete mode 100644 app/src/composables/use-items/readme.md delete mode 100644 app/src/composables/use-sync/index.ts delete mode 100644 app/src/composables/use-sync/readme.md delete mode 100644 app/src/utils/filters-to-query/index.ts delete mode 100644 app/src/utils/filters-to-query/readme.md delete mode 100644 app/src/utils/move-in-array/index.ts rename {app/src/composables/use-collection => packages/shared/src/composables}/use-collection.ts (84%) create mode 100644 packages/shared/src/composables/use-filter-fields.ts rename {app/src/composables/use-items => packages/shared/src/composables}/use-items.ts (94%) rename {app/src/composables/use-sync => packages/shared/src/composables}/use-sync.ts (50%) rename app/src/types/collections.ts => packages/shared/src/types/collection.ts (100%) rename {app => packages/shared}/src/types/relations.ts (100%) rename {app/src/utils/filters-to-query => packages/shared/src/utils}/filters-to-query.ts (81%) rename {app => packages/shared}/src/utils/get-fields-from-template.ts (100%) rename {app => packages/shared}/src/utils/get-relation-type.ts (94%) rename {app/src/utils/move-in-array => packages/shared/src/utils}/move-in-array.ts (79%) diff --git a/app/src/components/v-checkbox/v-checkbox.vue b/app/src/components/v-checkbox/v-checkbox.vue index 395fef1240..89c1e03e58 100644 --- a/app/src/components/v-checkbox/v-checkbox.vue +++ b/app/src/components/v-checkbox/v-checkbox.vue @@ -21,7 +21,7 @@