payload-nested-docs-page-tree 1.2.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +136 -47
- package/dist/components/PageTreeContext.d.ts +13 -1
- package/dist/components/PageTreeContext.js +11 -1
- package/dist/components/PageTreeContext.js.map +1 -1
- package/dist/components/PageTreeListView.client.d.ts +3 -4
- package/dist/components/PageTreeListView.client.js +645 -381
- package/dist/components/PageTreeListView.client.js.map +1 -1
- package/dist/components/PageTreeListView.module.css +90 -67
- package/dist/components/PageTreeListView.server.js +18 -28
- package/dist/components/PageTreeListView.server.js.map +1 -1
- package/dist/components/PageTreeTitleCell.js +80 -18
- package/dist/components/PageTreeTitleCell.js.map +1 -1
- package/dist/endpoints/createMovePageEndpoint.d.ts +2 -0
- package/dist/endpoints/createMovePageEndpoint.js +166 -123
- package/dist/endpoints/createMovePageEndpoint.js.map +1 -1
- package/dist/endpoints/createReorderPageEndpoint.d.ts +8 -0
- package/dist/endpoints/createReorderPageEndpoint.js +703 -0
- package/dist/endpoints/createReorderPageEndpoint.js.map +1 -0
- package/dist/endpoints/shared.d.ts +40 -0
- package/dist/endpoints/shared.js +93 -0
- package/dist/endpoints/shared.js.map +1 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/rsc.js.map +1 -1
- package/dist/index.js +105 -26
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/utilities/badgeConfig.js.map +1 -1
- package/dist/utilities/diagnostics.d.ts +42 -0
- package/dist/utilities/diagnostics.js +83 -0
- package/dist/utilities/diagnostics.js.map +1 -0
- package/dist/utilities/dropTargets.d.ts +2 -2
- package/dist/utilities/dropTargets.js +9 -7
- package/dist/utilities/dropTargets.js.map +1 -1
- package/dist/utilities/pageTree.js +4 -6
- package/dist/utilities/pageTree.js.map +1 -1
- package/dist/utilities/pageTreeCollision.d.ts +6 -0
- package/dist/utilities/pageTreeCollision.js +39 -4
- package/dist/utilities/pageTreeCollision.js.map +1 -1
- package/dist/utilities/pageTreeConfig.js.map +1 -1
- package/dist/utilities/status.d.ts +1 -1
- package/dist/utilities/status.js +7 -3
- package/dist/utilities/status.js.map +1 -1
- package/package.json +13 -12
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.root :global(.pages-hierarchy-insert-row[data-drop-valid='false'][data-drag-over='true'] .pages-hierarchy-insert-row__target::after) {
|
|
49
|
-
background: rgb(190 90 70 / 0.
|
|
50
|
-
box-shadow: 0 0 0 1px rgb(190 90 70 / 0.
|
|
49
|
+
background: rgb(190 90 70 / 0.42);
|
|
50
|
+
box-shadow: 0 0 0 1px rgb(190 90 70 / 0.12);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
.root :global(.pages-hierarchy-table .table) {
|
|
@@ -55,28 +55,6 @@
|
|
|
55
55
|
overflow-y: hidden;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
.root :global(.pages-hierarchy-table[data-page-tree-orderable='true'] [data-page-tree-manual-order-cell='true']) {
|
|
59
|
-
inline-size: 2rem;
|
|
60
|
-
min-inline-size: 2rem;
|
|
61
|
-
min-width: 2rem;
|
|
62
|
-
text-align: center;
|
|
63
|
-
width: 2rem;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.root :global(.pages-hierarchy-table[data-page-tree-orderable='true'] td[data-page-tree-manual-order-cell='true']) {
|
|
67
|
-
padding-inline: 0;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.root :global(.pages-hierarchy-table[data-page-tree-orderable='true'] th[data-page-tree-manual-order-cell='true'] .sort-header) {
|
|
71
|
-
inline-size: 100%;
|
|
72
|
-
justify-content: center;
|
|
73
|
-
min-inline-size: 0;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.root :global(.pages-hierarchy-table[data-page-tree-orderable='true'] td[data-page-tree-title-cell='true'] .pages-hierarchy-cell) {
|
|
77
|
-
margin-inline-start: -2rem;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
58
|
.root :global(.pages-hierarchy-table .table tbody tr) {
|
|
81
59
|
background: transparent;
|
|
82
60
|
transition: background-color 0.16s ease;
|
|
@@ -94,10 +72,47 @@
|
|
|
94
72
|
border-radius: 0;
|
|
95
73
|
}
|
|
96
74
|
|
|
97
|
-
.root :global(.pages-hierarchy-table .table
|
|
98
|
-
|
|
75
|
+
.root :global(.pages-hierarchy-table .table th[id='heading-_pageTreeOrderSort']),
|
|
76
|
+
.root :global(.pages-hierarchy-table .table td.cell-_pageTreeOrderSort) {
|
|
77
|
+
inline-size: 2rem;
|
|
78
|
+
max-inline-size: 2rem;
|
|
79
|
+
min-inline-size: 0;
|
|
80
|
+
padding-inline: 0.2rem;
|
|
81
|
+
text-align: center;
|
|
82
|
+
width: 2rem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.root :global(.pages-hierarchy-table .table th[id='heading-_pageTreeOrderSort'] .sort-header) {
|
|
86
|
+
justify-content: center;
|
|
99
87
|
}
|
|
100
88
|
|
|
89
|
+
.root :global(.pages-hierarchy-table .table th[id='heading-_pageTreeOrderSort'] .sort-header__button svg) {
|
|
90
|
+
display: none;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.root :global(.pages-hierarchy-table .table th[id='heading-_pageTreeOrderSort'] .sort-header__button::before) {
|
|
94
|
+
background-color: currentColor;
|
|
95
|
+
block-size: 12px;
|
|
96
|
+
content: '';
|
|
97
|
+
display: block;
|
|
98
|
+
inline-size: 12px;
|
|
99
|
+
mask: url("data:image/svg+xml,%3Csvg width='13' height='13' viewBox='0 0 13 13' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7.35714 3.92857H0.5M5.07143 7.35714H0.5M2.78571 10.7857H0.5M9.64286 0.5H0.5M9.64286 3.92857V12.5M9.64286 12.5L12.5 9.92857M9.64286 12.5L6.78571 9.92857' stroke='black' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
100
|
+
-webkit-mask: url("data:image/svg+xml,%3Csvg width='13' height='13' viewBox='0 0 13 13' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7.35714 3.92857H0.5M5.07143 7.35714H0.5M2.78571 10.7857H0.5M9.64286 0.5H0.5M9.64286 3.92857V12.5M9.64286 12.5L12.5 9.92857M9.64286 12.5L6.78571 9.92857' stroke='black' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.root :global(.pages-hierarchy-order-sort-spacer) {
|
|
104
|
+
display: block;
|
|
105
|
+
inline-size: 1rem;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.root :global(.pages-hierarchy-table td[data-page-tree-title-cell='true'] .pages-hierarchy-cell) {
|
|
109
|
+
margin-inline-start: -2rem;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='1'])) {
|
|
113
|
+
background: var(--pages-tree-shade-1);
|
|
114
|
+
}
|
|
115
|
+
|
|
101
116
|
.root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='2'])) {
|
|
102
117
|
background: var(--pages-tree-shade-2);
|
|
103
118
|
}
|
|
@@ -151,6 +166,10 @@
|
|
|
151
166
|
box-shadow: inset 0 0 0 999px rgb(36 164 223 / 0.22);
|
|
152
167
|
}
|
|
153
168
|
|
|
169
|
+
.root :global(.pages-hierarchy-table .table tbody tr[data-page-tree-row='true'][data-is-order-drag-source='true']) {
|
|
170
|
+
box-shadow: inset 0 0 0 2px rgb(74 84 98 / 0.24);
|
|
171
|
+
}
|
|
172
|
+
|
|
154
173
|
.root :global(.pages-hierarchy-table .table tbody tr[data-page-tree-row='true'][data-drag-over='true'][data-drop-valid='true']) {
|
|
155
174
|
box-shadow: inset 0 0 0 2px rgb(74 84 98 / 0.38);
|
|
156
175
|
}
|
|
@@ -173,14 +192,18 @@
|
|
|
173
192
|
}
|
|
174
193
|
|
|
175
194
|
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-insert-row[data-drop-valid='false'][data-drag-over='true'] .pages-hierarchy-insert-row__target::after) {
|
|
176
|
-
background: rgb(255 134 117 / 0.
|
|
177
|
-
box-shadow: 0 0 0 1px rgb(255 134 117 / 0.
|
|
195
|
+
background: rgb(255 134 117 / 0.42);
|
|
196
|
+
box-shadow: 0 0 0 1px rgb(255 134 117 / 0.12);
|
|
178
197
|
}
|
|
179
198
|
|
|
180
199
|
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-table .table tbody tr[data-page-tree-row='true'][data-is-drag-source='true']) {
|
|
181
200
|
box-shadow: inset 0 0 0 999px rgb(65 178 236 / 0.28);
|
|
182
201
|
}
|
|
183
202
|
|
|
203
|
+
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-table .table tbody tr[data-page-tree-row='true'][data-is-order-drag-source='true']) {
|
|
204
|
+
box-shadow: inset 0 0 0 2px rgb(232 236 241 / 0.22);
|
|
205
|
+
}
|
|
206
|
+
|
|
184
207
|
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-table .table tbody tr[data-page-tree-row='true'][data-is-drag-source='true'][data-drag-over='true']) {
|
|
185
208
|
box-shadow: inset 0 0 0 999px rgb(65 178 236 / 0.28);
|
|
186
209
|
}
|
|
@@ -252,6 +275,11 @@
|
|
|
252
275
|
inline-size: 0.95rem;
|
|
253
276
|
}
|
|
254
277
|
|
|
278
|
+
.root :global(.pages-hierarchy-cell__drag-handle--parent svg) {
|
|
279
|
+
block-size: 0.95rem;
|
|
280
|
+
inline-size: 0.95rem;
|
|
281
|
+
}
|
|
282
|
+
|
|
255
283
|
.root :global(.pages-hierarchy-cell__drag-handle:hover:not(:disabled)),
|
|
256
284
|
.root :global(.pages-hierarchy-cell__drag-handle:focus-visible:not(:disabled)),
|
|
257
285
|
.root :global(.pages-hierarchy-cell__toggle:hover),
|
|
@@ -270,22 +298,17 @@
|
|
|
270
298
|
transform: rotate(-90deg);
|
|
271
299
|
}
|
|
272
300
|
|
|
273
|
-
.root :global(.pages-hierarchy-cell[data-tree-home='true'] .pages-hierarchy-cell__content
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
content: '';
|
|
285
|
-
flex: 0 0 1rem;
|
|
286
|
-
inline-size: 1rem;
|
|
287
|
-
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M21 20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V9.48907C3 9.18048 3.14247 8.88917 3.38606 8.69972L11.3861 2.47749C11.7472 2.19663 12.2528 2.19663 12.6139 2.47749L20.6139 8.69972C20.8575 8.88917 21 9.18048 21 9.48907V20ZM19 19V9.97815L12 4.53371L5 9.97815V19H19Z'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
288
|
-
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M21 20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V9.48907C3 9.18048 3.14247 8.88917 3.38606 8.69972L11.3861 2.47749C11.7472 2.19663 12.2528 2.19663 12.6139 2.47749L20.6139 8.69972C20.8575 8.88917 21 9.18048 21 9.48907V20ZM19 19V9.97815L12 4.53371L5 9.97815V19H19Z'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
301
|
+
.root :global(.pages-hierarchy-cell[data-tree-home='true'] .pages-hierarchy-cell__content) {
|
|
302
|
+
align-items: baseline;
|
|
303
|
+
display: inline-flex;
|
|
304
|
+
gap: 0.3rem;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.root :global(.pages-hierarchy-cell__home-icon) {
|
|
308
|
+
block-size: 0.84em;
|
|
309
|
+
color: currentColor;
|
|
310
|
+
flex: 0 0 0.84em;
|
|
311
|
+
inline-size: 0.84em;
|
|
289
312
|
}
|
|
290
313
|
|
|
291
314
|
.root :global(.pages-hierarchy-cell__content) {
|
|
@@ -321,7 +344,7 @@
|
|
|
321
344
|
border-radius: 4px;
|
|
322
345
|
display: inline-flex;
|
|
323
346
|
font-size: 0.72rem;
|
|
324
|
-
font-weight:
|
|
347
|
+
font-weight: 500;
|
|
325
348
|
letter-spacing: 0.08em;
|
|
326
349
|
line-height: 1;
|
|
327
350
|
min-height: 1.55rem;
|
|
@@ -331,18 +354,18 @@
|
|
|
331
354
|
}
|
|
332
355
|
|
|
333
356
|
.root :global(.pages-hierarchy-status-badge--published) {
|
|
334
|
-
background:
|
|
335
|
-
color:
|
|
357
|
+
background: var(--theme-success-150);
|
|
358
|
+
color: var(--theme-success-800);
|
|
336
359
|
}
|
|
337
360
|
|
|
338
361
|
.root :global(.pages-hierarchy-status-badge--changed) {
|
|
339
|
-
background:
|
|
340
|
-
color:
|
|
362
|
+
background: var(--theme-warning-150);
|
|
363
|
+
color: var(--theme-warning-800);
|
|
341
364
|
}
|
|
342
365
|
|
|
343
366
|
.root :global(.pages-hierarchy-status-badge--draft) {
|
|
344
|
-
background:
|
|
345
|
-
color:
|
|
367
|
+
background: var(--theme-elevation-150);
|
|
368
|
+
color: var(--theme-elevation-800);
|
|
346
369
|
}
|
|
347
370
|
|
|
348
371
|
.root :global(.pages-hierarchy-status-badge--unknown) {
|
|
@@ -351,26 +374,26 @@
|
|
|
351
374
|
}
|
|
352
375
|
|
|
353
376
|
.root :global(.pages-hierarchy-status-badge[data-custom-color='true']) {
|
|
354
|
-
background: color-mix(in srgb, var(--page-tree-badge-base)
|
|
377
|
+
background: color-mix(in srgb, var(--page-tree-badge-base) 24%, white);
|
|
355
378
|
color: color-mix(in srgb, var(--page-tree-badge-base) 78%, black);
|
|
356
379
|
}
|
|
357
380
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
background: rgb(194 65 12 / 0.3);
|
|
365
|
-
color: rgb(255 174 0);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-status-badge--draft) {
|
|
369
|
-
background: rgb(255 230 0 / 0.2);
|
|
370
|
-
color: rgb(255 230 0);
|
|
371
|
-
}
|
|
381
|
+
.root :global(.pages-hierarchy-status-badge--published[data-custom-color='true']),
|
|
382
|
+
.root :global(.pages-hierarchy-status-badge--changed[data-custom-color='true']),
|
|
383
|
+
.root :global(.pages-hierarchy-status-badge--draft[data-custom-color='true']) {
|
|
384
|
+
background: var(--page-tree-badge-base);
|
|
385
|
+
color: color-mix(in srgb, var(--page-tree-badge-base) 35%, black);
|
|
386
|
+
}
|
|
372
387
|
|
|
373
388
|
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-status-badge[data-custom-color='true']) {
|
|
374
|
-
background: color-mix(in srgb, var(--page-tree-badge-base)
|
|
389
|
+
background: color-mix(in srgb, var(--page-tree-badge-base) 32%, black);
|
|
375
390
|
color: color-mix(in srgb, var(--page-tree-badge-base) 64%, white);
|
|
376
391
|
}
|
|
392
|
+
|
|
393
|
+
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-status-badge--published[data-custom-color='true']),
|
|
394
|
+
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-status-badge--changed[data-custom-color='true']),
|
|
395
|
+
:global(html[data-theme='dark']) .root :global(.pages-hierarchy-status-badge--draft[data-custom-color='true']) {
|
|
396
|
+
background: color-mix(in srgb, var(--page-tree-badge-base) 28%, black);
|
|
397
|
+
background: oklch(from var(--page-tree-badge-base) calc(l * 0.35) calc(c * 1.45) h);
|
|
398
|
+
color: var(--page-tree-badge-base);
|
|
399
|
+
}
|
|
@@ -133,7 +133,7 @@ function normalizeSort(value) {
|
|
|
133
133
|
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
134
134
|
}
|
|
135
135
|
function getOrderableFieldName(collectionConfig) {
|
|
136
|
-
return collectionConfig.orderable === true ? '_order' : undefined;
|
|
136
|
+
return collectionConfig.orderable === true ? '_order' : typeof collectionConfig.orderable === 'string' ? collectionConfig.orderable : undefined;
|
|
137
137
|
}
|
|
138
138
|
function getDefaultSort(collectionConfig) {
|
|
139
139
|
return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined;
|
|
@@ -180,7 +180,7 @@ function getBaseFilterArgs(props, req, query, locale) {
|
|
|
180
180
|
};
|
|
181
181
|
}
|
|
182
182
|
async function getDocsWithDisplayStatus(args) {
|
|
183
|
-
const { collectionConfig, collectionSlug, docs, payload, req } = args;
|
|
183
|
+
const { collectionConfig, collectionSlug, docs, locale, payload, req, user } = args;
|
|
184
184
|
if (!collectionConfig.versions?.drafts || docs.length === 0) {
|
|
185
185
|
return docs;
|
|
186
186
|
}
|
|
@@ -188,39 +188,27 @@ async function getDocsWithDisplayStatus(args) {
|
|
|
188
188
|
if (docIDs.length === 0) {
|
|
189
189
|
return docs;
|
|
190
190
|
}
|
|
191
|
-
|
|
192
|
-
// main collection table currently holds. With autosave-enabled collections Payload
|
|
193
|
-
// writes draft data to the main row, so a draft `_status` there does NOT mean there
|
|
194
|
-
// is no published version — it just means the latest write was a draft. To match
|
|
195
|
-
// Payload's own logic in @payloadcms/ui's Status component, query the versions table
|
|
196
|
-
// directly and treat a doc as "changed" when a published version exists alongside a
|
|
197
|
-
// newer draft.
|
|
198
|
-
const publishedVersions = await payload.findVersions({
|
|
191
|
+
const currentResult = await payload.find({
|
|
199
192
|
collection: collectionSlug,
|
|
200
193
|
depth: 0,
|
|
201
|
-
|
|
202
|
-
|
|
194
|
+
fallbackLocale: false,
|
|
195
|
+
locale,
|
|
203
196
|
pagination: false,
|
|
204
197
|
req,
|
|
198
|
+
select: {
|
|
199
|
+
_status: true,
|
|
200
|
+
id: true
|
|
201
|
+
},
|
|
202
|
+
user,
|
|
205
203
|
where: {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
in: docIDs
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
'version._status': {
|
|
214
|
-
equals: 'published'
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
]
|
|
204
|
+
id: {
|
|
205
|
+
in: docIDs
|
|
206
|
+
}
|
|
218
207
|
}
|
|
219
208
|
});
|
|
220
|
-
const publishedIDs = new Set(publishedVersions.docs.map((versionDoc)=>String(versionDoc.parent ?? '')));
|
|
221
209
|
return withPageTreeDisplayStatuses({
|
|
222
|
-
|
|
223
|
-
|
|
210
|
+
currentDocs: currentResult.docs,
|
|
211
|
+
draftDocs: docs
|
|
224
212
|
});
|
|
225
213
|
}
|
|
226
214
|
async function getListClientConfig({ collectionSlug, i18n, payload, req, user }) {
|
|
@@ -300,8 +288,10 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
300
288
|
collectionConfig: props.collectionConfig,
|
|
301
289
|
collectionSlug: props.collectionSlug,
|
|
302
290
|
docs: fullResult.docs,
|
|
291
|
+
locale,
|
|
303
292
|
payload: props.payload,
|
|
304
|
-
req
|
|
293
|
+
req,
|
|
294
|
+
user: props.user
|
|
305
295
|
});
|
|
306
296
|
const orderedDocs = buildPageTreeDocs(treeSourceDocs, {
|
|
307
297
|
parentFieldSlug: pageTreeConfig.parentFieldSlug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\r\n ColumnPreference,\r\n ListQuery,\r\n ListViewClientProps,\r\n PaginatedDocs,\r\n Params,\r\n} from 'payload'\r\n\r\nimport React from 'react'\r\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\r\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\r\nimport { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared'\r\n\r\nimport PageTreeListViewClient from './PageTreeListView.client.js'\r\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\r\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\r\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\r\nimport type { PageTreeSourceDoc } from '../types.js'\r\n\r\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\r\ntype ServerListViewProps = Record<string, any>\r\n\r\nfunction isNumericSegment(segment: string): boolean {\r\n return /^\\d+$/.test(segment)\r\n}\r\n\r\nfunction getKeySegments(key: string): string[] {\r\n const matches = key.match(/([^[\\]]+)/g)\r\n return matches ? matches.filter(Boolean) : [key]\r\n}\r\n\r\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\r\n const segments = getKeySegments(key)\r\n\r\n if (segments.length === 0) {\r\n return\r\n }\r\n\r\n let current: Record<string, unknown> | unknown[] = target\r\n\r\n for (let index = 0; index < segments.length; index += 1) {\r\n const segment = segments[index]\r\n const isLastSegment = index === segments.length - 1\r\n const nextSegment = segments[index + 1]\r\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\r\n ? []\r\n : {}\r\n\r\n if (isLastSegment) {\r\n if (Array.isArray(current)) {\r\n const arrayIndex = Number(segment)\r\n current[arrayIndex] = value\r\n } else {\r\n const existingValue = current[segment]\r\n\r\n if (existingValue === undefined) {\r\n current[segment] = value\r\n } else if (Array.isArray(existingValue)) {\r\n existingValue.push(value)\r\n } else {\r\n current[segment] = [existingValue, value]\r\n }\r\n }\r\n\r\n return\r\n }\r\n\r\n if (Array.isArray(current)) {\r\n const arrayIndex = Number(segment)\r\n const existingValue = current[arrayIndex]\r\n\r\n if (\r\n typeof existingValue !== 'object' ||\r\n existingValue === null ||\r\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\r\n ) {\r\n current[arrayIndex] = nextContainer\r\n }\r\n\r\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\r\n continue\r\n }\r\n\r\n const existingValue = current[segment]\r\n\r\n if (\r\n typeof existingValue !== 'object' ||\r\n existingValue === null ||\r\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\r\n ) {\r\n current[segment] = nextContainer\r\n }\r\n\r\n current = current[segment] as Record<string, unknown> | unknown[]\r\n }\r\n}\r\n\r\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\r\n const parsed: ParsedQuery = {}\r\n\r\n for (const [key, value] of Object.entries(searchParams ?? {})) {\r\n if (Array.isArray(value)) {\r\n for (const entry of value) {\r\n if (typeof entry === 'string') {\r\n setNestedValue(parsed, key, entry)\r\n }\r\n }\r\n } else if (typeof value === 'string') {\r\n setNestedValue(parsed, key, value)\r\n }\r\n }\r\n\r\n for (const key of ['columns', 'queryByGroup']) {\r\n if (typeof parsed[key] === 'string') {\r\n try {\r\n parsed[key] = JSON.parse(parsed[key] as string)\r\n } catch {\r\n // Leave invalid persisted values untouched and let Payload ignore them.\r\n }\r\n }\r\n }\r\n\r\n const sanitized: ParsedQuery = { ...parsed }\r\n\r\n for (const [key, value] of Object.entries(sanitized)) {\r\n if (\r\n key === 'columns' &&\r\n ((typeof value === 'string' && value === '[]') ||\r\n (Array.isArray(value) && value.length === 0))\r\n ) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if (\r\n key === 'where' &&\r\n typeof value === 'object' &&\r\n value !== null &&\r\n !Object.keys(value).length\r\n ) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\r\n const parsedValue = Number.parseInt(value, 10)\r\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\r\n }\r\n\r\n if (key === 'page' && value === 0) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if (value === '') {\r\n delete sanitized[key]\r\n }\r\n }\r\n\r\n return sanitized\r\n}\r\n\r\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\r\n return incomingValue === undefined ? fallbackValue : incomingValue\r\n}\r\n\r\nfunction normalizeLimit(value: unknown, fallback: number): number {\r\n return typeof value === 'number' && value > 0 ? value : fallback\r\n}\r\n\r\nfunction normalizePage(value: unknown, fallback: number): number {\r\n return typeof value === 'number' && value > 0 ? value : fallback\r\n}\r\n\r\nfunction normalizeSearch(value: unknown): string {\r\n return typeof value === 'string' ? value : ''\r\n}\r\n\r\nfunction normalizeSort(value: unknown): string | undefined {\r\n if (Array.isArray(value)) {\r\n const sortValues = value.filter(\r\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\r\n )\r\n return sortValues.length > 0 ? sortValues.join(',') : undefined\r\n }\r\n\r\n return typeof value === 'string' && value.length > 0 ? value : undefined\r\n}\r\n\r\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\r\n return collectionConfig.orderable === true ? '_order' : undefined\r\n}\r\n\r\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\r\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\r\n}\r\n\r\nfunction getEffectiveTreeSort(args: {\r\n defaultSort?: string\r\n orderableFieldName?: string\r\n sort?: string\r\n}): string | undefined {\r\n const { defaultSort, orderableFieldName, sort } = args\r\n\r\n if (sort) {\r\n return sort\r\n }\r\n\r\n if (\r\n orderableFieldName &&\r\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\r\n ) {\r\n return defaultSort\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nfunction normalizeWhere(value: unknown): any {\r\n if (value && typeof value === 'object' && !Array.isArray(value)) {\r\n return value\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\r\n const parsedSearchQuery = parseSearchParams(props.searchParams)\r\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\r\n const mergedQuery = {\r\n ...preferenceQuery,\r\n ...parsedSearchQuery,\r\n } as ParsedQuery\r\n\r\n return {\r\n ...mergedQuery,\r\n limit: normalizeLimit(\r\n getQueryValue(mergedQuery.limit as number | undefined, fallbackLimit),\r\n fallbackLimit,\r\n ),\r\n page: normalizePage(\r\n getQueryValue(mergedQuery.page as number | undefined, props.data.page),\r\n props.data.page,\r\n ),\r\n search: normalizeSearch(mergedQuery.search),\r\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\r\n where: normalizeWhere(mergedQuery.where),\r\n }\r\n}\r\n\r\nfunction getBaseFilterArgs(\r\n props: ServerListViewProps,\r\n req: any,\r\n query: ListQuery,\r\n locale?: string,\r\n) {\r\n return {\r\n limit: 0,\r\n locale,\r\n page: 1,\r\n req,\r\n sort:\r\n normalizeSort(query.sort) ??\r\n (typeof props.collectionConfig.defaultSort === 'string'\r\n ? props.collectionConfig.defaultSort\r\n : 'id'),\r\n }\r\n}\r\n\r\nasync function getDocsWithDisplayStatus(args: {\r\n collectionConfig: ServerListViewProps['collectionConfig']\r\n collectionSlug: string\r\n docs: PageTreeSourceDoc[]\r\n payload: any\r\n req: any\r\n}): Promise<PageTreeSourceDoc[]> {\r\n const { collectionConfig, collectionSlug, docs, payload, req } = args\r\n\r\n if (!collectionConfig.versions?.drafts || docs.length === 0) {\r\n return docs\r\n }\r\n\r\n const docIDs = docs\r\n .map((doc) => doc.id)\r\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\r\n\r\n if (docIDs.length === 0) {\r\n return docs\r\n }\r\n\r\n // The badge needs to know whether each doc has *any* published version, not what the\r\n // main collection table currently holds. With autosave-enabled collections Payload\r\n // writes draft data to the main row, so a draft `_status` there does NOT mean there\r\n // is no published version — it just means the latest write was a draft. To match\r\n // Payload's own logic in @payloadcms/ui's Status component, query the versions table\r\n // directly and treat a doc as \"changed\" when a published version exists alongside a\r\n // newer draft.\r\n const publishedVersions = await payload.findVersions({\r\n collection: collectionSlug,\r\n depth: 0,\r\n limit: 0,\r\n overrideAccess: true,\r\n pagination: false,\r\n req,\r\n where: {\r\n and: [\r\n { parent: { in: docIDs } },\r\n { 'version._status': { equals: 'published' } },\r\n ],\r\n },\r\n } as never)\r\n const publishedIDs = new Set(\r\n (publishedVersions.docs as Array<{ parent?: number | string }>).map((versionDoc) =>\r\n String(versionDoc.parent ?? ''),\r\n ),\r\n )\r\n\r\n return withPageTreeDisplayStatuses({\r\n draftDocs: docs,\r\n publishedIDs,\r\n })\r\n}\r\n\r\nasync function getListClientConfig({\r\n collectionSlug,\r\n i18n,\r\n payload,\r\n req,\r\n user,\r\n}: {\r\n collectionSlug: string\r\n i18n: unknown\r\n payload: any\r\n req: any\r\n user: unknown\r\n}): Promise<{\r\n clientCollectionConfig: any\r\n clientConfig: any\r\n}> {\r\n const clientConfig = getClientConfig({\r\n config: payload.config,\r\n i18n: i18n as never,\r\n importMap: payload.importMap,\r\n user: (user ?? true) as never,\r\n } as never)\r\n\r\n await applyLocaleFiltering({\r\n clientConfig,\r\n config: payload.config,\r\n req,\r\n } as never)\r\n\r\n const clientCollectionConfig = clientConfig.collections.find(\r\n (collection) => collection.slug === collectionSlug,\r\n )\r\n\r\n if (!clientCollectionConfig) {\r\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\r\n }\r\n\r\n return {\r\n clientCollectionConfig,\r\n clientConfig,\r\n }\r\n}\r\n\r\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\r\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\r\n\r\n if (!pageTreeConfig) {\r\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\r\n }\r\n\r\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\r\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\r\n }\r\n\r\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\r\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\r\n const defaultSort = getDefaultSort(props.collectionConfig)\r\n const effectiveSort = getEffectiveTreeSort({\r\n defaultSort,\r\n orderableFieldName,\r\n sort: normalizeSort(query.sort),\r\n })\r\n const effectiveQuery = {\r\n ...query,\r\n sort: effectiveSort,\r\n }\r\n const locale = props.locale?.code\r\n const req = {\r\n i18n: props.i18n,\r\n locale,\r\n payload: props.payload,\r\n query: effectiveQuery,\r\n user: props.user,\r\n }\r\n\r\n const baseFilter =\r\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\r\n const baseFilterConstraint = baseFilter\r\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\r\n : undefined\r\n const mergedWhere = combineWhereConstraints([\r\n mergeListSearchAndWhere({\r\n collectionConfig: props.collectionConfig,\r\n search: normalizeSearch(query.search),\r\n where: normalizeWhere(query.where),\r\n } as never),\r\n baseFilterConstraint ?? undefined,\r\n ])\r\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\r\n\r\n const fullResult = await props.payload.find({\r\n collection: props.collectionSlug,\r\n depth: 0,\r\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\r\n fallbackLocale: false,\r\n includeLockStatus: true,\r\n locale,\r\n pagination: false,\r\n req,\r\n sort:\r\n normalizeSort(query.sort) ??\r\n defaultSort,\r\n user: props.user,\r\n where,\r\n } as never)\r\n const treeSourceDocs = await getDocsWithDisplayStatus({\r\n collectionConfig: props.collectionConfig,\r\n collectionSlug: props.collectionSlug,\r\n docs: fullResult.docs as unknown as PageTreeSourceDoc[],\r\n payload: props.payload,\r\n req,\r\n })\r\n\r\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\r\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\r\n sort: effectiveSort,\r\n })\r\n const orderedData: PaginatedDocs = {\r\n docs: orderedDocs,\r\n hasNextPage: false,\r\n hasPrevPage: false,\r\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\r\n nextPage: null,\r\n page: 1,\r\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\r\n prevPage: null,\r\n totalDocs: orderedDocs.length,\r\n totalPages: 1,\r\n }\r\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\r\n collectionSlug: props.collectionSlug,\r\n i18n: props.i18n,\r\n payload: props.payload,\r\n req,\r\n user: props.user,\r\n })\r\n const columnPreferences: ColumnPreference[] = (props.columnState as Array<{\r\n accessor: string\r\n active: boolean\r\n }>).map(({ accessor, active }) => ({\r\n accessor,\r\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\r\n }))\r\n const columns = getColumns({\r\n clientConfig,\r\n collectionConfig: clientCollectionConfig,\r\n collectionSlug: props.collectionSlug,\r\n columns: columnPreferences,\r\n i18n: props.i18n,\r\n permissions: props.permissions,\r\n } as never)\r\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\r\n const renderedTable = await renderTable({\r\n clientCollectionConfig,\r\n clientConfig,\r\n collectionConfig: props.collectionConfig,\r\n columns,\r\n data: orderedData,\r\n enableRowSelections: Boolean(props.enableRowSelections),\r\n fieldPermissions,\r\n i18n: props.i18n,\r\n orderableFieldName: orderableFieldName ?? '',\r\n payload: props.payload,\r\n query: effectiveQuery,\r\n req,\r\n tableAppearance: 'default',\r\n useAsTitle: props.collectionConfig.admin.useAsTitle,\r\n viewType: props.viewType,\r\n } as never)\r\n const clientProps: Omit<ListViewClientProps, 'Table' | 'columnState'> = {\r\n AfterList: props.AfterList,\r\n AfterListTable: props.AfterListTable,\r\n BeforeList: props.BeforeList,\r\n BeforeListTable: props.BeforeListTable,\r\n Description: props.Description,\r\n beforeActions: props.beforeActions,\r\n collectionSlug: props.collectionSlug,\r\n disableBulkDelete: props.disableBulkDelete,\r\n disableBulkEdit: props.disableBulkEdit,\r\n disableQueryPresets: props.disableQueryPresets,\r\n enableRowSelections: props.enableRowSelections,\r\n hasCreatePermission: props.hasCreatePermission,\r\n hasDeletePermission: props.hasDeletePermission,\r\n hasTrashPermission: props.hasTrashPermission,\r\n listMenuItems: props.listMenuItems,\r\n listPreferences: props.listPreferences,\r\n newDocumentURL: props.newDocumentURL,\r\n preferenceKey: props.preferenceKey,\r\n queryPreset: props.queryPreset,\r\n queryPresetPermissions: props.queryPresetPermissions,\r\n renderedFilters: props.renderedFilters,\r\n resolvedFilterOptions: props.resolvedFilterOptions,\r\n viewType: props.viewType,\r\n }\r\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\r\n\r\n return (\r\n <PageTreeListViewClient\r\n {...clientProps}\r\n allDocs={orderedDocs}\r\n badgeConfig={pageTreeConfig.badges}\r\n canMoveDocs={canMoveDocs}\r\n columnState={renderedTable.columnState}\r\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\r\n orderableFieldName={orderableFieldName}\r\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\r\n query={effectiveQuery}\r\n sourceDocs={treeSourceDocs}\r\n useAsTitle={props.collectionConfig.admin.useAsTitle}\r\n />\r\n )\r\n}\r\n\r\nexport default NestedDocsPageTreeListView\r\n"],"names":["React","getColumns","renderTable","getClientConfig","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","PageTreeListViewClient","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","collectionSlug","docs","payload","versions","drafts","docIDs","map","doc","id","publishedVersions","findVersions","collection","depth","overrideAccess","pagination","and","parent","in","equals","publishedIDs","Set","versionDoc","String","draftDocs","getListClientConfig","i18n","user","clientConfig","config","importMap","clientCollectionConfig","collections","find","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","admin","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","draft","fallbackLocale","includeLockStatus","treeSourceDocs","orderedDocs","parentFieldSlug","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","columnState","accessor","active","columns","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","beforeActions","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","allDocs","badgeConfig","badges","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\r\n ColumnPreference,\r\n ListQuery,\r\n ListViewClientProps,\r\n PaginatedDocs,\r\n Params,\r\n} from 'payload'\r\n\r\nimport React from 'react'\r\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\r\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\r\nimport { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared'\r\n\r\nimport PageTreeListViewClient from './PageTreeListView.client.js'\r\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\r\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\r\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\r\nimport type { PageTreeSourceDoc } from '../types.js'\r\n\r\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\r\ntype ServerListViewProps = Record<string, any>\r\n\r\nfunction isNumericSegment(segment: string): boolean {\r\n return /^\\d+$/.test(segment)\r\n}\r\n\r\nfunction getKeySegments(key: string): string[] {\r\n const matches = key.match(/([^[\\]]+)/g)\r\n return matches ? matches.filter(Boolean) : [key]\r\n}\r\n\r\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\r\n const segments = getKeySegments(key)\r\n\r\n if (segments.length === 0) {\r\n return\r\n }\r\n\r\n let current: Record<string, unknown> | unknown[] = target\r\n\r\n for (let index = 0; index < segments.length; index += 1) {\r\n const segment = segments[index]\r\n const isLastSegment = index === segments.length - 1\r\n const nextSegment = segments[index + 1]\r\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\r\n ? []\r\n : {}\r\n\r\n if (isLastSegment) {\r\n if (Array.isArray(current)) {\r\n const arrayIndex = Number(segment)\r\n current[arrayIndex] = value\r\n } else {\r\n const existingValue = current[segment]\r\n\r\n if (existingValue === undefined) {\r\n current[segment] = value\r\n } else if (Array.isArray(existingValue)) {\r\n existingValue.push(value)\r\n } else {\r\n current[segment] = [existingValue, value]\r\n }\r\n }\r\n\r\n return\r\n }\r\n\r\n if (Array.isArray(current)) {\r\n const arrayIndex = Number(segment)\r\n const existingValue = current[arrayIndex]\r\n\r\n if (\r\n typeof existingValue !== 'object' ||\r\n existingValue === null ||\r\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\r\n ) {\r\n current[arrayIndex] = nextContainer\r\n }\r\n\r\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\r\n continue\r\n }\r\n\r\n const existingValue = current[segment]\r\n\r\n if (\r\n typeof existingValue !== 'object' ||\r\n existingValue === null ||\r\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\r\n ) {\r\n current[segment] = nextContainer\r\n }\r\n\r\n current = current[segment] as Record<string, unknown> | unknown[]\r\n }\r\n}\r\n\r\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\r\n const parsed: ParsedQuery = {}\r\n\r\n for (const [key, value] of Object.entries(searchParams ?? {})) {\r\n if (Array.isArray(value)) {\r\n for (const entry of value) {\r\n if (typeof entry === 'string') {\r\n setNestedValue(parsed, key, entry)\r\n }\r\n }\r\n } else if (typeof value === 'string') {\r\n setNestedValue(parsed, key, value)\r\n }\r\n }\r\n\r\n for (const key of ['columns', 'queryByGroup']) {\r\n if (typeof parsed[key] === 'string') {\r\n try {\r\n parsed[key] = JSON.parse(parsed[key] as string)\r\n } catch {\r\n // Leave invalid persisted values untouched and let Payload ignore them.\r\n }\r\n }\r\n }\r\n\r\n const sanitized: ParsedQuery = { ...parsed }\r\n\r\n for (const [key, value] of Object.entries(sanitized)) {\r\n if (\r\n key === 'columns' &&\r\n ((typeof value === 'string' && value === '[]') ||\r\n (Array.isArray(value) && value.length === 0))\r\n ) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if (\r\n key === 'where' &&\r\n typeof value === 'object' &&\r\n value !== null &&\r\n !Object.keys(value).length\r\n ) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\r\n const parsedValue = Number.parseInt(value, 10)\r\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\r\n }\r\n\r\n if (key === 'page' && value === 0) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if (value === '') {\r\n delete sanitized[key]\r\n }\r\n }\r\n\r\n return sanitized\r\n}\r\n\r\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\r\n return incomingValue === undefined ? fallbackValue : incomingValue\r\n}\r\n\r\nfunction normalizeLimit(value: unknown, fallback: number): number {\r\n return typeof value === 'number' && value > 0 ? value : fallback\r\n}\r\n\r\nfunction normalizePage(value: unknown, fallback: number): number {\r\n return typeof value === 'number' && value > 0 ? value : fallback\r\n}\r\n\r\nfunction normalizeSearch(value: unknown): string {\r\n return typeof value === 'string' ? value : ''\r\n}\r\n\r\nfunction normalizeSort(value: unknown): string | undefined {\r\n if (Array.isArray(value)) {\r\n const sortValues = value.filter(\r\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\r\n )\r\n return sortValues.length > 0 ? sortValues.join(',') : undefined\r\n }\r\n\r\n return typeof value === 'string' && value.length > 0 ? value : undefined\r\n}\r\n\r\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\r\n return collectionConfig.orderable === true\r\n ? '_order'\r\n : typeof collectionConfig.orderable === 'string'\r\n ? collectionConfig.orderable\r\n : undefined\r\n}\r\n\r\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\r\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\r\n}\r\n\r\nfunction getEffectiveTreeSort(args: {\r\n defaultSort?: string\r\n orderableFieldName?: string\r\n sort?: string\r\n}): string | undefined {\r\n const { defaultSort, orderableFieldName, sort } = args\r\n\r\n if (sort) {\r\n return sort\r\n }\r\n\r\n if (\r\n orderableFieldName &&\r\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\r\n ) {\r\n return defaultSort\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nfunction normalizeWhere(value: unknown): any {\r\n if (value && typeof value === 'object' && !Array.isArray(value)) {\r\n return value\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\r\n const parsedSearchQuery = parseSearchParams(props.searchParams)\r\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\r\n const mergedQuery = {\r\n ...preferenceQuery,\r\n ...parsedSearchQuery,\r\n } as ParsedQuery\r\n\r\n return {\r\n ...mergedQuery,\r\n limit: normalizeLimit(\r\n getQueryValue(mergedQuery.limit as number | undefined, fallbackLimit),\r\n fallbackLimit,\r\n ),\r\n page: normalizePage(\r\n getQueryValue(mergedQuery.page as number | undefined, props.data.page),\r\n props.data.page,\r\n ),\r\n search: normalizeSearch(mergedQuery.search),\r\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\r\n where: normalizeWhere(mergedQuery.where),\r\n }\r\n}\r\n\r\nfunction getBaseFilterArgs(\r\n props: ServerListViewProps,\r\n req: any,\r\n query: ListQuery,\r\n locale?: string,\r\n) {\r\n return {\r\n limit: 0,\r\n locale,\r\n page: 1,\r\n req,\r\n sort:\r\n normalizeSort(query.sort) ??\r\n (typeof props.collectionConfig.defaultSort === 'string'\r\n ? props.collectionConfig.defaultSort\r\n : 'id'),\r\n }\r\n}\r\n\r\nasync function getDocsWithDisplayStatus(args: {\r\n collectionConfig: ServerListViewProps['collectionConfig']\r\n collectionSlug: string\r\n docs: PageTreeSourceDoc[]\r\n locale?: string\r\n payload: any\r\n req: any\r\n user: unknown\r\n}): Promise<PageTreeSourceDoc[]> {\r\n const { collectionConfig, collectionSlug, docs, locale, payload, req, user } = args\r\n\r\n if (!collectionConfig.versions?.drafts || docs.length === 0) {\r\n return docs\r\n }\r\n\r\n const docIDs = docs\r\n .map((doc) => doc.id)\r\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\r\n\r\n if (docIDs.length === 0) {\r\n return docs\r\n }\r\n\r\n const currentResult = await payload.find({\r\n collection: collectionSlug,\r\n depth: 0,\r\n fallbackLocale: false,\r\n locale,\r\n pagination: false,\r\n req,\r\n select: {\r\n _status: true,\r\n id: true,\r\n },\r\n user,\r\n where: {\r\n id: {\r\n in: docIDs,\r\n },\r\n },\r\n } as never)\r\n\r\n return withPageTreeDisplayStatuses({\r\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\r\n draftDocs: docs,\r\n })\r\n}\r\n\r\nasync function getListClientConfig({\r\n collectionSlug,\r\n i18n,\r\n payload,\r\n req,\r\n user,\r\n}: {\r\n collectionSlug: string\r\n i18n: unknown\r\n payload: any\r\n req: any\r\n user: unknown\r\n}): Promise<{\r\n clientCollectionConfig: any\r\n clientConfig: any\r\n}> {\r\n const clientConfig = getClientConfig({\r\n config: payload.config,\r\n i18n: i18n as never,\r\n importMap: payload.importMap,\r\n user: (user ?? true) as never,\r\n } as never)\r\n\r\n await applyLocaleFiltering({\r\n clientConfig,\r\n config: payload.config,\r\n req,\r\n } as never)\r\n\r\n const clientCollectionConfig = clientConfig.collections.find(\r\n (collection) => collection.slug === collectionSlug,\r\n )\r\n\r\n if (!clientCollectionConfig) {\r\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\r\n }\r\n\r\n return {\r\n clientCollectionConfig,\r\n clientConfig,\r\n }\r\n}\r\n\r\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\r\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\r\n\r\n if (!pageTreeConfig) {\r\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\r\n }\r\n\r\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\r\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\r\n }\r\n\r\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\r\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\r\n const defaultSort = getDefaultSort(props.collectionConfig)\r\n const effectiveSort = getEffectiveTreeSort({\r\n defaultSort,\r\n orderableFieldName,\r\n sort: normalizeSort(query.sort),\r\n })\r\n const effectiveQuery = {\r\n ...query,\r\n sort: effectiveSort,\r\n }\r\n const locale = props.locale?.code\r\n const req = {\r\n i18n: props.i18n,\r\n locale,\r\n payload: props.payload,\r\n query: effectiveQuery,\r\n user: props.user,\r\n }\r\n\r\n const baseFilter =\r\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\r\n const baseFilterConstraint = baseFilter\r\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\r\n : undefined\r\n const mergedWhere = combineWhereConstraints([\r\n mergeListSearchAndWhere({\r\n collectionConfig: props.collectionConfig,\r\n search: normalizeSearch(query.search),\r\n where: normalizeWhere(query.where),\r\n } as never),\r\n baseFilterConstraint ?? undefined,\r\n ])\r\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\r\n\r\n const fullResult = await props.payload.find({\r\n collection: props.collectionSlug,\r\n depth: 0,\r\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\r\n fallbackLocale: false,\r\n includeLockStatus: true,\r\n locale,\r\n pagination: false,\r\n req,\r\n sort: normalizeSort(query.sort) ?? defaultSort,\r\n user: props.user,\r\n where,\r\n } as never)\r\n const treeSourceDocs = await getDocsWithDisplayStatus({\r\n collectionConfig: props.collectionConfig,\r\n collectionSlug: props.collectionSlug,\r\n docs: fullResult.docs as unknown as PageTreeSourceDoc[],\r\n locale,\r\n payload: props.payload,\r\n req,\r\n user: props.user,\r\n })\r\n\r\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\r\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\r\n sort: effectiveSort,\r\n })\r\n const orderedData: PaginatedDocs = {\r\n docs: orderedDocs,\r\n hasNextPage: false,\r\n hasPrevPage: false,\r\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\r\n nextPage: null,\r\n page: 1,\r\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\r\n prevPage: null,\r\n totalDocs: orderedDocs.length,\r\n totalPages: 1,\r\n }\r\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\r\n collectionSlug: props.collectionSlug,\r\n i18n: props.i18n,\r\n payload: props.payload,\r\n req,\r\n user: props.user,\r\n })\r\n const columnPreferences: ColumnPreference[] = (props.columnState as Array<{\r\n accessor: string\r\n active: boolean\r\n }>).map(({ accessor, active }) => ({\r\n accessor,\r\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\r\n }))\r\n const columns = getColumns({\r\n clientConfig,\r\n collectionConfig: clientCollectionConfig,\r\n collectionSlug: props.collectionSlug,\r\n columns: columnPreferences,\r\n i18n: props.i18n,\r\n permissions: props.permissions,\r\n } as never)\r\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\r\n const renderedTable = await renderTable({\r\n clientCollectionConfig,\r\n clientConfig,\r\n collectionConfig: props.collectionConfig,\r\n columns,\r\n data: orderedData,\r\n enableRowSelections: Boolean(props.enableRowSelections),\r\n fieldPermissions,\r\n i18n: props.i18n,\r\n orderableFieldName: orderableFieldName ?? '',\r\n payload: props.payload,\r\n query: effectiveQuery,\r\n req,\r\n tableAppearance: 'default',\r\n useAsTitle: props.collectionConfig.admin.useAsTitle,\r\n viewType: props.viewType,\r\n } as never)\r\n const clientProps: Omit<ListViewClientProps, 'Table' | 'columnState'> = {\r\n AfterList: props.AfterList,\r\n AfterListTable: props.AfterListTable,\r\n BeforeList: props.BeforeList,\r\n BeforeListTable: props.BeforeListTable,\r\n Description: props.Description,\r\n beforeActions: props.beforeActions,\r\n collectionSlug: props.collectionSlug,\r\n disableBulkDelete: props.disableBulkDelete,\r\n disableBulkEdit: props.disableBulkEdit,\r\n disableQueryPresets: props.disableQueryPresets,\r\n enableRowSelections: props.enableRowSelections,\r\n hasCreatePermission: props.hasCreatePermission,\r\n hasDeletePermission: props.hasDeletePermission,\r\n hasTrashPermission: props.hasTrashPermission,\r\n listMenuItems: props.listMenuItems,\r\n listPreferences: props.listPreferences,\r\n newDocumentURL: props.newDocumentURL,\r\n preferenceKey: props.preferenceKey,\r\n queryPreset: props.queryPreset,\r\n queryPresetPermissions: props.queryPresetPermissions,\r\n renderedFilters: props.renderedFilters,\r\n resolvedFilterOptions: props.resolvedFilterOptions,\r\n viewType: props.viewType,\r\n }\r\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\r\n\r\n return (\r\n <PageTreeListViewClient\r\n {...clientProps}\r\n allDocs={orderedDocs}\r\n badgeConfig={pageTreeConfig.badges}\r\n canMoveDocs={canMoveDocs}\r\n columnState={renderedTable.columnState}\r\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\r\n orderableFieldName={orderableFieldName}\r\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\r\n query={effectiveQuery}\r\n sourceDocs={treeSourceDocs}\r\n useAsTitle={props.collectionConfig.admin.useAsTitle}\r\n />\r\n )\r\n}\r\n\r\nexport default NestedDocsPageTreeListView\r\n"],"names":["React","getColumns","renderTable","getClientConfig","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","PageTreeListViewClient","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","collectionSlug","docs","payload","user","versions","drafts","docIDs","map","doc","id","currentResult","find","collection","depth","fallbackLocale","pagination","select","_status","in","currentDocs","draftDocs","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","admin","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","draft","includeLockStatus","treeSourceDocs","orderedDocs","parentFieldSlug","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","columnState","accessor","active","columns","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","beforeActions","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","allDocs","badgeConfig","badges","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":"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"}
|
|
@@ -1,23 +1,62 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useDraggable } from '@dnd-kit/core';
|
|
4
|
-
import { ChevronIcon, DragHandleIcon } from '@payloadcms/ui';
|
|
4
|
+
import { ChevronIcon, DragHandleIcon, useListQuery } from '@payloadcms/ui';
|
|
5
5
|
import React from 'react';
|
|
6
|
-
import { usePageTree } from './PageTreeContext.js';
|
|
6
|
+
import { usePageTree, usePageTreeRowDnd } from './PageTreeContext.js';
|
|
7
7
|
const HOME_PAGE_SLUG = 'home';
|
|
8
8
|
function isHomePageDoc(doc) {
|
|
9
9
|
return doc.__pageTreeParentID === null && doc.slug?.trim() === HOME_PAGE_SLUG;
|
|
10
10
|
}
|
|
11
|
+
function normalizeSort(value) {
|
|
12
|
+
return Array.isArray(value) ? value[0] : value;
|
|
13
|
+
}
|
|
14
|
+
function ParentMoveHandleIcon() {
|
|
15
|
+
return /*#__PURE__*/ _jsx("svg", {
|
|
16
|
+
"aria-hidden": "true",
|
|
17
|
+
className: "icon icon--drag-handle",
|
|
18
|
+
fill: "none",
|
|
19
|
+
height: "20",
|
|
20
|
+
viewBox: "0 0 20 20",
|
|
21
|
+
width: "20",
|
|
22
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
23
|
+
children: /*#__PURE__*/ _jsx("path", {
|
|
24
|
+
className: "stroke",
|
|
25
|
+
d: "M13.75 4.25L6.25 15.75",
|
|
26
|
+
stroke: "currentColor",
|
|
27
|
+
strokeLinecap: "round",
|
|
28
|
+
strokeWidth: "2.25"
|
|
29
|
+
})
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function HomeIndicatorIcon() {
|
|
33
|
+
return /*#__PURE__*/ _jsx("svg", {
|
|
34
|
+
"aria-hidden": "true",
|
|
35
|
+
className: "pages-hierarchy-cell__home-icon",
|
|
36
|
+
fill: "none",
|
|
37
|
+
height: "14",
|
|
38
|
+
viewBox: "0 0 14 14",
|
|
39
|
+
width: "14",
|
|
40
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
41
|
+
children: /*#__PURE__*/ _jsx("path", {
|
|
42
|
+
d: "M2.5 7L7 3L11.5 7V13.5H2.5V7Z",
|
|
43
|
+
stroke: "currentColor",
|
|
44
|
+
strokeLinejoin: "round"
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
}
|
|
11
48
|
export function PageTreeTitleCell({ children, doc, homeIndicatorEnabled }) {
|
|
12
|
-
const { activeDragRowID, canMoveDocs, collapsedIDs,
|
|
49
|
+
const { activeDragRowID, canMoveDocs, collapsedIDs, parentMoveEnabled, pendingMoveRowID, toggleRow } = usePageTree();
|
|
50
|
+
const rowDnd = usePageTreeRowDnd();
|
|
51
|
+
const { orderableFieldName, query = {} } = useListQuery();
|
|
13
52
|
const depth = doc.__pageTreeDepth;
|
|
14
53
|
const hasChildren = doc.__pageTreeHasChildren;
|
|
15
54
|
const shadeLevel = Math.min(doc.__pageTreeShadeLevel, 6);
|
|
16
55
|
const rowID = doc.__pageTreeID;
|
|
17
56
|
const isCollapsed = hasChildren && collapsedIDs.has(rowID);
|
|
18
|
-
const dragIsDisabled =
|
|
57
|
+
const dragIsDisabled = !canMoveDocs || !rowID || pendingMoveRowID !== null;
|
|
19
58
|
const showHomeIcon = homeIndicatorEnabled && isHomePageDoc(doc);
|
|
20
|
-
const
|
|
59
|
+
const parentMoveDrag = useDraggable({
|
|
21
60
|
id: `page-drag:${rowID}`,
|
|
22
61
|
data: {
|
|
23
62
|
dragType: 'move',
|
|
@@ -25,10 +64,13 @@ export function PageTreeTitleCell({ children, doc, homeIndicatorEnabled }) {
|
|
|
25
64
|
},
|
|
26
65
|
disabled: dragIsDisabled
|
|
27
66
|
});
|
|
67
|
+
const querySort = normalizeSort(query.sort);
|
|
68
|
+
const showOrderableHandle = canMoveDocs && Boolean(orderableFieldName) && (querySort === orderableFieldName || querySort === `-${orderableFieldName}`);
|
|
28
69
|
const isActiveDragRow = activeDragRowID === rowID;
|
|
70
|
+
const isDragging = parentMoveDrag.isDragging || rowDnd?.isOrderDragging || isActiveDragRow;
|
|
29
71
|
return /*#__PURE__*/ _jsxs("div", {
|
|
30
72
|
className: "pages-hierarchy-cell",
|
|
31
|
-
"data-row-dragging": isDragging
|
|
73
|
+
"data-row-dragging": isDragging ? 'true' : 'false',
|
|
32
74
|
"data-tree-depth": depth,
|
|
33
75
|
"data-tree-has-children": hasChildren ? 'true' : 'false',
|
|
34
76
|
"data-tree-home": showHomeIcon ? 'true' : undefined,
|
|
@@ -56,28 +98,48 @@ export function PageTreeTitleCell({ children, doc, homeIndicatorEnabled }) {
|
|
|
56
98
|
}) : /*#__PURE__*/ _jsx("span", {
|
|
57
99
|
className: "pages-hierarchy-cell__spacer"
|
|
58
100
|
}),
|
|
59
|
-
|
|
60
|
-
...
|
|
61
|
-
...
|
|
62
|
-
"aria-label": "
|
|
101
|
+
showOrderableHandle ? /*#__PURE__*/ _jsx("button", {
|
|
102
|
+
...rowDnd?.orderHandleAttributes ?? {},
|
|
103
|
+
...rowDnd?.orderHandleListeners ?? {},
|
|
104
|
+
"aria-label": "Reorder document within this parent",
|
|
63
105
|
className: [
|
|
64
106
|
'pages-hierarchy-cell__drag-handle',
|
|
65
|
-
|
|
107
|
+
'pages-hierarchy-cell__drag-handle--orderable',
|
|
108
|
+
rowDnd?.isOrderDragging || isActiveDragRow ? 'pages-hierarchy-cell__drag-handle--active' : ''
|
|
66
109
|
].filter(Boolean).join(' '),
|
|
67
|
-
disabled: dragIsDisabled,
|
|
110
|
+
disabled: dragIsDisabled || !rowDnd,
|
|
68
111
|
onClick: (event)=>{
|
|
69
112
|
event.preventDefault();
|
|
70
113
|
event.stopPropagation();
|
|
71
114
|
},
|
|
72
|
-
ref:
|
|
115
|
+
ref: rowDnd?.orderHandleRef,
|
|
73
116
|
type: "button",
|
|
74
117
|
children: /*#__PURE__*/ _jsx(DragHandleIcon, {})
|
|
75
|
-
}) :
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
118
|
+
}) : null,
|
|
119
|
+
canMoveDocs && parentMoveEnabled ? /*#__PURE__*/ _jsx("button", {
|
|
120
|
+
...parentMoveDrag.attributes,
|
|
121
|
+
...parentMoveDrag.listeners,
|
|
122
|
+
"aria-label": "Move document under another page",
|
|
123
|
+
className: [
|
|
124
|
+
'pages-hierarchy-cell__drag-handle',
|
|
125
|
+
'pages-hierarchy-cell__drag-handle--parent',
|
|
126
|
+
parentMoveDrag.isDragging || isActiveDragRow ? 'pages-hierarchy-cell__drag-handle--active' : ''
|
|
127
|
+
].filter(Boolean).join(' '),
|
|
128
|
+
disabled: dragIsDisabled,
|
|
129
|
+
onClick: (event)=>{
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
event.stopPropagation();
|
|
132
|
+
},
|
|
133
|
+
ref: parentMoveDrag.setNodeRef,
|
|
134
|
+
type: "button",
|
|
135
|
+
children: /*#__PURE__*/ _jsx(ParentMoveHandleIcon, {})
|
|
136
|
+
}) : null,
|
|
137
|
+
/*#__PURE__*/ _jsxs("span", {
|
|
79
138
|
className: "pages-hierarchy-cell__content",
|
|
80
|
-
children:
|
|
139
|
+
children: [
|
|
140
|
+
showHomeIcon ? /*#__PURE__*/ _jsx(HomeIndicatorIcon, {}) : null,
|
|
141
|
+
children
|
|
142
|
+
]
|
|
81
143
|
})
|
|
82
144
|
]
|
|
83
145
|
});
|