diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/constants.ts index 6b39e48151..71e09a57d2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/constants.ts @@ -5,8 +5,10 @@ export * from './modals/constants.js'; export * from './paths.js'; export * from './reference/constants.js'; export * from './repository/constants.js'; +export * from './search/constants.js'; export * from './tree/constants.js'; export * from './workspace/constants.js'; + export { UMB_DATA_TYPE_ENTITY_TYPE, UMB_DATA_TYPE_ROOT_ENTITY_TYPE, diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/constants.ts new file mode 100644 index 0000000000..c2d7478ea8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/constants.ts @@ -0,0 +1,2 @@ +export * from './global-search/constants.js'; +export const UMB_DATA_TYPE_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.DataType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/global-search/constants.ts new file mode 100644 index 0000000000..f6c707a62e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_DATA_TYPE_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.DataType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/global-search/manifests.ts new file mode 100644 index 0000000000..85f076e27e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_DATA_TYPE_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_DATA_TYPE_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; +import { UMB_SETTINGS_SECTION_ALIAS } from '@umbraco-cms/backoffice/settings'; + +export const manifests: Array = [ + { + name: 'Data Type Global Search', + alias: UMB_DATA_TYPE_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 400, + meta: { + label: 'Data Types', + searchProviderAlias: UMB_DATA_TYPE_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_SETTINGS_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/manifests.ts index e02ff1c2a2..6c2c81365c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/search/manifests.ts @@ -1,4 +1,5 @@ import { UMB_DATA_TYPE_ENTITY_TYPE } from '../entity.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { @@ -17,4 +18,5 @@ export const manifests: Array = [ type: 'searchResultItem', forEntityTypes: [UMB_DATA_TYPE_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/constants.ts index b209cb74c4..ee327114e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/constants.ts @@ -1 +1,2 @@ +export * from './global-search/constants.js'; export const UMB_DICTIONARY_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.Dictionary'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/global-search/constants.ts new file mode 100644 index 0000000000..ac2638ce13 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_DICTIONARY_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.Dictionary'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/global-search/manifests.ts new file mode 100644 index 0000000000..91856af6cb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_DICTIONARY_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_DICTIONARY_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; +import { UMB_TRANSLATION_SECTION_ALIAS } from '@umbraco-cms/backoffice/translation'; + +export const manifests: Array = [ + { + name: 'Dictionary Global Search', + alias: UMB_DICTIONARY_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 600, + meta: { + label: 'Dictionary', + searchProviderAlias: UMB_DICTIONARY_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_TRANSLATION_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/manifests.ts index 5c2f886811..ce4564264a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/search/manifests.ts @@ -1,5 +1,6 @@ import { UMB_DICTIONARY_ENTITY_TYPE } from '../entity.js'; import { UMB_DICTIONARY_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { @@ -18,4 +19,5 @@ export const manifests: Array = [ type: 'searchResultItem', forEntityTypes: [UMB_DICTIONARY_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/constants.ts index ec598f76cc..eff2866ede 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/constants.ts @@ -1 +1,2 @@ +export * from './global-search/constants.js'; export const UMB_DOCUMENT_TYPE_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.DocumentType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/global-search/constants.ts new file mode 100644 index 0000000000..566c1b4fa2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_DOCUMENT_TYPE_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.DocumentType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/global-search/manifests.ts new file mode 100644 index 0000000000..1abbf41f52 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_DOCUMENT_TYPE_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_DOCUMENT_TYPE_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; +import { UMB_SETTINGS_SECTION_ALIAS } from '@umbraco-cms/backoffice/settings'; + +export const manifests: Array = [ + { + name: 'Document Type Global Search', + alias: UMB_DOCUMENT_TYPE_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 600, + meta: { + label: 'Document Types', + searchProviderAlias: UMB_DOCUMENT_TYPE_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_SETTINGS_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/manifests.ts index 1fb211ba30..d84dab491f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/search/manifests.ts @@ -1,5 +1,6 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../entity.js'; import { UMB_DOCUMENT_TYPE_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { @@ -19,4 +20,5 @@ export const manifests: Array = [ element: () => import('./document-type-search-result-item.element.js'), forEntityTypes: [UMB_DOCUMENT_TYPE_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/constants.ts index 13e085c832..149d5cbed3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/constants.ts @@ -1 +1,2 @@ +export * from './global-search/constants.js'; export const UMB_DOCUMENT_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.Document'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/global-search/constants.ts new file mode 100644 index 0000000000..b73b9ab78a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_DOCUMENT_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.Document'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/global-search/manifests.ts new file mode 100644 index 0000000000..e8cea894bb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_DOCUMENT_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_DOCUMENT_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; +import { UMB_CONTENT_SECTION_ALIAS } from '@umbraco-cms/backoffice/content'; + +export const manifests: Array = [ + { + name: 'Document Global Search', + alias: UMB_DOCUMENT_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 800, + meta: { + label: 'Documents', + searchProviderAlias: UMB_DOCUMENT_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_CONTENT_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/manifests.ts index cfd1ce09e8..38ceced019 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/manifests.ts @@ -1,5 +1,6 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import { UMB_DOCUMENT_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { @@ -19,4 +20,5 @@ export const manifests: Array = [ element: () => import('./document-search-result-item.element.js'), forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/constants.ts index 5bc61b44e3..c80e3ac5e4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/constants.ts @@ -5,6 +5,7 @@ export * from './property-type/constants.js'; export * from './repository/constants.js'; export * from './tree/constants.js'; export * from './workspace/constants.js'; +export * from './search/constants.js'; export { UMB_MEDIA_TYPE_ENTITY_TYPE, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/constants.ts new file mode 100644 index 0000000000..8be35fc954 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/constants.ts @@ -0,0 +1,2 @@ +export * from './global-search/constants.js'; +export const UMB_MEDIA_TYPE_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.MediaType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/global-search/constants.ts new file mode 100644 index 0000000000..00075ece97 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_MEDIA_TYPE_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.MediaType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/global-search/manifests.ts new file mode 100644 index 0000000000..f2c89ec4fa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_MEDIA_TYPE_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_MEDIA_TYPE_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; +import { UMB_SETTINGS_SECTION_ALIAS } from '@umbraco-cms/backoffice/settings'; + +export const manifests: Array = [ + { + name: 'Media Type Global Search', + alias: UMB_MEDIA_TYPE_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 500, + meta: { + label: 'Media Types', + searchProviderAlias: UMB_MEDIA_TYPE_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_SETTINGS_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/manifests.ts index 4bf8dcd6d6..655fb27057 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/search/manifests.ts @@ -1,9 +1,11 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../entity.js'; +import { UMB_MEDIA_TYPE_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { name: 'Media Type Search Provider', - alias: 'Umb.SearchProvider.MediaType', + alias: UMB_MEDIA_TYPE_SEARCH_PROVIDER_ALIAS, type: 'searchProvider', api: () => import('./media-type.search-provider.js'), weight: 500, @@ -17,4 +19,5 @@ export const manifests: Array = [ type: 'searchResultItem', forEntityTypes: [UMB_MEDIA_TYPE_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/constants.ts index 9e21ba81da..f4b9948687 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/constants.ts @@ -3,6 +3,7 @@ export * from './entity-actions/constants.js'; export * from './entity-bulk-actions/constants.js'; export * from './menu/constants.js'; export * from './modals/constants.js'; +export * from './paths.js'; export * from './recycle-bin/constants.js'; export * from './reference/constants.js'; export * from './repository/constants.js'; @@ -10,7 +11,6 @@ export * from './search/constants.js'; export * from './tree/constants.js'; export * from './url/constants.js'; export * from './workspace/constants.js'; -export * from './paths.js'; export { UMB_MEDIA_VARIANT_CONTEXT } from './property-dataset-context/media-property-dataset-context.token.js'; export { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/constants.ts index 8a888cf4ac..91822eed55 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/constants.ts @@ -1 +1,2 @@ +export * from './global-search/constants.js'; export const UMB_MEDIA_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.Media'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/global-search/constants.ts new file mode 100644 index 0000000000..82afcc341f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_MEDIA_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.Media'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/global-search/manifests.ts new file mode 100644 index 0000000000..d369ffa960 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_MEDIA_SECTION_ALIAS } from '../../../media-section/constants.js'; +import { UMB_MEDIA_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_MEDIA_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; + +export const manifests: Array = [ + { + name: 'Media Global Search', + alias: UMB_MEDIA_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 700, + meta: { + label: 'Media', + searchProviderAlias: UMB_MEDIA_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_MEDIA_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/manifests.ts index 62d6003c17..5442f9672b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/manifests.ts @@ -1,5 +1,6 @@ import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; import { UMB_MEDIA_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { @@ -19,4 +20,5 @@ export const manifests: Array = [ element: () => import('./media-search-result-item.element.js'), forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/constants.ts index 8e60cb02fa..1d9c55a8f5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/constants.ts @@ -2,6 +2,7 @@ export * from './entity-actions/constants.js'; export * from './paths.js'; export * from './property-type/constants.js'; export * from './repository/constants.js'; +export * from './search/constants.js'; export * from './tree/constants.js'; export * from './workspace/constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/constants.ts new file mode 100644 index 0000000000..3e72d59c99 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/constants.ts @@ -0,0 +1,2 @@ +export * from './global-search/constants.js'; +export const UMB_MEMBER_TYPE_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.MemberType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/global-search/constants.ts new file mode 100644 index 0000000000..4c2ce3c6dd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_MEMBER_TYPE_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.MemberType'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/global-search/manifests.ts new file mode 100644 index 0000000000..b2b58efc73 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_MEMBER_TYPE_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_MEMBER_TYPE_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; +import { UMB_SETTINGS_SECTION_ALIAS } from '@umbraco-cms/backoffice/settings'; + +export const manifests: Array = [ + { + name: 'Member Type Global Search', + alias: UMB_MEMBER_TYPE_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 200, + meta: { + label: 'Member Types', + searchProviderAlias: UMB_MEMBER_TYPE_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_SETTINGS_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/manifests.ts index 4062f3a23b..d7a5302583 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/search/manifests.ts @@ -1,9 +1,11 @@ import { UMB_MEMBER_TYPE_ENTITY_TYPE } from '../entity.js'; +import { UMB_MEMBER_TYPE_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { name: 'Member Type Search Provider', - alias: 'Umb.SearchProvider.MemberType', + alias: UMB_MEMBER_TYPE_SEARCH_PROVIDER_ALIAS, type: 'searchProvider', api: () => import('./member-type.search-provider.js'), weight: 200, @@ -17,4 +19,5 @@ export const manifests: Array = [ type: 'searchResultItem', forEntityTypes: [UMB_MEMBER_TYPE_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/constants.ts index 8cca6e6a79..91ead50980 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/constants.ts @@ -1 +1,2 @@ +export * from './global-search/constants.js'; export const UMB_MEMBER_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.Member'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/global-search/constants.ts new file mode 100644 index 0000000000..845b0f09ff --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_MEMBER_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.Member'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/global-search/manifests.ts new file mode 100644 index 0000000000..6fb2485c10 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_MEMBER_MANAGEMENT_SECTION_ALIAS } from '../../../section/constants.js'; +import { UMB_MEMBER_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_MEMBER_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; + +export const manifests: Array = [ + { + name: 'Member Global Search', + alias: UMB_MEMBER_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 300, + meta: { + label: 'Members', + searchProviderAlias: UMB_MEMBER_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_MEMBER_MANAGEMENT_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/manifests.ts index c285ebf573..2db3199ca6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/manifests.ts @@ -1,5 +1,6 @@ import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; import { UMB_MEMBER_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { @@ -18,4 +19,5 @@ export const manifests: Array = [ type: 'searchResultItem', forEntityTypes: [UMB_MEMBER_ENTITY_TYPE], }, + ...globalSearchManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/search/global-search/global-search.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/search/global-search/global-search.extension.ts new file mode 100644 index 0000000000..5a21f0c108 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/search/global-search/global-search.extension.ts @@ -0,0 +1,20 @@ +import type { UmbGlobalSearchApi } from './types.js'; +import type { ManifestWithDynamicConditions, ManifestApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface ManifestGlobalSearch + extends ManifestApi, + ManifestWithDynamicConditions { + type: 'globalSearch'; + meta: MetaGlobalSearch; +} + +export interface MetaGlobalSearch { + label: string; + searchProviderAlias: string; +} + +declare global { + interface UmbExtensionManifestMap { + umbGlobalSearch: ManifestGlobalSearch; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/search/global-search/types.ts b/src/Umbraco.Web.UI.Client/src/packages/search/global-search/types.ts new file mode 100644 index 0000000000..75be64c8c7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/search/global-search/types.ts @@ -0,0 +1,4 @@ +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface UmbGlobalSearchApi extends UmbApi {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/search/search-modal/search-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/search/search-modal/search-modal.element.ts index 30377229d6..ee478a919b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/search/search-modal/search-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/search/search-modal/search-modal.element.ts @@ -1,5 +1,6 @@ import type { UmbSearchProvider, UmbSearchResultItemModel } from '../types.js'; import type { ManifestSearchResultItem } from '../extensions/types.js'; +import type { UmbGlobalSearchApi } from '../global-search/types.js'; import { css, html, @@ -12,17 +13,18 @@ import { when, } from '@umbraco-cms/backoffice/external/lit'; import { UmbExtensionsManifestInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; -import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; +import { createExtensionApiByAlias, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; import '../search-result/search-result-item.element.js'; -type SearchProvider = { +type GlobalSearchers = { name: string; - api: UmbSearchProvider; + api?: UmbGlobalSearchApi; alias: string; + searchProviderApi: UmbSearchProvider; }; @customElement('umb-search-modal') @@ -42,10 +44,10 @@ export class UmbSearchModalElement extends UmbLitElement { private _searchResults: Array = []; @state() - private _searchProviders: Array = []; + private _globalSearchers: Array = []; @state() - _currentProvider?: SearchProvider; + _currentGlobalSearcher?: GlobalSearchers; @state() _loading: boolean = false; @@ -58,7 +60,7 @@ export class UmbSearchModalElement extends UmbLitElement { constructor() { super(); - this.#observeProviders(); + this.#observeGlobalSearchers(); } override connectedCallback() { @@ -86,25 +88,33 @@ export class UmbSearchModalElement extends UmbLitElement { this.modalContext?.reject(); }; - #observeProviders() { - new UmbExtensionsManifestInitializer(this, umbExtensionsRegistry, 'searchProvider', null, async (providers) => { - const searchProviders: Array = []; + #observeGlobalSearchers() { + new UmbExtensionsManifestInitializer(this, umbExtensionsRegistry, 'globalSearch', null, async (controllers) => { + const globalSearch: Array = []; - for (const provider of providers) { - const api = await createExtensionApi>(this, provider.manifest); - if (api) { - searchProviders.push({ - name: provider.manifest.meta?.label || provider.manifest.name, - api, - alias: provider.alias, - }); + for (const controller of controllers) { + const globalSearchApi = await createExtensionApi(this, controller.manifest); + const searchProviderApi = await createExtensionApiByAlias>( + this, + controller.manifest.meta?.searchProviderAlias, + ); + + const searcher: GlobalSearchers = { + name: controller.manifest.meta?.label || controller.manifest.name, + api: globalSearchApi, + searchProviderApi, + alias: controller.alias, + }; + + if (searchProviderApi) { + globalSearch.push(searcher); } } - this._searchProviders = searchProviders; + this._globalSearchers = globalSearch; - if (this._searchProviders.length > 0) { - this._currentProvider = this._searchProviders[0]; + if (this._globalSearchers.length > 0) { + this._currentGlobalSearcher = this._globalSearchers[0]; } }); } @@ -141,10 +151,10 @@ export class UmbSearchModalElement extends UmbLitElement { } } - #setCurrentProvider(searchProvider: SearchProvider) { - if (this._currentProvider === searchProvider) return; + #setCurrentSearcher(searcher: GlobalSearchers) { + if (this._currentGlobalSearcher === searcher) return; - this._currentProvider = searchProvider; + this._currentGlobalSearcher = searcher; this.#focusInput(); this._loading = true; @@ -153,8 +163,8 @@ export class UmbSearchModalElement extends UmbLitElement { } async #updateSearchResults() { - if (this._search && this._currentProvider?.api) { - const { data } = await this._currentProvider.api.search({ query: this._search }); + if (this._search && this._currentGlobalSearcher?.searchProviderApi) { + const { data } = await this._currentGlobalSearcher.searchProviderApi.search({ query: this._search }); if (!data) return; this._searchResults = data.items; } else { @@ -325,15 +335,15 @@ export class UmbSearchModalElement extends UmbLitElement { return html`
${repeat( - this._searchProviders, - (searchProvider) => searchProvider.alias, - (searchProvider) => html` + this._globalSearchers, + (searcher) => searcher.alias, + (searcher) => html` `, )} diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/constants.ts index 68cbb2af11..9879ba5d2c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/constants.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/constants.ts @@ -1,3 +1,4 @@ export * from './conditions/constants.js'; export * from './repository/constants.js'; +export * from './search/constants.js'; export * from './workspace/constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/constants.ts new file mode 100644 index 0000000000..c5e079eeb6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/constants.ts @@ -0,0 +1,2 @@ +export * from './global-search/constants.js'; +export const UMB_TEMPLATE_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.Template'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/global-search/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/global-search/constants.ts new file mode 100644 index 0000000000..ae6e9246a4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/global-search/constants.ts @@ -0,0 +1 @@ +export const UMB_TEMPLATE_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.Template'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/global-search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/global-search/manifests.ts new file mode 100644 index 0000000000..f3152b4827 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/global-search/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_TEMPLATE_SEARCH_PROVIDER_ALIAS } from '../constants.js'; +import { UMB_TEMPLATE_GLOBAL_SEARCH_ALIAS } from './constants.js'; +import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section'; +import { UMB_SETTINGS_SECTION_ALIAS } from '@umbraco-cms/backoffice/settings'; + +export const manifests: Array = [ + { + name: 'Template Global Search', + alias: UMB_TEMPLATE_GLOBAL_SEARCH_ALIAS, + type: 'globalSearch', + weight: 200, + meta: { + label: 'Templates', + searchProviderAlias: UMB_TEMPLATE_SEARCH_PROVIDER_ALIAS, + }, + conditions: [ + { + alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS, + match: UMB_SETTINGS_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/manifests.ts index e0acfec7c4..d37a36718f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/search/manifests.ts @@ -1,9 +1,11 @@ import { UMB_TEMPLATE_ENTITY_TYPE } from '../entity.js'; +import { UMB_TEMPLATE_SEARCH_PROVIDER_ALIAS } from './constants.js'; +import { manifests as globalSearchManifests } from './global-search/manifests.js'; export const manifests: Array = [ { name: 'Template Search Provider', - alias: 'Umb.SearchProvider.Template', + alias: UMB_TEMPLATE_SEARCH_PROVIDER_ALIAS, type: 'searchProvider', api: () => import('./template.search-provider.js'), weight: 100, @@ -17,4 +19,5 @@ export const manifests: Array = [ type: 'searchResultItem', forEntityTypes: [UMB_TEMPLATE_ENTITY_TYPE], }, + ...globalSearchManifests, ];