diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts index a6468f4f6c..a212371ec1 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts @@ -820,6 +820,7 @@ export default { logout: 'Logout', macro: 'Macro', mandatory: 'Mandatory', + manifest: 'Manifest', media: 'Media', message: 'Message', move: 'Move', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts index f1b6833566..95c5df5eee 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts @@ -831,6 +831,7 @@ export default { logout: 'Logout', macro: 'Macro', mandatory: 'Mandatory', + manifest: 'Manifest', message: 'Message', move: 'Move', name: 'Name', diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts index 4fe1db856c..b41533ef53 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts @@ -1,10 +1,15 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { html, customElement, state, property, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; -import { umbExtensionsRegistry, type ManifestBlockEditorCustomView } from '@umbraco-cms/backoffice/extension-registry'; +import { + UMB_MANIFEST_VIEWER_MODAL, + umbExtensionsRegistry, + type ManifestBlockEditorCustomView, +} from '@umbraco-cms/backoffice/extension-registry'; import { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils'; import { UmbExtensionsManifestInitializer } from '@umbraco-cms/backoffice/extension-api'; import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; @customElement('umb-block-type-custom-view-guide') export class UmbBlockTypeCustomViewGuideElement extends UmbLitElement { @@ -77,13 +82,20 @@ export class UmbBlockTypeCustomViewGuideElement extends UmbLitElement { return true; }; + async #viewManifest(manifest: ManifestBlockEditorCustomView) { + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + modalManager.open(this, UMB_MANIFEST_VIEWER_MODAL, { data: manifest }); + } + override render() { return this._manifests && this._manifests.length > 0 ? html`
${repeat( this._manifests, (x) => x.alias, - (x) => html` `, + (x) => html` + this.#viewManifest(x)} .manifest=${x}> + `, )}
` : html`No custom view matches the current block editor type and content type.`; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/composition-picker/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/composition-picker/index.ts index 653c14e841..9a964efe55 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/composition-picker/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/composition-picker/index.ts @@ -1,2 +1 @@ -export * from './composition-picker-modal.element.js'; export * from './composition-picker-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/composition-picker/manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/composition-picker/manifest.ts new file mode 100644 index 0000000000..e743da34a9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/composition-picker/manifest.ts @@ -0,0 +1,8 @@ +import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: ManifestModal = { + type: 'modal', + alias: 'Umb.Modal.CompositionPicker', + name: 'ContentType Composition Picker Modal', + element: () => import('./composition-picker-modal.element.js'), +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts index 516bbb553f..a0372901b3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts @@ -1,12 +1,3 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest } from './composition-picker/manifest.js'; -const modals: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.CompositionPicker', - name: 'ContentType Composition Picker Modal', - element: () => import('./composition-picker/composition-picker-modal.element.js'), - }, -]; - -export const manifests = modals; +export const manifests = [manifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/index.ts index 017d4122e2..4987fe24c9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/index.ts @@ -1,5 +1,6 @@ export * from './conditions/index.js'; export * from './initializers/index.js'; +export * from './modals/manifest-viewer/index.js'; export * from './registry.js'; export * from './utils/index.js'; export type * from './interfaces/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts index dd1a2d6e84..7025355d5b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts @@ -3,6 +3,7 @@ import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; +import { manifest as modalManifest } from './modals/manifest-viewer/manifest.js'; import type { ManifestTypes } from './models/index.js'; export const manifests: Array = [ @@ -11,4 +12,5 @@ export const manifests: Array = [ ...workspaceManifests, ...collectionManifests, ...entityActionManifests, + modalManifest, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/index.ts new file mode 100644 index 0000000000..89988a329e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/index.ts @@ -0,0 +1,2 @@ +export * from './manifest-viewer-modal.token.js'; +export * from './manifest.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest-viewer-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest-viewer-modal.element.ts new file mode 100644 index 0000000000..47100de84a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest-viewer-modal.element.ts @@ -0,0 +1,35 @@ +import type { UmbManifestViewerModalData, UmbManifestViewerModalValue } from './manifest-viewer-modal.token.js'; +import { css, html, customElement, nothing } from '@umbraco-cms/backoffice/external/lit'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; + +@customElement('umb-manifest-viewer-modal') +export class UmbManifestViewerModalElement extends UmbModalBaseElement< + UmbManifestViewerModalData, + UmbManifestViewerModalValue +> { + override render() { + console.log('data', this.data); + return html` + + ${this.data + ? html`${JSON.stringify(this.data, null, 2)}` + : nothing} +
+ +
+
+ `; + } + + static override styles = [css``]; +} + +export default UmbManifestViewerModalElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-manifest-viewer-modal': UmbManifestViewerModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest-viewer-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest-viewer-modal.token.ts new file mode 100644 index 0000000000..96fb68b015 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest-viewer-modal.token.ts @@ -0,0 +1,16 @@ +import type { ManifestBase } from '@umbraco-cms/backoffice/extension-api'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbManifestViewerModalData extends ManifestBase {} + +export type UmbManifestViewerModalValue = undefined; + +export const UMB_MANIFEST_VIEWER_MODAL = new UmbModalToken( + 'Umb.Modal.ManifestViewer', + { + modal: { + type: 'sidebar', + size: 'medium', + }, + }, +); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest.ts new file mode 100644 index 0000000000..db4ef7f807 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/modals/manifest-viewer/manifest.ts @@ -0,0 +1,8 @@ +import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: ManifestModal = { + type: 'modal', + alias: 'Umb.Modal.ManifestViewer', + name: 'Manifest Viewer Modal', + element: () => import('./manifest-viewer-modal.element.js'), +};