@@ -4,22 +4,37 @@ import {
4
4
UMB_CONTENT_PICKER_DOCUMENT_ROOT_QUERY_STEP_PICKER_MODAL ,
5
5
} from '../modals/index.js' ;
6
6
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' ;
8
8
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event' ;
9
+ import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry' ;
10
+ import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation' ;
9
11
import { UmbId } from '@umbraco-cms/backoffice/id' ;
10
12
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element' ;
13
+ import { UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository' ;
11
14
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' ;
13
17
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' ;
14
20
import type { UmbModalContext } from '@umbraco-cms/backoffice/modal' ;
15
- import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation' ;
16
21
17
22
const elementName = 'umb-input-content-picker-document-root' ;
18
23
@customElement ( elementName )
19
24
export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixin <
20
25
string | undefined ,
21
26
typeof UmbLitElement
22
27
> ( 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
+
23
38
protected override getFormElement ( ) {
24
39
return undefined ;
25
40
}
@@ -35,6 +50,10 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
35
50
36
51
#dynamicRootOrigin?: { label : string ; icon : string ; description ?: string } ;
37
52
53
+ #documentLookup: Record < string , string > = { } ;
54
+
55
+ #documentTypeLookup: Record < string , string > = { } ;
56
+
38
57
#modalContext?: typeof UMB_MODAL_MANAGER_CONTEXT . TYPE ;
39
58
40
59
#openModal?: UmbModalContext ;
@@ -59,9 +78,29 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
59
78
this . _queryStepManifests = queryStepManifests ;
60
79
} ,
61
80
) ;
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
+ } ) ;
62
101
}
63
102
64
- override connectedCallback ( ) : void {
103
+ override connectedCallback ( ) {
65
104
super . connectedCallback ( ) ;
66
105
67
106
this . #updateDynamicRootOrigin( this . data ) ;
@@ -116,6 +155,11 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
116
155
#updateDynamicRootOrigin( data ?: UmbContentPickerDynamicRoot ) {
117
156
if ( ! data ) return ;
118
157
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
+
119
163
this . #dynamicRootOrigin = {
120
164
label : origin ?. label ?? data . originAlias ,
121
165
icon : origin ?. icon ?? 'icon-wand' ,
@@ -131,7 +175,10 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
131
175
querySteps = querySteps . map ( ( item ) => ( item . unique ? item : { ...item , unique : UmbId . new ( ) } ) ) ;
132
176
}
133
177
178
+ this . #documentTypeItemManager. setUniques ( ( querySteps ?? [ ] ) . map ( ( x ) => x . anyOfDocTypeKeys ?? [ ] ) . flat ( ) ) ;
179
+
134
180
this . #sorter?. setModel ( querySteps ?? [ ] ) ;
181
+
135
182
this . data = { ...this . data , ...{ querySteps } } ;
136
183
}
137
184
@@ -142,8 +189,16 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
142
189
description ?: string ;
143
190
} {
144
191
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 ;
147
202
148
203
return {
149
204
unique : item . unique ,
@@ -193,11 +248,11 @@ export class UmbInputContentPickerDocumentRootElement extends UmbFormControlMixi
193
248
194
249
#renderOrigin( ) {
195
250
if ( ! this . #dynamicRootOrigin) return ;
251
+ const description = this . #dynamicRootOrigin. description
252
+ ? this . #documentLookup[ this . #dynamicRootOrigin. description ]
253
+ : '' ;
196
254
return html `
197
- <uui- ref- node
198
- stand alone
199
- name= ${ this . #dynamicRootOrigin. label }
200
- detail= ${ ifDefined ( this . #dynamicRootOrigin. description ) } >
255
+ <uui- ref- node stand alone name= ${ this . #dynamicRootOrigin. label } detail= ${ ifDefined ( description ) } >
201
256
<umb- icon slot= "icon" name = ${ ifDefined ( this . #dynamicRootOrigin. icon ) } > </ umb- icon>
202
257
<uui- action- bar slot= "actions" >
203
258
<uui- butto n
0 commit comments