move types to relations package and make documents use it

This commit is contained in:
Jacob Overgaard
2024-03-27 11:33:26 +01:00
parent b5cc00a35f
commit 081ea7a931
7 changed files with 117 additions and 79 deletions

View File

@@ -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 '';

View File

@@ -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<RelationItemResponseModel> = [];
private _items?: Array<UmbReferenceModel> = [];
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` <uui-box
@@ -75,32 +123,30 @@ export class UmbDocumentWorkspaceViewInfoReferenceElement extends UmbLitElement
<uui-table-head-cell><umb-localize key="general_status">Status</umb-localize></uui-table-head-cell>
<uui-table-head-cell><umb-localize key="general_typeName">Type Name</umb-localize></uui-table-head-cell>
<uui-table-head-cell><umb-localize key="general_type">Type</umb-localize></uui-table-head-cell>
<uui-table-head-cell>
<umb-localize key="relationType_relation">Relation</umb-localize>
</uui-table-head-cell>
</uui-table-head>
${repeat(
this._items,
(item) => item.nodeId,
(item) => item.id,
(item) =>
html`<uui-table-row>
<uui-table-cell style="text-align:center;">
<umb-icon name=${item.contentTypeIcon ?? 'icon-document'}></umb-icon>
<umb-icon name=${this.#getIcon(item)}></umb-icon>
</uui-table-cell>
<uui-table-cell class="link-cell">
<uui-button label="Edit" href=${`${this._editDocumentPath}edit/${item.nodeId}`}>
${item.nodeName}
</uui-button>
${isDocumentReference(item)
? html` <uui-button label="Edit" href=${`${this._editDocumentPath}edit/${item.id}`}>
${item.name}
</uui-button>`
: item.name}
</uui-table-cell>
<uui-table-cell>
${item.nodePublished
${this.#getPublishedStatus(item)
? this.localize.term('content_published')
: this.localize.term('content_unpublished')}
</uui-table-cell>
<uui-table-cell>${item.contentTypeName}</uui-table-cell>
<uui-table-cell>${item.nodeType}</uui-table-cell>
<uui-table-cell>${item.relationTypeName}</uui-table-cell>
<uui-table-cell>${this.#getContentTypeName(item)}</uui-table-cell>
<uui-table-cell>${this.#getContentType(item)}</uui-table-cell>
</uui-table-row>`,
)}
</uui-table>
@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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,
}),
);
}

View File

@@ -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';

View File

@@ -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;

View File

@@ -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';
}