From 480d00d5c3a7f72c6ce4c1b99e6242c045f291b6 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:13:54 +0200 Subject: [PATCH 1/5] import export of media types --- .../entity-actions/export/manifests.ts | 20 +++ .../export/media-type-export.action.ts | 18 ++ .../export/repository/constants.ts | 1 + .../entity-actions/export/repository/index.ts | 2 + .../export/repository/manifests.ts | 11 ++ .../media-type-export.repository.ts | 21 +++ .../media-type-export.server.data-source.ts | 33 ++++ .../entity-actions/import/manifests.ts | 21 +++ .../import/media-type-import.action.ts | 15 ++ .../entity-actions/import/modal/index.ts | 1 + .../entity-actions/import/modal/manifests.ts | 10 ++ .../modal/media-type-import-modal.element.ts | 170 ++++++++++++++++++ .../modal/media-type-import-modal.token.ts | 17 ++ .../import/repository/constants.ts | 1 + .../entity-actions/import/repository/index.ts | 2 + .../import/repository/manifests.ts | 11 ++ .../media-type-import.repository.ts | 21 +++ .../media-type-import.server.data-source.ts | 37 ++++ .../media-types/entity-actions/manifests.ts | 4 + 19 files changed, 416 insertions(+) create mode 100644 src/packages/media/media-types/entity-actions/export/manifests.ts create mode 100644 src/packages/media/media-types/entity-actions/export/media-type-export.action.ts create mode 100644 src/packages/media/media-types/entity-actions/export/repository/constants.ts create mode 100644 src/packages/media/media-types/entity-actions/export/repository/index.ts create mode 100644 src/packages/media/media-types/entity-actions/export/repository/manifests.ts create mode 100644 src/packages/media/media-types/entity-actions/export/repository/media-type-export.repository.ts create mode 100644 src/packages/media/media-types/entity-actions/export/repository/media-type-export.server.data-source.ts create mode 100644 src/packages/media/media-types/entity-actions/import/manifests.ts create mode 100644 src/packages/media/media-types/entity-actions/import/media-type-import.action.ts create mode 100644 src/packages/media/media-types/entity-actions/import/modal/index.ts create mode 100644 src/packages/media/media-types/entity-actions/import/modal/manifests.ts create mode 100644 src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts create mode 100644 src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.token.ts create mode 100644 src/packages/media/media-types/entity-actions/import/repository/constants.ts create mode 100644 src/packages/media/media-types/entity-actions/import/repository/index.ts create mode 100644 src/packages/media/media-types/entity-actions/import/repository/manifests.ts create mode 100644 src/packages/media/media-types/entity-actions/import/repository/media-type-import.repository.ts create mode 100644 src/packages/media/media-types/entity-actions/import/repository/media-type-import.server.data-source.ts diff --git a/src/packages/media/media-types/entity-actions/export/manifests.ts b/src/packages/media/media-types/entity-actions/export/manifests.ts new file mode 100644 index 0000000000..a879adb201 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/export/manifests.ts @@ -0,0 +1,20 @@ +import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../../entity.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.MediaType.Export', + name: 'Export Media Type Entity Action', + forEntityTypes: [UMB_MEDIA_TYPE_ENTITY_TYPE], + api: () => import('./media-type-export.action.js'), + meta: { + icon: 'icon-download-alt', + label: '#actions_export', + }, + }, +]; + +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/media/media-types/entity-actions/export/media-type-export.action.ts b/src/packages/media/media-types/entity-actions/export/media-type-export.action.ts new file mode 100644 index 0000000000..b61d2c2a54 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/export/media-type-export.action.ts @@ -0,0 +1,18 @@ +import { UmbExportMediaTypeRepository } from './repository/index.js'; +import { blobDownload } from '@umbraco-cms/backoffice/utils'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; + +export class UmbExportMediaTypeEntityAction extends UmbEntityActionBase { + #repository = new UmbExportMediaTypeRepository(this); + + override async execute() { + if (!this.args.unique) throw new Error('Unique is not available'); + + const data = await this.#repository.requestExport(this.args.unique); + if (!data) return; + + blobDownload(data, `${this.args.unique}.udt`, 'text/xml'); + } +} + +export default UmbExportMediaTypeEntityAction; diff --git a/src/packages/media/media-types/entity-actions/export/repository/constants.ts b/src/packages/media/media-types/entity-actions/export/repository/constants.ts new file mode 100644 index 0000000000..e248f4801e --- /dev/null +++ b/src/packages/media/media-types/entity-actions/export/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_EXPORT_MEDIA_TYPE_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Export'; diff --git a/src/packages/media/media-types/entity-actions/export/repository/index.ts b/src/packages/media/media-types/entity-actions/export/repository/index.ts new file mode 100644 index 0000000000..19252269f8 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/export/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbExportMediaTypeRepository } from './media-type-export.repository.js'; +export { UMB_EXPORT_MEDIA_TYPE_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/packages/media/media-types/entity-actions/export/repository/manifests.ts b/src/packages/media/media-types/entity-actions/export/repository/manifests.ts new file mode 100644 index 0000000000..e2b0c96286 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/export/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_EXPORT_MEDIA_TYPE_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const exportRepository: ManifestRepository = { + type: 'repository', + alias: UMB_EXPORT_MEDIA_TYPE_REPOSITORY_ALIAS, + name: 'Export Media Type Repository', + api: () => import('./media-type-export.repository.js'), +}; + +export const manifests: Array = [exportRepository]; diff --git a/src/packages/media/media-types/entity-actions/export/repository/media-type-export.repository.ts b/src/packages/media/media-types/entity-actions/export/repository/media-type-export.repository.ts new file mode 100644 index 0000000000..8f8c65dbdf --- /dev/null +++ b/src/packages/media/media-types/entity-actions/export/repository/media-type-export.repository.ts @@ -0,0 +1,21 @@ +import { UmbExportMediaTypeServerDataSource } from './media-type-export.server.data-source.js'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbExportMediaTypeRepository extends UmbRepositoryBase { + #exportSource = new UmbExportMediaTypeServerDataSource(this); + + async requestExport(unique: string) { + const { data, error } = await this.#exportSource.export(unique); + + if (!error) { + const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); + const notification = { data: { message: `Exported` } }; + notificationContext.peek('positive', notification); + } + + return { data, error }; + } +} + +export { UmbExportMediaTypeRepository as api }; diff --git a/src/packages/media/media-types/entity-actions/export/repository/media-type-export.server.data-source.ts b/src/packages/media/media-types/entity-actions/export/repository/media-type-export.server.data-source.ts new file mode 100644 index 0000000000..7a23bc2fe4 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/export/repository/media-type-export.server.data-source.ts @@ -0,0 +1,33 @@ +import { MediaTypeService } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * Export Media Server Data Source + * @export + * @class UmbExportMediaTypeServerDataSource + */ +export class UmbExportMediaTypeServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbExportMediaTypeServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbExportMediaTypeServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Export an item for the given id to the destination unique + * @param {unique} unique + * @returns {*} + * @memberof UmbExportMediaTypeServerDataSource + */ + async export(unique: string) { + if (!unique) throw new Error('Unique is missing'); + + return tryExecuteAndNotify(this.#host, MediaTypeService.getMediaTypeByIdExport({ id: unique })); + } +} diff --git a/src/packages/media/media-types/entity-actions/import/manifests.ts b/src/packages/media/media-types/entity-actions/import/manifests.ts new file mode 100644 index 0000000000..ccf24cd365 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/manifests.ts @@ -0,0 +1,21 @@ +import { UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE } from '../../entity.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { manifests as modalManifests } from './modal/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.MediaType.Import', + name: 'Export Media Type Entity Action', + forEntityTypes: [UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE], + api: () => import('./media-type-import.action.js'), + meta: { + icon: 'icon-page-up', + label: '#actions_import', + }, + }, +]; + +export const manifests: Array = [...entityActions, ...repositoryManifests, ...modalManifests]; diff --git a/src/packages/media/media-types/entity-actions/import/media-type-import.action.ts b/src/packages/media/media-types/entity-actions/import/media-type-import.action.ts new file mode 100644 index 0000000000..31a026a9f6 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/media-type-import.action.ts @@ -0,0 +1,15 @@ +import { UMB_MEDIA_TYPE_IMPORT_MODAL } from './modal/media-type-import-modal.token.js'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; + +export class UmbImportMediaTypeEntityAction extends UmbEntityActionBase { + override async execute() { + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modalContext = modalManager.open(this, UMB_MEDIA_TYPE_IMPORT_MODAL, { + data: { unique: this.args.unique }, + }); + await modalContext.onSubmit().catch(() => {}); + } +} + +export default UmbImportMediaTypeEntityAction; diff --git a/src/packages/media/media-types/entity-actions/import/modal/index.ts b/src/packages/media/media-types/entity-actions/import/modal/index.ts new file mode 100644 index 0000000000..7d34d24e30 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/modal/index.ts @@ -0,0 +1 @@ +export * from './media-type-import-modal.token.js'; diff --git a/src/packages/media/media-types/entity-actions/import/modal/manifests.ts b/src/packages/media/media-types/entity-actions/import/modal/manifests.ts new file mode 100644 index 0000000000..71d2eebc8f --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/modal/manifests.ts @@ -0,0 +1,10 @@ +import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.MediaType.Import', + name: 'Media Type Import Modal', + element: () => import('./media-type-import-modal.element.js'), + }, +]; diff --git a/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts b/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts new file mode 100644 index 0000000000..55029ffdb5 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts @@ -0,0 +1,170 @@ +import { UmbMediaTypeImportRepository } from '../repository/media-type-import.repository.js'; +import type { UmbMediaTypeImportModalData, UmbMediaTypeImportModalValue } from './media-type-import-modal.token.js'; +import { css, html, customElement, query, state, when } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import type { UmbDropzoneElement } from '@umbraco-cms/backoffice/media'; + +interface UmbMediaTypePreview { + unique: string; + name: string; + alias: string; + icon: string; +} + +@customElement('umb-media-type-import-modal') +export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement< + UmbMediaTypeImportModalData, + UmbMediaTypeImportModalValue +> { + #MediaTypeImportRepository = new UmbMediaTypeImportRepository(this); + #temporaryUnique?: string; + #fileReader; + + @state() + private _fileContent: Array = []; + + @query('#dropzone') + private dropzone?: UmbDropzoneElement; + + constructor() { + super(); + this.#fileReader = new FileReader(); + this.#fileReader.onload = (e) => { + if (typeof e.target?.result === 'string') { + const fileContent = e.target.result; + this.#MediaTypePreviewBuilder(fileContent); + } else { + this.#requestReset(); + } + }; + } + + #onFileDropped() { + const data = this.dropzone?.getFiles()[0]; + if (!data) return; + + this.#temporaryUnique = data.temporaryUnique; + this.#fileReader.readAsText(data.file); + } + + async #onFileImport() { + if (!this.#temporaryUnique) return; + const { error } = await this.#MediaTypeImportRepository.requestImport(this.#temporaryUnique); + if (error) return; + this._submitModal(); + } + + #MediaTypePreviewBuilder(htmlString: string) { + const parser = new DOMParser(); + const doc = parser.parseFromString(htmlString, 'text/xml'); + const childNodes = doc.childNodes; + + const elements: Array = []; + + childNodes.forEach((node) => { + if (node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'MediaType') { + elements.push(node as Element); + } + }); + + this._fileContent = this.#MediaTypePreviewItemBuilder(elements); + } + + #MediaTypePreviewItemBuilder(elements: Array) { + const mediaTypes: Array = []; + elements.forEach((MediaType) => { + const info = MediaType.getElementsByTagName('Info')[0]; + const unique = info.getElementsByTagName('Key')[0].textContent ?? ''; + const name = info.getElementsByTagName('Name')[0].textContent ?? ''; + const alias = info.getElementsByTagName('Alias')[0].textContent ?? ''; + const icon = info.getElementsByTagName('Icon')[0].textContent ?? ''; + + mediaTypes.push({ unique, name, alias, icon }); + }); + return mediaTypes; + } + + #requestReset() { + this._fileContent = []; + this.#temporaryUnique = undefined; + } + + async #onBrowse() { + this.dropzone?.browse(); + } + + override render() { + return html` + ${this.#renderUploadZone()} + + + `; + } + + #renderUploadZone() { + return html` + ${when( + this._fileContent.length, + () => + html` + + + `, + () => + /**TODO Add localizations */ + html`
+ Drag and drop your file here + + +
`, + )} + `; + } + + static override styles = [ + UmbTextStyles, + css` + #wrapper { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + position: relative; + gap: var(--uui-size-space-3); + border: 2px dashed var(--uui-color-divider-standalone); + background-color: var(--uui-color-surface-alt); + padding: var(--uui-size-space-6); + } + + #import { + margin-top: var(--uui-size-space-6); + } + `, + ]; +} + +export default UmbMediaTypeImportModalLayout; + +declare global { + interface HTMLElementTagNameMap { + 'umb-media-type-import-modal': UmbMediaTypeImportModalLayout; + } +} diff --git a/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.token.ts b/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.token.ts new file mode 100644 index 0000000000..2b76b49a79 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.token.ts @@ -0,0 +1,17 @@ +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbMediaTypeImportModalData { + unique: string | null; +} + +export interface UmbMediaTypeImportModalValue {} + +export const UMB_MEDIA_TYPE_IMPORT_MODAL = new UmbModalToken( + 'Umb.Modal.MediaType.Import', + { + modal: { + type: 'sidebar', + size: 'small', + }, + }, +); diff --git a/src/packages/media/media-types/entity-actions/import/repository/constants.ts b/src/packages/media/media-types/entity-actions/import/repository/constants.ts new file mode 100644 index 0000000000..0da908eb12 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Import'; diff --git a/src/packages/media/media-types/entity-actions/import/repository/index.ts b/src/packages/media/media-types/entity-actions/import/repository/index.ts new file mode 100644 index 0000000000..02457fbbef --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbDocumentTypeImportRepository } from './media-type-import.repository.js'; +export { UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/packages/media/media-types/entity-actions/import/repository/manifests.ts b/src/packages/media/media-types/entity-actions/import/repository/manifests.ts new file mode 100644 index 0000000000..f69fc4b453 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const importRepository: ManifestRepository = { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS, + name: 'Import Document Type Repository', + api: () => import('./media-type-import.repository.js'), +}; + +export const manifests: Array = [importRepository]; diff --git a/src/packages/media/media-types/entity-actions/import/repository/media-type-import.repository.ts b/src/packages/media/media-types/entity-actions/import/repository/media-type-import.repository.ts new file mode 100644 index 0000000000..1f13bbe4f5 --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/repository/media-type-import.repository.ts @@ -0,0 +1,21 @@ +import { UmbMediaTypeImportServerDataSource } from './media-type-import.server.data-source.js'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbMediaTypeImportRepository extends UmbRepositoryBase { + #importSource = new UmbMediaTypeImportServerDataSource(this); + + async requestImport(temporaryUnique: string) { + const { data, error } = await this.#importSource.import(temporaryUnique); + + if (!error) { + const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); + const notification = { data: { message: `Imported` } }; + notificationContext.peek('positive', notification); + } + + return { data, error }; + } +} + +export { UmbMediaTypeImportRepository as api }; diff --git a/src/packages/media/media-types/entity-actions/import/repository/media-type-import.server.data-source.ts b/src/packages/media/media-types/entity-actions/import/repository/media-type-import.server.data-source.ts new file mode 100644 index 0000000000..c71e44051d --- /dev/null +++ b/src/packages/media/media-types/entity-actions/import/repository/media-type-import.server.data-source.ts @@ -0,0 +1,37 @@ +import { MediaTypeService, type PostMediaTypeImportData } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * Media Type Import Server Data Source + * @Import + * @class UmbMediaTypeImportServerDataSource + */ +export class UmbMediaTypeImportServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbMediaTypeImportServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbMediaTypeImportServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Import an item for the given id to the destination unique + * @param {temporaryUnique} temporaryUnique + * @returns {*} + * @memberof UmbMediaTypeImportServerDataSource + */ + async import(temporaryUnique: string) { + if (!temporaryUnique) throw new Error('Unique is missing'); + + const requestBody: PostMediaTypeImportData = { + requestBody: { file: { id: temporaryUnique } }, + }; + + return tryExecuteAndNotify(this.#host, MediaTypeService.postMediaTypeImport(requestBody)); + } +} diff --git a/src/packages/media/media-types/entity-actions/manifests.ts b/src/packages/media/media-types/entity-actions/manifests.ts index 2b726ae1a8..8304c96731 100644 --- a/src/packages/media/media-types/entity-actions/manifests.ts +++ b/src/packages/media/media-types/entity-actions/manifests.ts @@ -3,6 +3,8 @@ import { UMB_MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS, UMB_MEDIA_TYPE_ITEM_REPOSITORY_ import { manifests as createManifests } from './create/manifests.js'; import { manifests as moveManifests } from './move-to/manifests.js'; import { manifests as duplicateManifests } from './duplicate/manifests.js'; +import { manifests as exportManifests } from './export/manifests.js'; +import { manifests as importManifests } from './import/manifests.js'; import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const entityActions: Array = [ @@ -24,4 +26,6 @@ export const manifests: Array = [ ...createManifests, ...moveManifests, ...duplicateManifests, + ...exportManifests, + ...importManifests, ]; From 535dc4608208cf6052d970656c17e07cc84af725 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:25:22 +0200 Subject: [PATCH 2/5] naming --- .../entity-actions/import/repository/constants.ts | 2 +- .../media-types/entity-actions/import/repository/index.ts | 4 ++-- .../entity-actions/import/repository/manifests.ts | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/packages/media/media-types/entity-actions/import/repository/constants.ts b/src/packages/media/media-types/entity-actions/import/repository/constants.ts index 0da908eb12..a990f6ea73 100644 --- a/src/packages/media/media-types/entity-actions/import/repository/constants.ts +++ b/src/packages/media/media-types/entity-actions/import/repository/constants.ts @@ -1 +1 @@ -export const UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Import'; +export const UMB_MEDIA_TYPE_IMPORT_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Import'; diff --git a/src/packages/media/media-types/entity-actions/import/repository/index.ts b/src/packages/media/media-types/entity-actions/import/repository/index.ts index 02457fbbef..0fe6ef6e20 100644 --- a/src/packages/media/media-types/entity-actions/import/repository/index.ts +++ b/src/packages/media/media-types/entity-actions/import/repository/index.ts @@ -1,2 +1,2 @@ -export { UmbDocumentTypeImportRepository } from './media-type-import.repository.js'; -export { UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; +export { UmbMediaTypeImportRepository } from './media-type-import.repository.js'; +export { UMB_MEDIA_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/packages/media/media-types/entity-actions/import/repository/manifests.ts b/src/packages/media/media-types/entity-actions/import/repository/manifests.ts index f69fc4b453..d1dd143c9c 100644 --- a/src/packages/media/media-types/entity-actions/import/repository/manifests.ts +++ b/src/packages/media/media-types/entity-actions/import/repository/manifests.ts @@ -1,10 +1,10 @@ -import { UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; +import { UMB_MEDIA_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const importRepository: ManifestRepository = { type: 'repository', - alias: UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS, - name: 'Import Document Type Repository', + alias: UMB_MEDIA_TYPE_IMPORT_REPOSITORY_ALIAS, + name: 'Import Media Type Repository', api: () => import('./media-type-import.repository.js'), }; From d465fd27b3e63eb0a3d3f13597a30c9cdd5acff5 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:19:28 +0200 Subject: [PATCH 3/5] fix object object bug --- .../entity-actions/export/media-type-export.action.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packages/media/media-types/entity-actions/export/media-type-export.action.ts b/src/packages/media/media-types/entity-actions/export/media-type-export.action.ts index b61d2c2a54..b6f7b4e539 100644 --- a/src/packages/media/media-types/entity-actions/export/media-type-export.action.ts +++ b/src/packages/media/media-types/entity-actions/export/media-type-export.action.ts @@ -8,7 +8,7 @@ export class UmbExportMediaTypeEntityAction extends UmbEntityActionBase override async execute() { if (!this.args.unique) throw new Error('Unique is not available'); - const data = await this.#repository.requestExport(this.args.unique); + const { data } = await this.#repository.requestExport(this.args.unique); if (!data) return; blobDownload(data, `${this.args.unique}.udt`, 'text/xml'); From 7aa755ed34cdf91574c9c3c861ac5862437fc354 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 19 Aug 2024 11:44:44 +0200 Subject: [PATCH 4/5] use ref-node as media type ref doesn't exist --- .../import/modal/media-type-import-modal.element.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts b/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts index 55029ffdb5..76e40e994f 100644 --- a/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts +++ b/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts @@ -117,17 +117,13 @@ export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement< ${when( this._fileContent.length, () => - html` + html` - `, + `, () => /**TODO Add localizations */ html`
From 30416ae8538a247bebb4513b1cebcf30df718113 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 19 Aug 2024 12:00:00 +0200 Subject: [PATCH 5/5] reload children of entity after import --- .../entity-actions/import/media-type-import.action.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/packages/media/media-types/entity-actions/import/media-type-import.action.ts b/src/packages/media/media-types/entity-actions/import/media-type-import.action.ts index 31a026a9f6..ee1eaa956c 100644 --- a/src/packages/media/media-types/entity-actions/import/media-type-import.action.ts +++ b/src/packages/media/media-types/entity-actions/import/media-type-import.action.ts @@ -1,5 +1,6 @@ import { UMB_MEDIA_TYPE_IMPORT_MODAL } from './modal/media-type-import-modal.token.js'; -import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UmbEntityActionBase, UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; export class UmbImportMediaTypeEntityAction extends UmbEntityActionBase { @@ -9,6 +10,14 @@ export class UmbImportMediaTypeEntityAction extends UmbEntityActionBase data: { unique: this.args.unique }, }); await modalContext.onSubmit().catch(() => {}); + + const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadChildrenOfEntityEvent({ + unique: this.args.unique, + entityType: this.args.entityType, + }); + + actionEventContext.dispatchEvent(event); } }