Skip to content

Commit 164b80a

Browse files
Display content type names on dynamic node query steps (#18742)
* Display content type names on dynamic node query steps. * Refactored to use `UmbRepositoryItemsManager` observable --------- Co-authored-by: leekelleher <[email protected]>
1 parent ba0028c commit 164b80a

File tree

1 file changed

+65
-10
lines changed

1 file changed

+65
-10
lines changed

src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/dynamic-root/components/input-content-picker-document-root.element.ts

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,37 @@ import {
44
UMB_CONTENT_PICKER_DOCUMENT_ROOT_QUERY_STEP_PICKER_MODAL,
55
} from '../modals/index.js';
66
import type { ManifestDynamicRootOrigin, ManifestDynamicRootQueryStep } from '../dynamic-root.extension.js';
7-
import { html, css, customElement, property, ifDefined, state, repeat } from '@umbraco-cms/backoffice/external/lit';
7+
import { css, customElement, html, ifDefined, property, repeat, state } from '@umbraco-cms/backoffice/external/lit';
88
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
9+
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
10+
import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation';
911
import { UmbId } from '@umbraco-cms/backoffice/id';
1012
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
13+
import { UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository';
1114
import { UmbSorterController } from '@umbraco-cms/backoffice/sorter';
12-
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
15+
import { UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS } from '@umbraco-cms/backoffice/document';
16+
import { UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS } from '@umbraco-cms/backoffice/document-type';
1317
import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
18+
import type { UmbDocumentItemModel } from '@umbraco-cms/backoffice/document';
19+
import type { UmbDocumentTypeItemModel } from '@umbraco-cms/backoffice/document-type';
1420
import type { UmbModalContext } from '@umbraco-cms/backoffice/modal';
15-
import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation';
1621

1722
const elementName = 'umb-input-content-picker-document-root';
1823
@customElement(elementName)
1924
export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixin<
2025
string | undefined,
2126
typeof UmbLitElement
2227
>(UmbLitElement) {
28+
readonly #documentItemManager = new UmbRepositoryItemsManager<UmbDocumentItemModel>(
29+
this,
30+
UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS,
31+
);
32+
33+
readonly #documentTypeItemManager = new UmbRepositoryItemsManager<UmbDocumentTypeItemModel>(
34+
this,
35+
UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS,
36+
);
37+
2338
protected override getFormElement() {
2439
return undefined;
2540
}
@@ -35,6 +50,10 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
3550

3651
#dynamicRootOrigin?: { label: string; icon: string; description?: string };
3752

53+
#documentLookup: Record<string, string> = {};
54+
55+
#documentTypeLookup: Record<string, string> = {};
56+
3857
#modalContext?: typeof UMB_MODAL_MANAGER_CONTEXT.TYPE;
3958

4059
#openModal?: UmbModalContext;
@@ -59,9 +78,29 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
5978
this._queryStepManifests = queryStepManifests;
6079
},
6180
);
81+
82+
this.observe(this.#documentItemManager.items, (documents) => {
83+
if (!documents?.length) return;
84+
85+
documents.forEach((document) => {
86+
this.#documentLookup[document.unique] = document.name;
87+
});
88+
89+
this.requestUpdate();
90+
});
91+
92+
this.observe(this.#documentTypeItemManager.items, (documentTypes) => {
93+
if (!documentTypes?.length) return;
94+
95+
documentTypes.forEach((documentType) => {
96+
this.#documentTypeLookup[documentType.unique] = documentType.name;
97+
});
98+
99+
this.requestUpdate();
100+
});
62101
}
63102

64-
override connectedCallback(): void {
103+
override connectedCallback() {
65104
super.connectedCallback();
66105

67106
this.#updateDynamicRootOrigin(this.data);
@@ -116,6 +155,11 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
116155
#updateDynamicRootOrigin(data?: UmbContentPickerDynamicRoot) {
117156
if (!data) return;
118157
const origin = this._originManifests.find((item) => item.meta.originAlias === data.originAlias)?.meta;
158+
159+
if (data.originKey) {
160+
this.#documentItemManager.setUniques([data.originKey]);
161+
}
162+
119163
this.#dynamicRootOrigin = {
120164
label: origin?.label ?? data.originAlias,
121165
icon: origin?.icon ?? 'icon-wand',
@@ -131,7 +175,10 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
131175
querySteps = querySteps.map((item) => (item.unique ? item : { ...item, unique: UmbId.new() }));
132176
}
133177

178+
this.#documentTypeItemManager.setUniques((querySteps ?? []).map((x) => x.anyOfDocTypeKeys ?? []).flat());
179+
134180
this.#sorter?.setModel(querySteps ?? []);
181+
135182
this.data = { ...this.data, ...{ querySteps } };
136183
}
137184

@@ -142,8 +189,16 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
142189
description?: string;
143190
} {
144191
const step = this._queryStepManifests.find((step) => step.meta.queryStepAlias === item.alias)?.meta;
145-
const docTypes = item.anyOfDocTypeKeys?.join(', ');
146-
const description = docTypes ? this.localize.term('dynamicRoot_queryStepTypes') + docTypes : undefined;
192+
193+
const docTypeNames =
194+
item.anyOfDocTypeKeys
195+
?.map((docTypeKey) => this.#documentTypeLookup[docTypeKey] ?? docTypeKey)
196+
.sort()
197+
.join(', ') ?? '';
198+
199+
const description = item.anyOfDocTypeKeys
200+
? this.localize.term('dynamicRoot_queryStepTypes') + docTypeNames
201+
: undefined;
147202

148203
return {
149204
unique: item.unique,
@@ -193,11 +248,11 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
193248

194249
#renderOrigin() {
195250
if (!this.#dynamicRootOrigin) return;
251+
const description = this.#dynamicRootOrigin.description
252+
? this.#documentLookup[this.#dynamicRootOrigin.description]
253+
: '';
196254
return html`
197-
<uui-ref-node
198-
standalone
199-
name=${this.#dynamicRootOrigin.label}
200-
detail=${ifDefined(this.#dynamicRootOrigin.description)}>
255+
<uui-ref-node standalone name=${this.#dynamicRootOrigin.label} detail=${ifDefined(description)}>
201256
<umb-icon slot="icon" name=${ifDefined(this.#dynamicRootOrigin.icon)}></umb-icon>
202257
<uui-action-bar slot="actions">
203258
<uui-button

0 commit comments

Comments
 (0)