From 081ea7a931613232c2ac8d4ed56735dd8639a74b Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 27 Mar 2024 11:33:26 +0100 Subject: [PATCH] move types to relations package and make documents use it --- ...ocument-tracked-reference-table.element.ts | 37 +++------ ...t-workspace-view-info-reference.element.ts | 80 ++++++++++++++----- .../media-tracked-reference.repository.ts | 22 ++--- .../media-tracked-reference.server.data.ts | 26 ++---- .../src/packages/relations/relations/index.ts | 3 +- .../src/packages/relations/relations/types.ts | 10 +++ .../src/packages/relations/relations/utils.ts | 18 +++++ 7 files changed, 117 insertions(+), 79 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/relations/relations/utils.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/components/document-tracked-reference-table.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/components/document-tracked-reference-table.element.ts index e98d7645e2..1651194bcb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/components/document-tracked-reference-table.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/components/document-tracked-reference-table.element.ts @@ -1,14 +1,13 @@ import { UmbDocumentTrackedReferenceRepository } from '../repository/index.js'; -import type { - DefaultReferenceResponseModel, - DocumentReferenceResponseModel, - MediaReferenceResponseModel, -} from '@umbraco-cms/backoffice/external/backend-api'; import { css, customElement, html, nothing, property, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; - -type UmbReferenceModel = DefaultReferenceResponseModel | DocumentReferenceResponseModel | MediaReferenceResponseModel; +import { + type UmbReferenceModel, + isDocumentReference, + isMediaReference, + isDefaultReference, +} from '@umbraco-cms/backoffice/relations'; @customElement('umb-document-tracked-reference-table') export class UmbDocumentTrackedReferenceTableElement extends UmbLitElement { @@ -58,39 +57,27 @@ export class UmbDocumentTrackedReferenceTableElement extends UmbLitElement { return html` ${this.#renderErrorMessage()} ${this.#renderTable()} `; } - #isDocumentReference(item: UmbReferenceModel): item is DocumentReferenceResponseModel { - return typeof (item as DocumentReferenceResponseModel).documentType !== 'undefined'; - } - - #isMediaReference(item: UmbReferenceModel): item is MediaReferenceResponseModel { - return typeof (item as MediaReferenceResponseModel).mediaType !== 'undefined'; - } - - #isDefaultReference(item: UmbReferenceModel): item is DefaultReferenceResponseModel { - return typeof (item as DefaultReferenceResponseModel).type !== 'undefined'; - } - #getIcon(item: UmbReferenceModel) { - if (this.#isDocumentReference(item)) { + if (isDocumentReference(item)) { return item.documentType.icon ?? 'icon-document'; } - if (this.#isMediaReference(item)) { + if (isMediaReference(item)) { return item.mediaType.icon ?? 'icon-media'; } - if (this.#isDefaultReference(item)) { + if (isDefaultReference(item)) { return item.icon ?? 'icon-document'; } return 'icon-document'; } #getContentTypeName(item: UmbReferenceModel) { - if (this.#isDocumentReference(item)) { + if (isDocumentReference(item)) { return item.documentType.name; } - if (this.#isMediaReference(item)) { + if (isMediaReference(item)) { return item.mediaType.name; } - if (this.#isDefaultReference(item)) { + if (isDefaultReference(item)) { return item.type; } return ''; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts index fde110c12f..d6c7940996 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts @@ -1,10 +1,15 @@ +import { UmbDocumentTrackedReferenceRepository } from '../../../tracked-reference/index.js'; import { css, html, customElement, state, nothing, repeat, property } from '@umbraco-cms/backoffice/external/lit'; import type { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { RelationItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; -import { UmbDocumentTrackedReferenceRepository } from '@umbraco-cms/backoffice/document'; import { UMB_WORKSPACE_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; +import { + isDefaultReference, + isDocumentReference, + isMediaReference, + type UmbReferenceModel, +} from '@umbraco-cms/backoffice/relations'; @customElement('umb-document-workspace-view-info-reference') export class UmbDocumentWorkspaceViewInfoReferenceElement extends UmbLitElement { @@ -24,7 +29,7 @@ export class UmbDocumentWorkspaceViewInfoReferenceElement extends UmbLitElement private _total = 0; @state() - private _items?: Array = []; + private _items?: Array = []; constructor() { super(); @@ -63,6 +68,49 @@ export class UmbDocumentWorkspaceViewInfoReferenceElement extends UmbLitElement this.#getReferences(); } + #getIcon(item: UmbReferenceModel) { + if (isDocumentReference(item)) { + return item.documentType.icon ?? 'icon-document'; + } + if (isMediaReference(item)) { + return item.mediaType.icon ?? 'icon-media'; + } + if (isDefaultReference(item)) { + return item.icon ?? 'icon-document'; + } + return 'icon-document'; + } + + #getPublishedStatus(item: UmbReferenceModel) { + return isDocumentReference(item) ? item.published : true; + } + + #getContentTypeName(item: UmbReferenceModel) { + if (isDocumentReference(item)) { + return item.documentType.name; + } + if (isMediaReference(item)) { + return item.mediaType.name; + } + if (isDefaultReference(item)) { + return item.type; + } + return ''; + } + + #getContentType(item: UmbReferenceModel) { + if (isDocumentReference(item)) { + return item.documentType.alias; + } + if (isMediaReference(item)) { + return item.mediaType.alias; + } + if (isDefaultReference(item)) { + return item.type; + } + return ''; + } + render() { if (this._items && this._items.length > 0) { return html` Status Type Name Type - - Relation - ${repeat( this._items, - (item) => item.nodeId, + (item) => item.id, (item) => html` - + - - ${item.nodeName} - + ${isDocumentReference(item) + ? html` + ${item.name} + ` + : item.name} - ${item.nodePublished + ${this.#getPublishedStatus(item) ? this.localize.term('content_published') : this.localize.term('content_unpublished')} - ${item.contentTypeName} - ${item.nodeType} - ${item.relationTypeName} + ${this.#getContentTypeName(item)} + ${this.#getContentType(item)} `, )} @@ -126,10 +172,6 @@ export class UmbDocumentWorkspaceViewInfoReferenceElement extends UmbLitElement static styles = [ UmbTextStyles, css` - .link-cell { - font-weight: bold; - } - uui-table-cell:not(.link-cell) { color: var(--uui-color-text-alt); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.repository.ts index fc56304143..a3ecca4356 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.repository.ts @@ -10,29 +10,19 @@ export class UmbMediaTrackedReferenceRepository extends UmbControllerBase { this.#trackedReferenceSource = new UmbMediaTrackedReferenceServerDataSource(this); } - async requestTrackedReference(unique: string, skip = 0, take = 20, filterMustBeIsDependency = false) { + async requestTrackedReference(unique: string, skip = 0, take = 20) { if (!unique) throw new Error(`unique is required`); - return this.#trackedReferenceSource.getTrackedReferenceById(unique, skip, take, filterMustBeIsDependency); + return this.#trackedReferenceSource.getTrackedReferenceById(unique, skip, take); } - async requestTrackedReferenceDescendantsFromParentUnique( - parentUnique: string, - skip = 0, - take = 20, - filterMustBeIsDependency = false, - ) { + async requestTrackedReferenceDescendantsFromParentUnique(parentUnique: string, skip = 0, take = 20) { if (!parentUnique) throw new Error(`unique is required`); - return this.#trackedReferenceSource.getTrackedReferenceDescendantsByParentId( - parentUnique, - skip, - take, - filterMustBeIsDependency, - ); + return this.#trackedReferenceSource.getTrackedReferenceDescendantsByParentId(parentUnique, skip, take); } - async requestTrackedReferenceItems(uniques: string[], skip = 0, take = 20, filterMustBeIsDependency = true) { + async requestTrackedReferenceItems(uniques: string[], skip = 0, take = 20) { if (!uniques) throw new Error(`unique is required`); - return this.#trackedReferenceSource.getTrackedReferenceItem(uniques, skip, take, filterMustBeIsDependency); + return this.#trackedReferenceSource.getTrackedReferenceItem(uniques, skip, take); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.server.data.ts index 1031abc22d..072f2d6581 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tracked-reference/repository/media-tracked-reference.server.data.ts @@ -1,5 +1,5 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { TrackedReferenceResource } from '@umbraco-cms/backoffice/external/backend-api'; +import { MediaResource } from '@umbraco-cms/backoffice/external/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; /** @@ -25,11 +25,8 @@ export class UmbMediaTrackedReferenceServerDataSource { * @return {*} * @memberof UmbDataTypeItemServerDataSource */ - async getTrackedReferenceById(id: string, skip = 0, take = 20, filterMustBeIsDependency = false) { - return await tryExecuteAndNotify( - this.#host, - TrackedReferenceResource.getTrackedReferenceById({ id, skip, take, filterMustBeIsDependency }), - ); + async getTrackedReferenceById(id: string, skip = 0, take = 20) { + return await tryExecuteAndNotify(this.#host, MediaResource.getMediaByIdReferencedBy({ id, skip, take })); } /** @@ -38,19 +35,13 @@ export class UmbMediaTrackedReferenceServerDataSource { * @return {*} * @memberof UmbMediaTrackedReferenceServerDataSource */ - async getTrackedReferenceDescendantsByParentId( - parentId: string, - skip = 0, - take = 20, - filterMustBeIsDependency = false, - ) { + async getTrackedReferenceDescendantsByParentId(parentId: string, skip = 0, take = 20) { return await tryExecuteAndNotify( this.#host, - TrackedReferenceResource.getTrackedReferenceDescendantsByParentId({ - parentId, + MediaResource.getMediaByIdReferencedDescendants({ + id: parentId, skip, take, - filterMustBeIsDependency, }), ); } @@ -61,14 +52,13 @@ export class UmbMediaTrackedReferenceServerDataSource { * @return {*} * @memberof UmbMediaTrackedReferenceServerDataSource */ - async getTrackedReferenceItem(id: string[], skip = 0, take = 20, filterMustBeIsDependency = true) { + async getTrackedReferenceItem(id: string[], skip = 0, take = 20) { return await tryExecuteAndNotify( this.#host, - TrackedReferenceResource.getTrackedReferenceItem({ + MediaResource.getMediaAreReferenced({ id, skip, take, - filterMustBeIsDependency, }), ); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts index a378de5a0d..5b1cfeac2a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/index.ts @@ -1,4 +1,5 @@ export * from './collection/index.js'; export * from './entity.js'; +export * from './utils.js'; -export * from './types.js'; +export type * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/types.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/types.ts index 5c14a8bf85..08536e1a3f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/types.ts @@ -1,4 +1,9 @@ import type { UmbRelationEntityType } from './entity.js'; +import type { + DefaultReferenceResponseModel, + DocumentReferenceResponseModel, + MediaReferenceResponseModel, +} from '@umbraco-cms/backoffice/external/backend-api'; export interface UmbRelationDetailModel { unique: string; @@ -17,3 +22,8 @@ export interface UmbRelationDetailModel { createDate: string; comment: string | null; } + +export type UmbReferenceModel = + | DefaultReferenceResponseModel + | DocumentReferenceResponseModel + | MediaReferenceResponseModel; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/utils.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/utils.ts new file mode 100644 index 0000000000..b27936d26a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/utils.ts @@ -0,0 +1,18 @@ +import type { UmbReferenceModel } from './types.js'; +import type { + DefaultReferenceResponseModel, + DocumentReferenceResponseModel, + MediaReferenceResponseModel, +} from '@umbraco-cms/backoffice/external/backend-api'; + +export function isDocumentReference(item: UmbReferenceModel): item is DocumentReferenceResponseModel { + return typeof (item as DocumentReferenceResponseModel).documentType !== 'undefined'; +} + +export function isMediaReference(item: UmbReferenceModel): item is MediaReferenceResponseModel { + return typeof (item as MediaReferenceResponseModel).mediaType !== 'undefined'; +} + +export function isDefaultReference(item: UmbReferenceModel): item is DefaultReferenceResponseModel { + return typeof (item as DefaultReferenceResponseModel).type !== 'undefined'; +}