diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 9147e5302e..b6ef567796 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -78,7 +78,7 @@ "typedoc": "^0.25.10", "typescript": "^5.3.3", "typescript-json-schema": "^0.63.0", - "vite": "^5.1.1", + "vite": "^5.1.7", "vite-plugin-static-copy": "^1.0.1", "vite-tsconfig-paths": "^4.3.1", "web-component-analyzer": "^2.0.0" @@ -20259,9 +20259,9 @@ } }, "node_modules/vite": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.2.tgz", - "integrity": "sha512-uwiFebQbTWRIGbCaTEBVAfKqgqKNKMJ2uPXsXeLIZxM8MVMjoS3j0cG8NrPxdDIadaWnPSjrkLWffLSC+uiP3Q==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", + "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", "dev": true, "dependencies": { "esbuild": "^0.19.3", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index ce6aa21b9a..a14941064b 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -233,7 +233,7 @@ "typedoc": "^0.25.10", "typescript": "^5.3.3", "typescript-json-schema": "^0.63.0", - "vite": "^5.1.1", + "vite": "^5.1.7", "vite-plugin-static-copy": "^1.0.1", "vite-tsconfig-paths": "^4.3.1", "web-component-analyzer": "^2.0.0" diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts index bf7e75361f..17644bc775 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts @@ -1,7 +1,7 @@ import { manifests as workspaceViewManifests } from './views/manifests.js'; import { UMB_BLOCK_GRID_AREA_TYPE_WORKSPACE_ALIAS } from './index.js'; import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const manifests: Array = [ ...workspaceViewManifests, @@ -19,7 +19,7 @@ export const manifests: Array = [ type: 'workspaceAction', alias: 'Umb.WorkspaceAction.BlockGridAreaType.Save', name: 'Save Block Grid Area Type Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Submit', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/manifests.ts index 94b8d27803..0df0592053 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/manifests.ts @@ -1,7 +1,7 @@ import { UMB_BLOCK_GRID_TYPE_WORKSPACE_ALIAS } from '../../block-grid/workspace/index.js'; import { UMB_BLOCK_LIST_TYPE_WORKSPACE_ALIAS } from '../../block-list/workspace/index.js'; import { UMB_BLOCK_RTE_TYPE_WORKSPACE_ALIAS } from '../../block-rte/workspace/index.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaceActions } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ @@ -10,7 +10,7 @@ export const manifests: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.BlockType.Save', name: 'Save Block Type Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Submit', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts index 35eebf989b..bc76264f4d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts @@ -1,5 +1,5 @@ import { UMB_BLOCK_WORKSPACE_ALIAS } from './index.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ @@ -8,7 +8,7 @@ export const manifests: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.Block.Save', name: 'Save Block Type Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Submit', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-entity/input-entity.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-entity/input-entity.element.ts index 192bfd17ed..e99a924bea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-entity/input-entity.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-entity/input-entity.element.ts @@ -101,7 +101,7 @@ export class UmbInputEntityElement extends FormControlMixin(UmbLitElement) { this.observe( this.#pickerContext.selection, - (selection) => (super.value = selection?.join(',') ?? ''), + (selection) => (this.value = selection?.join(',') ?? ''), 'observeSelection', ); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/manifests.ts index b792878165..234ced8c91 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/manifests.ts @@ -1,3 +1,4 @@ -import { manifest as sortKindManifest } from './sort-children-of.action.kind.js'; +import { manifest as kindManifest } from './sort-children-of.action.kind.js'; +import { manifests as modalManifests } from './modal/manifests.js'; -export const manifests = [sortKindManifest]; +export const manifests = [kindManifest, ...modalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/constants.ts new file mode 100644 index 0000000000..b54e13bb05 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/constants.ts @@ -0,0 +1 @@ +export const UMB_SORT_CHILDREN_OF_MODAL_ALIAS = 'Umb.Modal.SortChildrenOf'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/index.ts new file mode 100644 index 0000000000..f434e8e619 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/index.ts @@ -0,0 +1,2 @@ +export * from './constants.js'; +export * from './sort-children-of-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/manifests.ts new file mode 100644 index 0000000000..7a2dbb915a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_SORT_CHILDREN_OF_MODAL_ALIAS } from './constants.js'; +import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'modal', + alias: UMB_SORT_CHILDREN_OF_MODAL_ALIAS, + name: 'Sort Children Of Modal', + js: () => import('./sort-children-of-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.element.ts new file mode 100644 index 0000000000..57623eaa70 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.element.ts @@ -0,0 +1,198 @@ +import type { UmbSortChildrenOfModalData, UmbSortChildrenOfModalValue } from './sort-children-of-modal.token.js'; +import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, css, state, repeat, nothing } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbTreeRepository, UmbUniqueTreeItemModel } from '@umbraco-cms/backoffice/tree'; +import { UmbPaginationManager } from '@umbraco-cms/backoffice/utils'; +import { observeMultiple } from '@umbraco-cms/backoffice/observable-api'; + +const elementName = 'umb-sort-children-of-modal'; + +@customElement(elementName) +export class UmbSortChildrenOfModalElement extends UmbModalBaseElement< + UmbSortChildrenOfModalData, + UmbSortChildrenOfModalValue +> { + @state() + _children: Array = []; + + @state() + _currentPage = 1; + + @state() + _totalPages = 1; + + #pagination = new UmbPaginationManager(); + #sortedUniques = new Set(); + #sorter?: UmbSorterController; + + constructor() { + super(); + this.#pagination.setPageSize(50); + + this.observe( + observeMultiple([this.#pagination.currentPage, this.#pagination.totalPages]), + ([currentPage, totalPages]) => { + this._currentPage = currentPage; + this._totalPages = totalPages; + }, + 'umbPaginationObserver', + ); + } + + protected async firstUpdated(_changedProperties: PropertyValueMap | Map): Promise { + super.firstUpdated(_changedProperties); + this.#requestChildren(); + } + + async #requestChildren() { + if (!this.data?.unique === undefined) throw new Error('unique is required'); + if (!this.data?.treeRepositoryAlias) throw new Error('treeRepositoryAlias is required'); + + const treeRepository = await createExtensionApiByAlias>( + this, + this.data.treeRepositoryAlias, + ); + + const { data } = await treeRepository.requestTreeItemsOf({ + parentUnique: this.data.unique, + skip: this.#pagination.getSkip(), + take: this.#pagination.getPageSize(), + }); + + if (data) { + this._children = [...this._children, ...data.items]; + this.#pagination.setTotalItems(data.total); + + if (data.total > 0) { + this.#initSorter(); + this.#sorter?.setModel(this._children); + } + } + } + + #initSorter() { + if (this.#sorter) return; + + this.#sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => { + return element.dataset.unique; + }, + getUniqueOfModel: (modelEntry) => { + return modelEntry.unique; + }, + identifier: 'Umb.SorterIdentifier.SortChildrenOfModal', + itemSelector: 'uui-ref-node', + containerSelector: 'uui-ref-list', + onChange: ({ model }) => { + const oldValue = this._children; + this._children = model; + this.requestUpdate('_children', oldValue); + }, + onEnd: ({ item }) => { + this.#sortedUniques.add(item.unique); + }, + }); + } + + #onLoadMore(event: PointerEvent) { + event.stopPropagation(); + if (this._currentPage >= this._totalPages) return; + this.#pagination.setCurrentPageNumber(this._currentPage + 1); + this.#requestChildren(); + } + + async #onSubmit(event: PointerEvent) { + event?.stopPropagation(); + if (!this.data?.sortChildrenOfRepositoryAlias) throw new Error('sortChildrenOfRepositoryAlias is required'); + + const sortChildrenOfRepository = await createExtensionApiByAlias( + this, + this.data.sortChildrenOfRepositoryAlias, + ); + + const { error } = await sortChildrenOfRepository.sortChildrenOf({ + unique: this.data.unique, + sorting: this.#getSortOrderOfSortedItems(), + }); + + if (!error) { + this._submitModal(); + } + } + + #getSortOrderOfSortedItems() { + const sorting = []; + + // get the new sort order from the sorted uniques + for (const value of this.#sortedUniques) { + const index = this._children.findIndex((child) => child.unique === value); + if (index !== -1) { + const entry = { + unique: value, + sortOrder: index, + }; + + sorting.push(entry); + } + } + + return sorting; + } + + render() { + return html` + + ${this.#renderChildren()} + + + + `; + } + + #renderChildren() { + if (this._children.length === 0) return html`There are no children`; + + return html` + + ${repeat( + this._children, + (child) => child.unique, + (child) => this.#renderChild(child), + )} + + + ${this._currentPage < this._totalPages + ? html` + Load More (${this._currentPage}/${this._totalPages}) + ` + : nothing} + `; + } + + #renderChild(item: UmbUniqueTreeItemModel) { + return html``; + } + + static styles = [ + UmbTextStyles, + css` + #loadMoreButton { + width: 100%; + } + `, + ]; +} + +export { UmbSortChildrenOfModalElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbSortChildrenOfModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.token.ts new file mode 100644 index 0000000000..b23cb24834 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.token.ts @@ -0,0 +1,21 @@ +import { UMB_SORT_CHILDREN_OF_MODAL_ALIAS } from './constants.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbSortChildrenOfModalData { + unique: string | null; + entityType: string; + treeRepositoryAlias: string; + sortChildrenOfRepositoryAlias: string; +} + +export interface UmbSortChildrenOfModalValue {} + +export const UMB_SORT_CHILDREN_OF_MODAL = new UmbModalToken( + UMB_SORT_CHILDREN_OF_MODAL_ALIAS, + { + modal: { + type: 'sidebar', + size: 'small', + }, + }, +); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.kind.ts index ff9e06647f..42dab12acb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.kind.ts @@ -3,22 +3,21 @@ import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extensio export const manifest: UmbBackofficeManifestKind = { type: 'kind', - alias: 'Umb.Kind.EntityAction.Sort', - matchKind: 'sort', + alias: 'Umb.Kind.EntityAction.SortChildrenOf', + matchKind: 'sortChildrenOf', matchType: 'entityAction', manifest: { ...UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST.manifest, type: 'entityAction', - kind: 'sort', + kind: 'sortChildrenOf', api: () => import('./sort-children-of.action.js'), weight: 100, forEntityTypes: [], meta: { icon: 'icon-height', - label: 'Sort (TBD)...', + label: 'Sort Children...', itemRepositoryAlias: '', - moveRepositoryAlias: '', - pickerModal: '', + sortRepositoryAlias: '', }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.ts index d67149e519..06e4da6146 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/sort-children-of.action.ts @@ -1,13 +1,32 @@ import { UmbEntityActionBase } from '../../entity-action-base.js'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; - -export class UmbSortChildrenOfEntityAction extends UmbEntityActionBase { - constructor(host: UmbControllerHost, args: any) { - super(host, args); - } +import { UMB_SORT_CHILDREN_OF_MODAL } from './modal/index.js'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { MetaEntityActionSortChildrenOfKind } from '@umbraco-cms/backoffice/extension-registry'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; +export class UmbSortChildrenOfEntityAction extends UmbEntityActionBase { async execute() { - console.log(`execute sort for: ${this.args.unique}`); + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modal = modalManager.open(this._host, UMB_SORT_CHILDREN_OF_MODAL, { + data: { + unique: this.args.unique, + entityType: this.args.entityType, + sortChildrenOfRepositoryAlias: this.args.meta.sortChildrenOfRepositoryAlias, + treeRepositoryAlias: this.args.meta.treeRepositoryAlias, + }, + }); + + await modal.onSubmit(); + + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + + eventContext.dispatchEvent( + new UmbRequestReloadTreeItemChildrenEvent({ + unique: this.args.unique, + entityType: this.args.entityType, + }), + ); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts index 3be5173679..c0b7805c07 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts @@ -156,3 +156,15 @@ export interface ManifestEntityActionDeleteFolderKind extends ManifestEntityActi export interface MetaEntityActionFolderKind extends MetaEntityActionDefaultKind { folderRepositoryAlias: string; } + +// SORT CHILDREN OF +export interface ManifestEntityActionSortChildrenOfKind + extends ManifestEntityAction { + type: 'entityAction'; + kind: 'sortChildrenOf'; +} + +export interface MetaEntityActionSortChildrenOfKind extends MetaEntityActionDefaultKind { + sortChildrenOfRepositoryAlias: string; + treeRepositoryAlias: string; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts index 2517521319..1c9e270269 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts @@ -17,6 +17,7 @@ import type { ManifestEntityActionTrashKind, ManifestEntityActionRestoreFromRecycleBinKind, ManifestEntityActionEmptyRecycleBinKind, + ManifestEntityActionSortChildrenOfKind, } from './entity-action.model.js'; import type { ManifestDynamicRootOrigin, ManifestDynamicRootQueryStep } from './dynamic-root.model.js'; import type { ManifestEntityBulkAction } from './entity-bulk-action.model.js'; @@ -117,6 +118,7 @@ export type ManifestEntityActions = | ManifestEntityActionReloadTreeItemChildrenKind | ManifestEntityActionRenameServerFileKind | ManifestEntityActionRestoreFromRecycleBinKind + | ManifestEntityActionSortChildrenOfKind | ManifestEntityActionTrashKind | ManifestEntityActionUpdateFolderKind; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts index 98bf9e6e89..c55e88dd19 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts @@ -1,4 +1,4 @@ -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '../reload-tree-item-children/index.js'; +import { UmbRequestReloadTreeItemChildrenEvent } from '../reload-tree-item-children/index.js'; import type { UmbTreeItemModelBase } from '../types.js'; import type { UmbTreeRepository } from '../data/tree-repository.interface.js'; import type { UmbTreeContext } from '../tree-context.interface.js'; @@ -144,11 +144,11 @@ export class UmbDefaultTreeContext this.consumeContext(UMB_ACTION_EVENT_CONTEXT, (instance) => { this.#actionEventContext = instance; this.#actionEventContext.removeEventListener( - UmbReloadTreeItemChildrenRequestEntityActionEvent.TYPE, + UmbRequestReloadTreeItemChildrenEvent.TYPE, this.#onReloadRequest as EventListener, ); this.#actionEventContext.addEventListener( - UmbReloadTreeItemChildrenRequestEntityActionEvent.TYPE, + UmbRequestReloadTreeItemChildrenEvent.TYPE, this.#onReloadRequest as EventListener, ); }); @@ -188,7 +188,7 @@ export class UmbDefaultTreeContext destroy(): void { this.#actionEventContext?.removeEventListener( - UmbReloadTreeItemChildrenRequestEntityActionEvent.TYPE, + UmbRequestReloadTreeItemChildrenEvent.TYPE, this.#onReloadRequest as EventListener, ); super.destroy(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.ts index a17235798b..aa785f0841 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.ts @@ -2,10 +2,7 @@ import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import type { MetaEntityActionFolderKind } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; -import { - UMB_FOLDER_CREATE_MODAL, - UmbReloadTreeItemChildrenRequestEntityActionEvent, -} from '@umbraco-cms/backoffice/tree'; +import { UMB_FOLDER_CREATE_MODAL, UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; export class UmbCreateFolderEntityAction extends UmbEntityActionBase { async execute() { @@ -23,7 +20,7 @@ export class UmbCreateFolderEntityAction extends UmbEntityActionBase { this.#actionEventContext?.removeEventListener( - UmbReloadTreeItemChildrenRequestEntityActionEvent.TYPE, + UmbRequestReloadTreeItemChildrenEvent.TYPE, this.#onReloadRequest as EventListener, ); @@ -223,7 +223,7 @@ export abstract class UmbTreeItemContextBase { + const blob = new Blob([data], { type: mimeType }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + a.style.display = 'none'; + document.body.appendChild(a); + a.dispatchEvent(new MouseEvent('click')); + a.remove(); + window.URL.revokeObjectURL(url); +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts index 0fc65a99ab..3782c9eb05 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts @@ -14,3 +14,4 @@ export * from './type/diff.type.js'; export * from './string/to-camel-case/to-camel-case.function.js'; export * from './string/from-camel-case.function.js'; export * from './debounce/debounce.function.js'; +export * from './download/blob-download.function.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/index.ts index b21a44dbd5..744c315e61 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/index.ts @@ -1 +1 @@ -export * from './save/index.js'; +export * from './submit/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/save/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/save/index.ts deleted file mode 100644 index 068cf4b8c1..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/save/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './save.action.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/index.ts new file mode 100644 index 0000000000..22e8c2d675 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/index.ts @@ -0,0 +1 @@ +export * from './submit.action.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/save/save.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts similarity index 83% rename from src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/save/save.action.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts index 04f6484e58..3801e4c0f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/save/save.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts @@ -3,7 +3,7 @@ import { UmbWorkspaceActionBase } from '../../workspace-action-base.controller.j import { UMB_SUBMITTABLE_WORKSPACE_CONTEXT, type UmbWorkspaceActionArgs } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -export class UmbSaveWorkspaceAction extends UmbWorkspaceActionBase { +export class UmbSubmitWorkspaceAction extends UmbWorkspaceActionBase { #workspaceContext?: UmbSubmittableWorkspaceContext; constructor(host: UmbControllerHost, args: UmbWorkspaceActionArgs) { @@ -36,3 +36,9 @@ export class UmbSaveWorkspaceAction extends UmbWorkspaceActionBase = [ kind: 'default', alias: 'Umb.WorkspaceAction.DataType.Save', name: 'Save Data Type Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/export/export.action.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/export/export.action.ts index 6b86ba4d9f..5d08404040 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/export/export.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/export/export.action.ts @@ -1,5 +1,6 @@ import { UmbDictionaryExportRepository } from '../../repository/index.js'; import { UMB_EXPORT_DICTIONARY_MODAL } from './export-dictionary-modal.token.js'; +import { blobDownload } from '@umbraco-cms/backoffice/utils'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; @@ -14,23 +15,11 @@ export class UmbExportDictionaryEntityAction extends UmbEntityActionBase // Export the file const repository = new UmbDictionaryExportRepository(this); - const result = await repository.requestExport(this.args.unique, includeChildren); - const blobContent = await result?.data; + const { data } = await repository.requestExport(this.args.unique, includeChildren); - if (!blobContent) return; - const blob = new Blob([blobContent], { type: 'text/plain' }); - const a = document.createElement('a'); - const url = window.URL.createObjectURL(blob); + if (!data) return; - // Download - a.href = url; - a.download = `${this.args.unique}.udt`; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - - // Clean up - window.URL.revokeObjectURL(url); + blobDownload(data, `${this.args.unique}.udt`, 'text/xml'); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/dictionary-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/dictionary-workspace.context.ts index bfebdf5b42..49f0146474 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/dictionary-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/dictionary-workspace.context.ts @@ -10,7 +10,7 @@ import { } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; @@ -137,7 +137,7 @@ export class UmbDictionaryWorkspaceContext // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts index a778105a03..e889ec34da 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DICTIONARY_ENTITY_TYPE } from '../entity.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -45,7 +45,7 @@ const workspaceActions: Array = [ alias: 'Umb.WorkspaceAction.Dictionary.Save', name: 'Save Dictionary Workspace Action', weight: 90, - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts index ae484e3ed6..3c1db98d02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts @@ -18,7 +18,7 @@ import type { import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; type EntityType = UmbDocumentTypeDetailModel; @@ -229,7 +229,7 @@ export class UmbDocumentTypeWorkspaceContext if ((await this.structure.create(parent.unique)) === true) { // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts index d53ddd1a34..7aa4387ada 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS } from '../repository/composition/index.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspace, ManifestWorkspaceActions, @@ -100,7 +100,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.DocumentType.Save', name: 'Save Document Type Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts index 24085f0259..0570228f3e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts @@ -1,2 +1,3 @@ export * from './public-access/index.js'; export * from './culture-and-hostnames/index.js'; +export * from './sort-children-of/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts index a2f1beea81..3b6ce632a4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts @@ -4,6 +4,7 @@ import { UMB_DOCUMENT_PICKER_MODAL } from '../modals/index.js'; import { manifests as createManifests } from './create/manifests.js'; import { manifests as publicAccessManifests } from './public-access/manifests.js'; import { manifests as cultureAndHostnamesManifests } from './culture-and-hostnames/manifests.js'; +import { manifests as sortChildrenOfManifests } from './sort-children-of/manifests.js'; import type { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry'; const entityActions: Array = [ @@ -57,15 +58,6 @@ const entityActions: Array = [ pickerModal: UMB_DOCUMENT_PICKER_MODAL, }, }, - { - type: 'entityAction', - kind: 'sort', - alias: 'Umb.EntityAction.Document.Sort', - name: 'Sort Document Entity Action', - weight: 700, - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - meta: {}, - }, { type: 'entityAction', kind: 'default', @@ -124,5 +116,6 @@ export const manifests = [ ...createManifests, ...publicAccessManifests, ...cultureAndHostnamesManifests, + ...sortChildrenOfManifests, ...entityActions, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/index.ts new file mode 100644 index 0000000000..8276e983e9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/index.ts @@ -0,0 +1,6 @@ +export { + UmbSortChildrenOfDocumentRepository, + UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS, +} from './repository/index.js'; + +export type { UmbSortChildrenOfArgs } from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts new file mode 100644 index 0000000000..e38ec7363f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts @@ -0,0 +1,22 @@ +import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../../entity.js'; +import { UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS } from '../../repository/index.js'; +import { UMB_DOCUMENT_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; +import { UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS } from './repository/constants.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + ...repositoryManifests, + { + type: 'entityAction', + kind: 'sortChildrenOf', + alias: 'Umb.EntityAction.Document.SortChildrenOf', + name: 'Sort Children Of Document Entity Action', + forEntityTypes: [UMB_DOCUMENT_ROOT_ENTITY_TYPE, UMB_DOCUMENT_ENTITY_TYPE], + meta: { + itemRepositoryAlias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, + sortChildrenOfRepositoryAlias: UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS, + treeRepositoryAlias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, + }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/constants.ts new file mode 100644 index 0000000000..cc0716dc9a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document.SortChildrenOf'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/index.ts new file mode 100644 index 0000000000..ce7a0f56a4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/index.ts @@ -0,0 +1,3 @@ +export { UmbSortChildrenOfDocumentRepository } from './sort-children-of.repository.js'; +export { UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; +export type { UmbSortChildrenOfArgs } from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts new file mode 100644 index 0000000000..0e17f4f6df --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +const repository: ManifestRepository = { + type: 'repository', + alias: UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS, + name: 'Sort Children Of Document Repository', + api: () => import('./sort-children-of.repository.js'), +}; + +export const manifests = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/sort-children-of.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/sort-children-of.repository.ts new file mode 100644 index 0000000000..b6469aac92 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/sort-children-of.repository.ts @@ -0,0 +1,39 @@ +import { UmbSortChildrenOfDocumentServerDataSource } from './sort-children-of.server.data.js'; +import type { UmbSortChildrenOfArgs } from './types.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbNotificationContext } from '@umbraco-cms/backoffice/notification'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export class UmbSortChildrenOfDocumentRepository extends UmbControllerBase implements UmbApi { + #dataSource: UmbSortChildrenOfDocumentServerDataSource; + + #notificationContext?: UmbNotificationContext; + + constructor(host: UmbControllerHost) { + super(host); + + this.#dataSource = new UmbSortChildrenOfDocumentServerDataSource(this); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => { + this.#notificationContext = instance; + }); + } + + async sortChildrenOf(args: UmbSortChildrenOfArgs) { + if (args.unique === undefined) throw new Error('Unique is missing'); + if (!args.sorting) throw new Error('Sorting details are missing'); + + const { error } = await this.#dataSource.sortChildrenOf(args); + + if (!error) { + const notification = { data: { message: `Items sorted` } }; + this.#notificationContext?.peek('positive', notification); + } + + return { error }; + } +} + +export { UmbSortChildrenOfDocumentRepository as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/sort-children-of.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/sort-children-of.server.data.ts new file mode 100644 index 0000000000..e958faa93d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/sort-children-of.server.data.ts @@ -0,0 +1,44 @@ +import type { UmbSortChildrenOfArgs } from './types.js'; +import { DocumentResource } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A server data source for sorting children of a Document + * @export + * @class UmbSortChildrenOfDocumentServerDataSource + * @implements {RepositoryDetailDataSource} + */ +export class UmbSortChildrenOfDocumentServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbSortChildrenOfDocumentServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbSortChildrenOfDocumentServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Creates the Public Access for the given Document unique + * @param {UmbSortChildrenOfArgs} args + * @memberof UmbSortChildrenOfDocumentServerDataSource + */ + async sortChildrenOf(args: UmbSortChildrenOfArgs) { + if (args.unique === undefined) throw new Error('unique is missing'); + + const sortingMapping = args.sorting.map((item) => ({ id: item.unique, sortOrder: item.sortOrder })); + + return tryExecuteAndNotify( + this.#host, + DocumentResource.putDocumentSort({ + requestBody: { + parent: args.unique ? { id: args.unique } : null, + sorting: sortingMapping, + }, + }), + ); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/types.ts new file mode 100644 index 0000000000..7934391f3f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/types.ts @@ -0,0 +1,4 @@ +export interface UmbSortChildrenOfArgs { + unique: string | null; + sorting: Array<{ unique: string; sortOrder: number }>; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index 7af7031b70..927acdbecb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -43,7 +43,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbLanguageCollectionRepository, type UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language'; import { type Observable, firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; @@ -504,7 +504,7 @@ export class UmbDocumentWorkspaceContext // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts index 58ae5cbe44..a46f146d5c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts @@ -3,7 +3,7 @@ import { UmbDocumentSaveAndScheduleWorkspaceAction } from './actions/save-and-sc import { UmbDocumentUnpublishWorkspaceAction } from './actions/unpublish.action.js'; import { UmbDocumentSaveAndPublishWorkspaceAction } from './actions/save-and-publish.action.js'; import { UmbDocumentPublishWithDescendantsWorkspaceAction } from './actions/publish-with-descendants.action.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -109,7 +109,7 @@ const workspaceActions: Array = [ alias: 'Umb.WorkspaceAction.Document.Save', name: 'Save Document Workspace Action', weight: 80, - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'secondary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts index e18de036b6..96711c9deb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts @@ -1,4 +1,4 @@ -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -43,7 +43,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.Language.Save', name: 'Save Language Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { look: 'primary', color: 'positive', diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts index 1f160a83a5..9826f39746 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts @@ -4,7 +4,7 @@ import type { ManifestWorkspaceViews, } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const UMB_MEDIA_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.MediaType'; @@ -63,7 +63,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.MediaType.Save', name: 'Save Media Type Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts index 4bff855c04..2c968a573a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts @@ -18,7 +18,7 @@ import type { import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; type EntityType = UmbMediaTypeDetailModel; @@ -208,7 +208,7 @@ export class UmbMediaTypeWorkspaceContext if ((await this.structure.create(parent.unique)) === true) { if (!parent) throw new Error('Parent is not set'); const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts index fd3ba9acee..bd158e586e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts @@ -1,4 +1,4 @@ -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -81,7 +81,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.Media.Save', name: 'Save Media Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts index 76d1db5dcd..dd46256fb6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts @@ -25,7 +25,7 @@ import { import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbLanguageCollectionRepository, type UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import type { UmbMediaTypeDetailModel } from '@umbraco-cms/backoffice/media-type'; @@ -385,7 +385,7 @@ export class UmbMediaWorkspaceContext // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts index c4b75d4ca5..f17abf1cf3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts @@ -1,5 +1,5 @@ import { UMB_MEMBER_GROUP_ENTITY_TYPE } from '../entity.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -25,7 +25,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.MemberGroup.Save', name: 'Save Member Group Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts index 64191c02f8..336c403747 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts @@ -3,7 +3,7 @@ import type { ManifestWorkspaceActions, ManifestWorkspaceView, } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const UMB_MEMBER_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.MemberType'; @@ -44,7 +44,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.MemberType.Save', name: 'Save Member Type Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts index 17d10b9f62..39a3d12d39 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts @@ -15,7 +15,7 @@ import { type UmbContentTypeWorkspaceContext, } from '@umbraco-cms/backoffice/content-type'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; @@ -181,7 +181,7 @@ export class UmbMemberTypeWorkspaceContext // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts index d5f2035cda..9198c2ef10 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts @@ -1,5 +1,5 @@ import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -25,7 +25,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.Member.Save', name: 'Save Member Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/workspace/workspace-package-builder.element.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/workspace/workspace-package-builder.element.ts index b5fbb46501..2039464360 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/workspace/workspace-package-builder.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/workspace/workspace-package-builder.element.ts @@ -13,6 +13,7 @@ import { ifDefined, } from '@umbraco-cms/backoffice/external/lit'; // TODO: update to module imports when ready +import { blobDownload } from '@umbraco-cms/backoffice/utils'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { PackageDefinitionResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; import { PackageResource } from '@umbraco-cms/backoffice/external/backend-api'; @@ -57,7 +58,17 @@ export class UmbWorkspacePackageBuilderElement extends UmbLitElement { async #download() { if (!this._package?.id) return; - await tryExecuteAndNotify(this, PackageResource.getPackageCreatedByIdDownload({ id: this._package.id })); + const { data } = await tryExecuteAndNotify( + this, + PackageResource.getPackageCreatedByIdDownload({ id: this._package.id }), + ); + + if (!data) return; + + // TODO: [LK] Need to review what the server is doing, as different data is returned depending on schema configuration. + // e.g. selecting Media items will return a ZIP file, otherwise it's an XML file. It should be consistent. + //blobDownload(data, 'package.xml', 'text/xml'); + blobDownload(data, 'package.zip', 'application/zip'); } #nameDefined() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts index 433349499d..734cd8e35d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts @@ -1,4 +1,4 @@ -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_WORKSPACE_ALIAS = 'Umb.Workspace.PartialView'; @@ -20,7 +20,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.PartialView.Save', name: 'Save Partial View', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts index 9777c49326..df336252cb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts @@ -14,7 +14,7 @@ import { loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; import { PartialViewResource } from '@umbraco-cms/backoffice/external/backend-api'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import type { IRoutingInfo, PageComponent } from '@umbraco-cms/backoffice/router'; @@ -169,7 +169,7 @@ export class UmbPartialViewWorkspaceContext // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts index cb29ced563..a5ac33c6db 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts @@ -1,5 +1,5 @@ import { UMB_SCRIPT_ENTITY_TYPE } from '../entity.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_WORKSPACE_ALIAS = 'Umb.Workspace.Script'; @@ -22,7 +22,7 @@ const workspaceActions: Array = [ kind: 'default', alias: UMB_SAVE_SCRIPT_WORKSPACE_ACTION_ALIAS, name: 'Save Script Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/script-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/script-workspace.context.ts index bd1a588688..caaa8ec72f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/script-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/script-workspace.context.ts @@ -14,7 +14,7 @@ import { } from '@umbraco-cms/backoffice/workspace'; import { loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import type { IRoutingInfo, PageComponent } from '@umbraco-cms/backoffice/router'; @@ -150,7 +150,7 @@ export class UmbScriptWorkspaceContext // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts index ebada289ad..ffdb1016de 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts @@ -3,7 +3,7 @@ import type { ManifestWorkspaceActions, ManifestWorkspaceView, } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const UMB_STYLESHEET_WORKSPACE_ALIAS = 'Umb.Workspace.Stylesheet'; @@ -62,7 +62,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.Stylesheet.Save', name: 'Save Stylesheet Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts index 4f05f6615a..27e8e46d37 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts @@ -14,7 +14,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbBooleanState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import type { IRoutingInfo, PageComponent } from '@umbraco-cms/backoffice/router'; @@ -149,7 +149,7 @@ export class UmbStylesheetWorkspaceContext // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts index e1d9e0bbcf..13a5f9b71b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts @@ -1,4 +1,4 @@ -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -26,7 +26,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.Template.Save', name: 'Save Template', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, weight: 70, meta: { look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace.context.ts index 584bff3397..6440037dde 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/template-workspace.context.ts @@ -13,7 +13,7 @@ import { import { UmbBooleanState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; +import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import type { IRoutingInfo, PageComponent } from '@umbraco-cms/backoffice/router'; @@ -199,7 +199,7 @@ ${currentContent}`; // TODO: this might not be the right place to alert the tree, but it works for now const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbReloadTreeItemChildrenRequestEntityActionEvent({ + const event = new UmbRequestReloadTreeItemChildrenEvent({ entityType: parent.entityType, unique: parent.unique, }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts index a401ed5329..9a24209b37 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts @@ -3,7 +3,7 @@ import type { ManifestWorkspaceActions, ManifestWorkspaceView, } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; const workspace: ManifestWorkspaces = { type: 'workspace', @@ -23,7 +23,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.UserGroup.Save', name: 'Save User Group Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts index e52e99f86e..f54a0593a2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts @@ -1,5 +1,5 @@ import { UMB_USER_ENTITY_TYPE } from '../entity.js'; -import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaces, ManifestWorkspaceActions, @@ -26,7 +26,7 @@ const workspaceActions: Array = [ kind: 'default', alias: 'Umb.WorkspaceAction.User.Save', name: 'Save User Workspace Action', - api: UmbSaveWorkspaceAction, + api: UmbSubmitWorkspaceAction, meta: { label: 'Save', look: 'primary',