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 0a2570b6d9..e98d7645e2 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,9 +1,15 @@ import { UmbDocumentTrackedReferenceRepository } from '../repository/index.js'; -import type { RelationItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; +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; + @customElement('umb-document-tracked-reference-table') export class UmbDocumentTrackedReferenceTableElement extends UmbLitElement { #documentTrackedReferenceRepository = new UmbDocumentTrackedReferenceRepository(this); @@ -13,7 +19,7 @@ export class UmbDocumentTrackedReferenceTableElement extends UmbLitElement { unique = ''; @state() - _items: Array = []; + _items: Array = []; /** * Indicates if there are more references to load, i.e. if the server has more references to return. @@ -52,6 +58,44 @@ 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)) { + return item.documentType.icon ?? 'icon-document'; + } + if (this.#isMediaReference(item)) { + return item.mediaType.icon ?? 'icon-media'; + } + if (this.#isDefaultReference(item)) { + return item.icon ?? 'icon-document'; + } + return 'icon-document'; + } + + #getContentTypeName(item: UmbReferenceModel) { + if (this.#isDocumentReference(item)) { + return item.documentType.name; + } + if (this.#isMediaReference(item)) { + return item.mediaType.name; + } + if (this.#isDefaultReference(item)) { + return item.type; + } + return ''; + } + #renderTable() { if (this._items?.length === 0) return nothing; return html` @@ -65,14 +109,14 @@ export class UmbDocumentTrackedReferenceTableElement extends UmbLitElement { ${repeat( this._items, - (item) => item.nodeId, + (item) => item.id, (item) => html` - - + + - ${item.nodeName} - ${item.contentTypeName} + ${item.name} + ${this.#getContentTypeName(item)} `, )} ${this._hasMoreReferences diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/repository/document-tracked-reference.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/repository/document-tracked-reference.repository.ts index a7dc589cec..72c37a761f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/repository/document-tracked-reference.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/repository/document-tracked-reference.repository.ts @@ -10,29 +10,19 @@ export class UmbDocumentTrackedReferenceRepository extends UmbControllerBase { this.#trackedReferenceSource = new UmbDocumentTrackedReferenceServerDataSource(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/documents/documents/tracked-reference/repository/document-tracked-reference.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/repository/document-tracked-reference.server.data.ts index 818973aa0b..af047cdc0e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/repository/document-tracked-reference.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tracked-reference/repository/document-tracked-reference.server.data.ts @@ -1,4 +1,4 @@ -import { TrackedReferenceResource } from '@umbraco-cms/backoffice/external/backend-api'; +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'; @@ -25,11 +25,8 @@ export class UmbDocumentTrackedReferenceServerDataSource { * @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, DocumentResource.getDocumentByIdReferencedBy({ id, skip, take })); } /** @@ -38,19 +35,13 @@ export class UmbDocumentTrackedReferenceServerDataSource { * @return {*} * @memberof UmbDocumentTrackedReferenceServerDataSource */ - 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, + DocumentResource.getDocumentByIdReferencedDescendants({ + id: parentId, skip, take, - filterMustBeIsDependency, }), ); } @@ -61,14 +52,13 @@ export class UmbDocumentTrackedReferenceServerDataSource { * @return {*} * @memberof UmbDocumentTrackedReferenceServerDataSource */ - 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({ + DocumentResource.getDocumentAreReferenced({ id, skip, take, - filterMustBeIsDependency, }), ); }