diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/document-configuration.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/document-configuration.context.ts new file mode 100644 index 0000000000..a5644b0cfc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/document-configuration.context.ts @@ -0,0 +1,46 @@ +import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; +import { + DocumentResource, + type DocumentConfigurationResponseModel, +} from '@umbraco-cms/backoffice/external/backend-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A context for fetching and caching the document configuration. + */ +export class UmbDocumentConfigurationContext extends UmbControllerBase implements UmbApi { + static DocumentConfiguration: Promise; + + constructor(host: UmbControllerHost) { + super(host); + this.provideContext(UMB_DOCUMENT_CONFIGURATION_CONTEXT, this); + } + + /** + * Get the document configuration from the server, or return the cached configuration if it has already been fetched. + * @returns A promise that resolves to the document configuration, or null if the configuration could not be fetched. + */ + getDocumentConfiguration(): Promise { + debugger; + return (UmbDocumentConfigurationContext.DocumentConfiguration ??= this.fetchDocumentConfiguration()); + } + + /** + * Fetch the document configuration from the server. + * @returns A promise that resolves to the document configuration, or null if the configuration could not be fetched. + */ + async fetchDocumentConfiguration() { + const { data } = await tryExecuteAndNotify(this, DocumentResource.getDocumentConfiguration()); + + return data ?? null; + } +} + +export default UmbDocumentConfigurationContext; + +export const UMB_DOCUMENT_CONFIGURATION_CONTEXT = new UmbContextToken( + 'UmbDocumentConfigurationContext', +); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/index.ts new file mode 100644 index 0000000000..ab0e481f7b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/index.ts @@ -0,0 +1 @@ +export * from './document-configuration.context.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/manifests.ts new file mode 100644 index 0000000000..5d8128c423 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/global-contexts/manifests.ts @@ -0,0 +1,10 @@ +import type { ManifestGlobalContext } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'globalContext', + alias: 'Umb.GlobalContext.DocumentConfiguration', + name: 'Document Configuration Context', + js: () => import('./document-configuration.context.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts index 172e587a12..bc89935e82 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts @@ -9,6 +9,7 @@ export * from './components/index.js'; export * from './entity.js'; export * from './entity-actions/index.js'; export * from './modals/index.js'; +export * from './global-contexts/index.js'; export * from './tree/index.js'; export { UMB_CONTENT_MENU_ALIAS } from './menu.manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts index 52b65d695d..795d22178f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts @@ -11,6 +11,7 @@ import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as userPermissionManifests } from './user-permissions/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import { manifests as globalContextManifests } from './global-contexts/manifests.js'; export const manifests = [ ...breadcrumbManifests, @@ -26,4 +27,5 @@ export const manifests = [ ...treeManifests, ...userPermissionManifests, ...workspaceManifests, + ...globalContextManifests, ];