@strapi/content-manager 5.38.1 → 5.40.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/dist/admin/hooks/useDocument.js +21 -5
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +22 -6
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +3 -2
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +4 -4
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +71 -44
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +54 -46
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +107 -88
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +109 -90
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +91 -106
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +94 -109
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +43 -23
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +45 -25
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +30 -19
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +34 -23
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +23 -3
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +4 -3
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +3 -0
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +3 -0
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +19 -7
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -8
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +11 -15
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +11 -16
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +3 -0
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +3 -0
- package/dist/server/services/utils/draft.js +8 -1
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +8 -1
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +16 -1
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +16 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/services/utils/draft.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx,
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useNotification, useField, useForm,
|
|
3
|
+
import { useNotification, useField, useForm, useIsDesktop } from '@strapi/admin/strapi-admin';
|
|
4
4
|
import { Accordion, TextButton, Box, VisuallyHidden, useComposedRefs, IconButton, Flex } from '@strapi/design-system';
|
|
5
5
|
import { Plus, Trash, Drag, ArrowUp, ArrowDown } from '@strapi/icons';
|
|
6
6
|
import { getEmptyImage } from 'react-dnd-html5-backend';
|
|
@@ -35,7 +35,6 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
35
35
|
const { max = Infinity } = attribute;
|
|
36
36
|
const [collapseToOpen, setCollapseToOpen] = React.useState('');
|
|
37
37
|
const [liveText, setLiveText] = React.useState('');
|
|
38
|
-
const rulesEngine = createRulesEngine();
|
|
39
38
|
React.useEffect(()=>{
|
|
40
39
|
const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;
|
|
41
40
|
const hasNestedValue = value && Array.isArray(value) && value.length > 0;
|
|
@@ -96,9 +95,9 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
96
95
|
}, [
|
|
97
96
|
componentTmpKeyWithFocussedField
|
|
98
97
|
]);
|
|
99
|
-
const toggleCollapses = ()=>{
|
|
98
|
+
const toggleCollapses = React.useCallback(()=>{
|
|
100
99
|
setCollapseToOpen('');
|
|
101
|
-
};
|
|
100
|
+
}, []);
|
|
102
101
|
const handleClick = ()=>{
|
|
103
102
|
if (value.length < max) {
|
|
104
103
|
const schema = components[attribute.component];
|
|
@@ -115,46 +114,69 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
115
114
|
});
|
|
116
115
|
}
|
|
117
116
|
};
|
|
118
|
-
const handleMoveComponentField = (newIndex, currentIndex)=>{
|
|
117
|
+
const handleMoveComponentField = React.useCallback((newIndex, currentIndex)=>{
|
|
119
118
|
setLiveText(formatMessage({
|
|
120
119
|
id: getTranslation('dnd.reorder'),
|
|
121
120
|
defaultMessage: '{item}, moved. New position in list: {position}.'
|
|
122
121
|
}, {
|
|
123
122
|
item: `${name}.${currentIndex}`,
|
|
124
|
-
position:
|
|
123
|
+
position: `${newIndex + 1} of ${value.length}`
|
|
125
124
|
}));
|
|
126
125
|
moveFieldRow(name, currentIndex, newIndex);
|
|
127
|
-
}
|
|
126
|
+
}, [
|
|
127
|
+
formatMessage,
|
|
128
|
+
moveFieldRow,
|
|
129
|
+
name,
|
|
130
|
+
value.length
|
|
131
|
+
]);
|
|
128
132
|
const handleValueChange = (key)=>{
|
|
129
133
|
setCollapseToOpen(key);
|
|
130
134
|
};
|
|
131
|
-
const
|
|
132
|
-
const handleCancel = (index)=>{
|
|
135
|
+
const handleCancel = React.useCallback((index)=>{
|
|
133
136
|
setLiveText(formatMessage({
|
|
134
137
|
id: getTranslation('dnd.cancel-item'),
|
|
135
138
|
defaultMessage: '{item}, dropped. Re-order cancelled.'
|
|
136
139
|
}, {
|
|
137
140
|
item: `${name}.${index}`
|
|
138
141
|
}));
|
|
139
|
-
}
|
|
140
|
-
|
|
142
|
+
}, [
|
|
143
|
+
formatMessage,
|
|
144
|
+
name
|
|
145
|
+
]);
|
|
146
|
+
const handleGrabItem = React.useCallback((index)=>{
|
|
141
147
|
setLiveText(formatMessage({
|
|
142
148
|
id: getTranslation('dnd.grab-item'),
|
|
143
149
|
defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`
|
|
144
150
|
}, {
|
|
145
151
|
item: `${name}.${index}`,
|
|
146
|
-
position:
|
|
152
|
+
position: `${index + 1} of ${value.length}`
|
|
147
153
|
}));
|
|
148
|
-
}
|
|
149
|
-
|
|
154
|
+
}, [
|
|
155
|
+
formatMessage,
|
|
156
|
+
name,
|
|
157
|
+
value.length
|
|
158
|
+
]);
|
|
159
|
+
const handleDropItem = React.useCallback((index)=>{
|
|
150
160
|
setLiveText(formatMessage({
|
|
151
161
|
id: getTranslation('dnd.drop-item'),
|
|
152
162
|
defaultMessage: `{item}, dropped. Final position in list: {position}.`
|
|
153
163
|
}, {
|
|
154
164
|
item: `${name}.${index}`,
|
|
155
|
-
position:
|
|
165
|
+
position: `${index + 1} of ${value.length}`
|
|
156
166
|
}));
|
|
157
|
-
}
|
|
167
|
+
}, [
|
|
168
|
+
formatMessage,
|
|
169
|
+
name,
|
|
170
|
+
value.length
|
|
171
|
+
]);
|
|
172
|
+
const handleDeleteComponent = React.useCallback((index)=>{
|
|
173
|
+
removeFieldRow(name, index);
|
|
174
|
+
toggleCollapses();
|
|
175
|
+
}, [
|
|
176
|
+
name,
|
|
177
|
+
removeFieldRow,
|
|
178
|
+
toggleCollapses
|
|
179
|
+
]);
|
|
158
180
|
const ariaDescriptionId = React.useId();
|
|
159
181
|
const level = useComponent('RepeatableComponent', (state)=>state.level);
|
|
160
182
|
if (value.length === 0) {
|
|
@@ -184,7 +206,9 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
184
206
|
onValueChange: handleValueChange,
|
|
185
207
|
"aria-describedby": ariaDescriptionId,
|
|
186
208
|
children: [
|
|
187
|
-
value.map((
|
|
209
|
+
value.map((componentValue, index)=>{
|
|
210
|
+
const key = componentValue.__temp_key__;
|
|
211
|
+
const id = componentValue.id;
|
|
188
212
|
const nameWithIndex = `${name}.${index}`;
|
|
189
213
|
return /*#__PURE__*/ jsx(ComponentProvider, {
|
|
190
214
|
// id is always a number in a component
|
|
@@ -192,63 +216,22 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
192
216
|
uid: attribute.component,
|
|
193
217
|
level: level + 1,
|
|
194
218
|
type: "repeatable",
|
|
195
|
-
children: /*#__PURE__*/ jsx(
|
|
219
|
+
children: /*#__PURE__*/ jsx(MemoizedComponent, {
|
|
196
220
|
disabled: disabled,
|
|
197
221
|
name: nameWithIndex,
|
|
198
|
-
|
|
222
|
+
attributeComponent: attribute.component,
|
|
199
223
|
index: index,
|
|
200
224
|
mainField: mainField,
|
|
201
225
|
onMoveItem: handleMoveComponentField,
|
|
202
|
-
onDeleteComponent:
|
|
203
|
-
removeFieldRow(name, index);
|
|
204
|
-
toggleCollapses();
|
|
205
|
-
},
|
|
226
|
+
onDeleteComponent: handleDeleteComponent,
|
|
206
227
|
toggleCollapses: toggleCollapses,
|
|
207
228
|
onCancel: handleCancel,
|
|
208
229
|
onDropItem: handleDropItem,
|
|
209
230
|
onGrabItem: handleGrabItem,
|
|
210
231
|
__temp_key__: key,
|
|
211
232
|
totalLength: value.length,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const condition = field.attribute.conditions?.visible;
|
|
215
|
-
if (condition) {
|
|
216
|
-
return rulesEngine.evaluate(condition, currentComponentValues);
|
|
217
|
-
}
|
|
218
|
-
return true;
|
|
219
|
-
});
|
|
220
|
-
if (visibleFields.length === 0) {
|
|
221
|
-
return null; // Skip rendering the entire grid row
|
|
222
|
-
}
|
|
223
|
-
return /*#__PURE__*/ jsx(ResponsiveGridRoot, {
|
|
224
|
-
gap: 4,
|
|
225
|
-
children: visibleFields.map(({ size, ...field })=>{
|
|
226
|
-
/**
|
|
227
|
-
* Layouts are built from schemas so they don't understand the complete
|
|
228
|
-
* schema tree, for components we append the parent name to the field name
|
|
229
|
-
* because this is the structure for the data & permissions also understand
|
|
230
|
-
* the nesting involved.
|
|
231
|
-
*/ const completeFieldName = `${nameWithIndex}.${field.name}`;
|
|
232
|
-
const translatedLabel = formatMessage({
|
|
233
|
-
id: `content-manager.components.${attribute.component}.${field.name}`,
|
|
234
|
-
defaultMessage: field.label
|
|
235
|
-
});
|
|
236
|
-
return /*#__PURE__*/ jsx(ResponsiveGridItem, {
|
|
237
|
-
col: size,
|
|
238
|
-
s: 12,
|
|
239
|
-
xs: 12,
|
|
240
|
-
direction: "column",
|
|
241
|
-
alignItems: "stretch",
|
|
242
|
-
children: children({
|
|
243
|
-
...field,
|
|
244
|
-
label: translatedLabel,
|
|
245
|
-
name: completeFieldName,
|
|
246
|
-
document: currentDocument
|
|
247
|
-
})
|
|
248
|
-
}, completeFieldName);
|
|
249
|
-
})
|
|
250
|
-
}, index);
|
|
251
|
-
})
|
|
233
|
+
layout: layout,
|
|
234
|
+
renderField: children
|
|
252
235
|
})
|
|
253
236
|
}, key);
|
|
254
237
|
}),
|
|
@@ -296,10 +279,45 @@ const TextButtonCustom = styled(TextButton)`
|
|
|
296
279
|
transition: background-color 120ms ${(props)=>props.theme.motion.easings.easeOutQuad};
|
|
297
280
|
}
|
|
298
281
|
`;
|
|
299
|
-
const
|
|
282
|
+
const RepeatableComponentFields = /*#__PURE__*/ React.memo(({ attributeComponent, children, layout, nameWithIndex })=>{
|
|
283
|
+
const { formatMessage } = useIntl();
|
|
284
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
285
|
+
children: layout.map((row, index)=>{
|
|
286
|
+
return /*#__PURE__*/ jsx(ResponsiveGridRoot, {
|
|
287
|
+
gap: 4,
|
|
288
|
+
children: row.map(({ size, ...field })=>{
|
|
289
|
+
/**
|
|
290
|
+
* Layouts are built from schemas so they don't understand the complete
|
|
291
|
+
* schema tree, for components we append the parent name to the field name
|
|
292
|
+
* because this is the structure for the data & permissions also understand
|
|
293
|
+
* the nesting involved.
|
|
294
|
+
*/ const completeFieldName = `${nameWithIndex}.${field.name}`;
|
|
295
|
+
const translatedLabel = formatMessage({
|
|
296
|
+
id: `content-manager.components.${attributeComponent}.${field.name}`,
|
|
297
|
+
defaultMessage: field.label
|
|
298
|
+
});
|
|
299
|
+
return /*#__PURE__*/ jsx(ResponsiveGridItem, {
|
|
300
|
+
col: size,
|
|
301
|
+
s: 12,
|
|
302
|
+
xs: 12,
|
|
303
|
+
direction: "column",
|
|
304
|
+
alignItems: "stretch",
|
|
305
|
+
children: children({
|
|
306
|
+
...field,
|
|
307
|
+
label: translatedLabel,
|
|
308
|
+
name: completeFieldName
|
|
309
|
+
})
|
|
310
|
+
}, completeFieldName);
|
|
311
|
+
})
|
|
312
|
+
}, index);
|
|
313
|
+
})
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
RepeatableComponentFields.displayName = 'RepeatableComponentFields';
|
|
317
|
+
const Component = ({ attributeComponent, disabled, index, name, mainField = {
|
|
300
318
|
name: 'id',
|
|
301
319
|
type: 'integer'
|
|
302
|
-
},
|
|
320
|
+
}, layout, onDeleteComponent, renderField, toggleCollapses, __temp_key__, totalLength, onMoveItem, ...dragProps })=>{
|
|
303
321
|
const { formatMessage } = useIntl();
|
|
304
322
|
const isDesktop = useIsDesktop();
|
|
305
323
|
const displayValue = useForm('RepeatableComponent', (state)=>{
|
|
@@ -339,27 +357,11 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
339
357
|
]);
|
|
340
358
|
const composedAccordionRefs = useComposedRefs(accordionRef, dragRef);
|
|
341
359
|
const composedBoxRefs = useComposedRefs(boxRef, dropRef);
|
|
342
|
-
const handleMoveUp = React.useCallback((e)=>{
|
|
343
|
-
e.stopPropagation();
|
|
344
|
-
if (index > 0 && onMoveItem) {
|
|
345
|
-
onMoveItem(index - 1, index);
|
|
346
|
-
}
|
|
347
|
-
}, [
|
|
348
|
-
index,
|
|
349
|
-
onMoveItem
|
|
350
|
-
]);
|
|
351
|
-
const handleMoveDown = React.useCallback((e)=>{
|
|
352
|
-
e.stopPropagation();
|
|
353
|
-
if (index < totalLength - 1 && onMoveItem) {
|
|
354
|
-
onMoveItem(index + 1, index);
|
|
355
|
-
}
|
|
356
|
-
}, [
|
|
357
|
-
index,
|
|
358
|
-
totalLength,
|
|
359
|
-
onMoveItem
|
|
360
|
-
]);
|
|
361
360
|
const canMoveUp = index > 0;
|
|
362
361
|
const canMoveDown = index < totalLength - 1;
|
|
362
|
+
const handleDeleteClick = ()=>{
|
|
363
|
+
onDeleteComponent?.(index);
|
|
364
|
+
};
|
|
363
365
|
return /*#__PURE__*/ jsx(Fragment, {
|
|
364
366
|
children: isDragging ? /*#__PURE__*/ jsx(Preview, {}) : /*#__PURE__*/ jsxs(Accordion.Item, {
|
|
365
367
|
ref: composedBoxRefs,
|
|
@@ -375,7 +377,7 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
375
377
|
/*#__PURE__*/ jsx(IconButton, {
|
|
376
378
|
disabled: disabled,
|
|
377
379
|
variant: "ghost",
|
|
378
|
-
onClick:
|
|
380
|
+
onClick: handleDeleteClick,
|
|
379
381
|
label: formatMessage({
|
|
380
382
|
id: getTranslation('containers.Edit.delete'),
|
|
381
383
|
defaultMessage: 'Delete'
|
|
@@ -400,7 +402,12 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
400
402
|
canMoveUp && /*#__PURE__*/ jsx(IconButton, {
|
|
401
403
|
disabled: disabled || !canMoveUp,
|
|
402
404
|
variant: "ghost",
|
|
403
|
-
onClick:
|
|
405
|
+
onClick: (e)=>{
|
|
406
|
+
e.stopPropagation();
|
|
407
|
+
if (onMoveItem) {
|
|
408
|
+
onMoveItem(index - 1, index);
|
|
409
|
+
}
|
|
410
|
+
},
|
|
404
411
|
label: formatMessage({
|
|
405
412
|
id: getTranslation('components.DynamicZone.move-up'),
|
|
406
413
|
defaultMessage: 'Move up'
|
|
@@ -410,7 +417,12 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
410
417
|
canMoveDown && /*#__PURE__*/ jsx(IconButton, {
|
|
411
418
|
disabled: disabled || !canMoveDown,
|
|
412
419
|
variant: "ghost",
|
|
413
|
-
onClick:
|
|
420
|
+
onClick: (e)=>{
|
|
421
|
+
e.stopPropagation();
|
|
422
|
+
if (onMoveItem) {
|
|
423
|
+
onMoveItem(index + 1, index);
|
|
424
|
+
}
|
|
425
|
+
},
|
|
414
426
|
label: formatMessage({
|
|
415
427
|
id: getTranslation('components.DynamicZone.move-down'),
|
|
416
428
|
defaultMessage: 'Move down'
|
|
@@ -436,7 +448,12 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
436
448
|
initial: 3,
|
|
437
449
|
medium: 4
|
|
438
450
|
},
|
|
439
|
-
children:
|
|
451
|
+
children: /*#__PURE__*/ jsx(RepeatableComponentFields, {
|
|
452
|
+
attributeComponent: attributeComponent,
|
|
453
|
+
layout: layout,
|
|
454
|
+
nameWithIndex: name,
|
|
455
|
+
children: renderField
|
|
456
|
+
})
|
|
440
457
|
})
|
|
441
458
|
})
|
|
442
459
|
]
|
|
@@ -455,6 +472,8 @@ const StyledSpan = styled(Box)`
|
|
|
455
472
|
outline: 1px dashed ${({ theme })=>theme.colors.primary500};
|
|
456
473
|
outline-offset: -1px;
|
|
457
474
|
`;
|
|
475
|
+
const MemoizedComponent = /*#__PURE__*/ React.memo(Component);
|
|
476
|
+
const MemoizedRepeatableComponent = /*#__PURE__*/ React.memo(RepeatableComponent);
|
|
458
477
|
|
|
459
|
-
export { RepeatableComponent };
|
|
478
|
+
export { MemoizedRepeatableComponent as RepeatableComponent };
|
|
460
479
|
//# sourceMappingURL=Repeatable.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repeatable.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/Repeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useField,\n useNotification,\n useForm,\n createRulesEngine,\n useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n TextButton,\n VisuallyHidden,\n Accordion,\n IconButton,\n useComposedRefs,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Plus, Drag, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { useDragAndDrop, type UseDragAndDropOptions } from '../../../../../hooks/useDragAndDrop';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { Initializer } from './Initializer';\n\nimport type { ComponentInputProps } from './Input';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ntype RepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst RepeatableComponent = ({\n attribute,\n disabled,\n name,\n mainField,\n children,\n layout,\n}: RepeatableComponentProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const search = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { currentDocument } = useDocumentContext('RepeatableComponent');\n const components = currentDocument.components;\n\n const {\n value = [],\n error,\n rawError,\n } = useField<Schema.Attribute.ComponentValue<`${string}.${string}`, true>>(name);\n const addFieldRow = useForm('RepeatableComponent', (state) => state.addFieldRow);\n const moveFieldRow = useForm('RepeatableComponent', (state) => state.moveFieldRow);\n const removeFieldRow = useForm('RepeatableComponent', (state) => state.removeFieldRow);\n const { max = Infinity } = attribute;\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n const [liveText, setLiveText] = React.useState('');\n\n const rulesEngine = createRulesEngine();\n\n React.useEffect(() => {\n const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;\n const hasNestedValue = value && Array.isArray(value) && value.length > 0;\n\n if (hasNestedErrors && hasNestedValue) {\n const errorOpenItems = rawError\n .map((_: unknown, idx: number) => {\n return value[idx] ? value[idx].__temp_key__ : null;\n })\n .filter((value) => !!value);\n\n if (errorOpenItems && errorOpenItems.length > 0) {\n setCollapseToOpen((collapseToOpen) => {\n if (!errorOpenItems.includes(collapseToOpen)) {\n return errorOpenItems[0];\n }\n\n return collapseToOpen;\n });\n }\n }\n }, [rawError, value]);\n\n /**\n * Get the temp key of the component that has the field that is currently focussed\n * as defined by the `field` query param. We can then force this specific component\n * to be in its \"open\" state.\n */\n const componentTmpKeyWithFocussedField = React.useMemo(() => {\n if (search.has('field')) {\n const fieldParam = search.get('field');\n\n if (!fieldParam) {\n return undefined;\n }\n\n const [, path] = fieldParam.split(`${name}.`);\n\n if (getIn(value, path, undefined) !== undefined) {\n const [subpath] = path.split('.');\n\n return getIn(value, subpath, undefined)?.__temp_key__;\n }\n }\n\n return undefined;\n }, [search, name, value]);\n\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n /**\n * When we add a new item to the array, we want to open the collapse.\n */\n if (prevValue && prevValue.length < value.length) {\n setCollapseToOpen(value[value.length - 1].__temp_key__);\n }\n }, [value, prevValue]);\n\n React.useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'string') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const toggleCollapses = () => {\n setCollapseToOpen('');\n };\n\n const handleClick = () => {\n if (value.length < max) {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n addFieldRow(name, data);\n // setCollapseToOpen(nextTempKey);\n } else if (value.length >= max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponentField: ComponentProps['onMoveItem'] = (newIndex, currentIndex) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n };\n\n const handleValueChange = (key: string) => {\n setCollapseToOpen(key);\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${value.length}`;\n\n const handleCancel = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n };\n\n const handleGrabItem = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const ariaDescriptionId = React.useId();\n\n const level = useComponent('RepeatableComponent', (state) => state.level);\n\n if (value.length === 0) {\n return <Initializer disabled={disabled} name={name} onClick={handleClick} />;\n }\n\n return (\n <Box hasRadius>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <AccordionRoot\n $error={error}\n value={collapseToOpen}\n onValueChange={handleValueChange}\n aria-describedby={ariaDescriptionId}\n >\n {value.map(({ __temp_key__: key, id, ...currentComponentValues }, index) => {\n const nameWithIndex = `${name}.${index}`;\n\n return (\n <ComponentProvider\n key={key}\n // id is always a number in a component\n id={id as number}\n uid={attribute.component}\n level={level + 1}\n type=\"repeatable\"\n >\n <Component\n disabled={disabled}\n name={nameWithIndex}\n attribute={attribute}\n index={index}\n mainField={mainField}\n onMoveItem={handleMoveComponentField}\n onDeleteComponent={() => {\n removeFieldRow(name, index);\n toggleCollapses();\n }}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n __temp_key__={key}\n totalLength={value.length}\n >\n {layout.map((row, index) => {\n const visibleFields = row.filter(({ ...field }) => {\n const condition = field.attribute.conditions?.visible;\n if (condition) {\n return rulesEngine.evaluate(condition, currentComponentValues);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {visibleFields.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${nameWithIndex}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n label: translatedLabel,\n name: completeFieldName,\n document: currentDocument,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Component>\n </ComponentProvider>\n );\n })}\n <TextButtonCustom disabled={disabled} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTranslation('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n </AccordionRoot>\n </Box>\n );\n};\n\nconst AccordionRoot = styled(Accordion.Root)<{ $error?: string }>`\n border: 1px solid\n ${({ theme, $error }) => ($error ? theme.colors.danger600 : theme.colors.neutral200)};\n`;\n\nconst TextButtonCustom = styled(TextButton)`\n width: 100%;\n display: flex;\n justify-content: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n padding-inline: ${(props) => props.theme.spaces[6]};\n padding-block: ${(props) => props.theme.spaces[3]};\n\n &:not([disabled]) {\n cursor: pointer;\n\n &:hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n }\n\n span {\n font-weight: 600;\n font-size: 1.4rem;\n line-height: 2.4rem;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel' | 'onMoveItem'>,\n Pick<RepeatableComponentProps, 'mainField'> {\n attribute: Schema.Attribute.Component<`${string}.${string}`, boolean>;\n disabled?: boolean;\n index: number;\n name: string;\n onDeleteComponent?: React.MouseEventHandler<HTMLButtonElement>;\n toggleCollapses: () => void;\n children: React.ReactNode;\n __temp_key__: string;\n totalLength: number;\n}\n\nconst Component = ({\n disabled,\n index,\n name,\n mainField = {\n name: 'id',\n type: 'integer',\n },\n children,\n onDeleteComponent,\n toggleCollapses,\n __temp_key__,\n totalLength,\n onMoveItem,\n ...dragProps\n}: ComponentProps) => {\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n const displayValue = useForm('RepeatableComponent', (state) => {\n return getIn(state.values, [...name.split('.'), mainField.name]);\n });\n\n const accordionRef = React.useRef<HTMLButtonElement>(null!);\n\n /**\n * The last item in the fieldName array will be the index of this component.\n * Drag and drop should be isolated to the parent component so nested repeatable\n * components are not affected by the drag and drop of the parent component in\n * their own re-ordering context.\n */\n const componentKey = name.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n index,\n displayedValue: displayValue,\n },\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n onMoveItem,\n ...dragProps,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = useComposedRefs<HTMLButtonElement>(accordionRef, dragRef);\n const composedBoxRefs = useComposedRefs<HTMLDivElement>(\n boxRef as React.RefObject<HTMLDivElement>,\n dropRef\n );\n\n const handleMoveUp = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (index > 0 && onMoveItem) {\n onMoveItem(index - 1, index);\n }\n },\n [index, onMoveItem]\n );\n\n const handleMoveDown = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (index < totalLength - 1 && onMoveItem) {\n onMoveItem(index + 1, index);\n }\n },\n [index, totalLength, onMoveItem]\n );\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n\n return (\n <>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Item ref={composedBoxRefs} value={__temp_key__}>\n <Accordion.Header>\n <Accordion.Trigger>{displayValue}</Accordion.Trigger>\n <Accordion.Actions>\n <IconButton\n disabled={disabled}\n variant=\"ghost\"\n onClick={onDeleteComponent}\n label={formatMessage({\n id: getTranslation('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n disabled={disabled}\n ref={composedAccordionRefs}\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n disabled={disabled || !canMoveUp}\n variant=\"ghost\"\n onClick={handleMoveUp}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n disabled={disabled || !canMoveDown}\n variant=\"ghost\"\n onClick={handleMoveDown}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={{ initial: 4, medium: 6 }}\n gap={{ initial: 3, medium: 4 }}\n >\n {children}\n </Flex>\n </Accordion.Content>\n </Accordion.Item>\n )}\n </>\n );\n};\n\nconst Preview = () => {\n return <StyledSpan tag=\"span\" padding={6} background=\"primary100\" />;\n};\n\nconst StyledSpan = styled<BoxComponent<'span'>>(Box)`\n display: block;\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n`;\n\nexport { RepeatableComponent };\nexport type { RepeatableComponentProps };\n"],"names":["RepeatableComponent","attribute","disabled","name","mainField","children","layout","toggleNotification","useNotification","formatMessage","useIntl","search","searchString","useLocation","React","useMemo","URLSearchParams","currentDocument","useDocumentContext","components","value","error","rawError","useField","addFieldRow","useForm","state","moveFieldRow","removeFieldRow","max","Infinity","collapseToOpen","setCollapseToOpen","useState","liveText","setLiveText","rulesEngine","createRulesEngine","useEffect","hasNestedErrors","Array","isArray","length","hasNestedValue","errorOpenItems","map","_","idx","__temp_key__","filter","includes","componentTmpKeyWithFocussedField","has","fieldParam","get","undefined","path","split","getIn","subpath","prevValue","usePrev","toggleCollapses","handleClick","schema","component","form","createDefaultForm","data","transformDocument","type","message","id","getTranslation","handleMoveComponentField","newIndex","currentIndex","defaultMessage","item","position","getItemPos","handleValueChange","key","index","handleCancel","handleGrabItem","handleDropItem","ariaDescriptionId","useId","level","useComponent","_jsx","Initializer","onClick","_jsxs","Box","hasRadius","VisuallyHidden","aria-live","AccordionRoot","$error","onValueChange","aria-describedby","currentComponentValues","nameWithIndex","ComponentProvider","uid","Component","onMoveItem","onDeleteComponent","onCancel","onDropItem","onGrabItem","totalLength","row","visibleFields","field","condition","conditions","visible","evaluate","ResponsiveGridRoot","gap","size","completeFieldName","translatedLabel","label","ResponsiveGridItem","col","s","xs","direction","alignItems","document","TextButtonCustom","startIcon","Plus","styled","Accordion","Root","theme","colors","danger600","neutral200","TextButton","props","spaces","primary100","motion","easings","easeOutQuad","dragProps","isDesktop","useIsDesktop","displayValue","values","accordionRef","useRef","componentKey","slice","join","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","COMPONENT","displayedValue","onStart","getEmptyImage","captureDraggingState","composedAccordionRefs","useComposedRefs","composedBoxRefs","handleMoveUp","useCallback","e","stopPropagation","handleMoveDown","canMoveUp","canMoveDown","_Fragment","Preview","Item","ref","Header","Trigger","Actions","IconButton","variant","Trash","data-handler-id","onKeyDown","Drag","ArrowUp","ArrowDown","Content","Flex","background","padding","initial","medium","StyledSpan","tag","primary500"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+CA,MAAMA,mBAAAA,GAAsB,CAAC,EAC3BC,SAAS,EACTC,QAAQ,EACRC,IAAI,EACJC,SAAS,EACTC,QAAQ,EACRC,MAAM,EACmB,GAAA;IACzB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,MAAAA,EAAQC,YAAY,EAAE,GAAGC,WAAAA,EAAAA;AACjC,IAAA,MAAMF,SAASG,KAAAA,CAAMC,OAAO,CAAC,IAAM,IAAIC,gBAAgBJ,YAAAA,CAAAA,EAAe;AAACA,QAAAA;AAAa,KAAA,CAAA;AACpF,IAAA,MAAM,EAAEK,eAAe,EAAE,GAAGC,kBAAAA,CAAmB,qBAAA,CAAA;IAC/C,MAAMC,UAAAA,GAAaF,gBAAgBE,UAAU;IAE7C,MAAM,EACJC,QAAQ,EAAE,EACVC,KAAK,EACLC,QAAQ,EACT,GAAGC,QAAAA,CAAuEpB,IAAAA,CAAAA;AAC3E,IAAA,MAAMqB,cAAcC,OAAAA,CAAQ,qBAAA,EAAuB,CAACC,KAAAA,GAAUA,MAAMF,WAAW,CAAA;AAC/E,IAAA,MAAMG,eAAeF,OAAAA,CAAQ,qBAAA,EAAuB,CAACC,KAAAA,GAAUA,MAAMC,YAAY,CAAA;AACjF,IAAA,MAAMC,iBAAiBH,OAAAA,CAAQ,qBAAA,EAAuB,CAACC,KAAAA,GAAUA,MAAME,cAAc,CAAA;AACrF,IAAA,MAAM,EAAEC,GAAAA,GAAMC,QAAQ,EAAE,GAAG7B,SAAAA;AAE3B,IAAA,MAAM,CAAC8B,cAAAA,EAAgBC,iBAAAA,CAAkB,GAAGlB,KAAAA,CAAMmB,QAAQ,CAAS,EAAA,CAAA;AACnE,IAAA,MAAM,CAACC,QAAAA,EAAUC,WAAAA,CAAY,GAAGrB,KAAAA,CAAMmB,QAAQ,CAAC,EAAA,CAAA;AAE/C,IAAA,MAAMG,WAAAA,GAAcC,iBAAAA,EAAAA;AAEpBvB,IAAAA,KAAAA,CAAMwB,SAAS,CAAC,IAAA;QACd,MAAMC,eAAAA,GAAkBjB,YAAYkB,KAAAA,CAAMC,OAAO,CAACnB,QAAAA,CAAAA,IAAaA,QAAAA,CAASoB,MAAM,GAAG,CAAA;QACjF,MAAMC,cAAAA,GAAiBvB,SAASoB,KAAAA,CAAMC,OAAO,CAACrB,KAAAA,CAAAA,IAAUA,KAAAA,CAAMsB,MAAM,GAAG,CAAA;AAEvE,QAAA,IAAIH,mBAAmBI,cAAAA,EAAgB;AACrC,YAAA,MAAMC,cAAAA,GAAiBtB,QAAAA,CACpBuB,GAAG,CAAC,CAACC,CAAAA,EAAYC,GAAAA,GAAAA;gBAChB,OAAO3B,KAAK,CAAC2B,GAAAA,CAAI,GAAG3B,KAAK,CAAC2B,GAAAA,CAAI,CAACC,YAAY,GAAG,IAAA;AAChD,YAAA,CAAA,CAAA,CACCC,MAAM,CAAC,CAAC7B,KAAAA,GAAU,CAAC,CAACA,KAAAA,CAAAA;AAEvB,YAAA,IAAIwB,cAAAA,IAAkBA,cAAAA,CAAeF,MAAM,GAAG,CAAA,EAAG;AAC/CV,gBAAAA,iBAAAA,CAAkB,CAACD,cAAAA,GAAAA;AACjB,oBAAA,IAAI,CAACa,cAAAA,CAAeM,QAAQ,CAACnB,cAAAA,CAAAA,EAAiB;wBAC5C,OAAOa,cAAc,CAAC,CAAA,CAAE;AAC1B,oBAAA;oBAEA,OAAOb,cAAAA;AACT,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACT,QAAAA,QAAAA;AAAUF,QAAAA;AAAM,KAAA,CAAA;AAEpB;;;;AAIC,MACD,MAAM+B,gCAAAA,GAAmCrC,KAAAA,CAAMC,OAAO,CAAC,IAAA;QACrD,IAAIJ,MAAAA,CAAOyC,GAAG,CAAC,OAAA,CAAA,EAAU;YACvB,MAAMC,UAAAA,GAAa1C,MAAAA,CAAO2C,GAAG,CAAC,OAAA,CAAA;AAE9B,YAAA,IAAI,CAACD,UAAAA,EAAY;gBACf,OAAOE,SAAAA;AACT,YAAA;YAEA,MAAM,GAAGC,KAAK,GAAGH,UAAAA,CAAWI,KAAK,CAAC,CAAA,EAAGtD,IAAAA,CAAK,CAAC,CAAC,CAAA;AAE5C,YAAA,IAAIuD,KAAAA,CAAMtC,KAAAA,EAAOoC,IAAAA,EAAMD,SAAAA,CAAAA,KAAeA,SAAAA,EAAW;AAC/C,gBAAA,MAAM,CAACI,OAAAA,CAAQ,GAAGH,IAAAA,CAAKC,KAAK,CAAC,GAAA,CAAA;gBAE7B,OAAOC,KAAAA,CAAMtC,KAAAA,EAAOuC,OAAAA,EAASJ,SAAAA,CAAAA,EAAYP,YAAAA;AAC3C,YAAA;AACF,QAAA;QAEA,OAAOO,SAAAA;IACT,CAAA,EAAG;AAAC5C,QAAAA,MAAAA;AAAQR,QAAAA,IAAAA;AAAMiB,QAAAA;AAAM,KAAA,CAAA;AAExB,IAAA,MAAMwC,YAAYC,OAAAA,CAAQzC,KAAAA,CAAAA;AAE1BN,IAAAA,KAAAA,CAAMwB,SAAS,CAAC,IAAA;AACd;;AAEC,QACD,IAAIsB,SAAAA,IAAaA,SAAAA,CAAUlB,MAAM,GAAGtB,KAAAA,CAAMsB,MAAM,EAAE;AAChDV,YAAAA,iBAAAA,CAAkBZ,KAAK,CAACA,KAAAA,CAAMsB,MAAM,GAAG,CAAA,CAAE,CAACM,YAAY,CAAA;AACxD,QAAA;IACF,CAAA,EAAG;AAAC5B,QAAAA,KAAAA;AAAOwC,QAAAA;AAAU,KAAA,CAAA;AAErB9C,IAAAA,KAAAA,CAAMwB,SAAS,CAAC,IAAA;QACd,IAAI,OAAOa,qCAAqC,QAAA,EAAU;YACxDnB,iBAAAA,CAAkBmB,gCAAAA,CAAAA;AACpB,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAiC,KAAA,CAAA;AAErC,IAAA,MAAMW,eAAAA,GAAkB,IAAA;QACtB9B,iBAAAA,CAAkB,EAAA,CAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAM+B,WAAAA,GAAc,IAAA;QAClB,IAAI3C,KAAAA,CAAMsB,MAAM,GAAGb,GAAAA,EAAK;AACtB,YAAA,MAAMmC,MAAAA,GAAS7C,UAAU,CAAClB,SAAAA,CAAUgE,SAAS,CAAC;YAC9C,MAAMC,IAAAA,GAAOC,kBAAkBH,MAAAA,EAAQ7C,UAAAA,CAAAA;YACvC,MAAMiD,IAAAA,GAAOC,iBAAAA,CAAkBL,MAAAA,EAAQ7C,UAAAA,CAAAA,CAAY+C,IAAAA,CAAAA;AAEnD1C,YAAAA,WAAAA,CAAYrB,IAAAA,EAAMiE,IAAAA,CAAAA;;AAEpB,QAAA,CAAA,MAAO,IAAIhD,KAAAA,CAAMsB,MAAM,IAAIb,GAAAA,EAAK;YAC9BtB,kBAAAA,CAAmB;gBACjB+D,IAAAA,EAAM,MAAA;AACNC,gBAAAA,OAAAA,EAAS9D,aAAAA,CAAc;AACrB+D,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,kDAAA;AACrB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,MAAMC,wBAAAA,GAAyD,CAACC,QAAAA,EAAUC,YAAAA,GAAAA;AACxEzC,QAAAA,WAAAA,CACE1B,aAAAA,CACE;AACE+D,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;YACnBI,cAAAA,EAAgB;SAClB,EACA;AACEC,YAAAA,IAAAA,EAAM,CAAA,EAAG3E,IAAAA,CAAK,CAAC,EAAEyE,YAAAA,CAAAA,CAAc;AAC/BG,YAAAA,QAAAA,EAAUC,UAAAA,CAAWL,QAAAA;AACvB,SAAA,CAAA,CAAA;AAIJhD,QAAAA,YAAAA,CAAaxB,MAAMyE,YAAAA,EAAcD,QAAAA,CAAAA;AACnC,IAAA,CAAA;AAEA,IAAA,MAAMM,oBAAoB,CAACC,GAAAA,GAAAA;QACzBlD,iBAAAA,CAAkBkD,GAAAA,CAAAA;AACpB,IAAA,CAAA;IAEA,MAAMF,UAAAA,GAAa,CAACG,KAAAA,GAAkB,CAAA,EAAGA,KAAAA,GAAQ,EAAE,IAAI,EAAE/D,KAAAA,CAAMsB,MAAM,CAAA,CAAE;AAEvE,IAAA,MAAM0C,eAAe,CAACD,KAAAA,GAAAA;AACpBhD,QAAAA,WAAAA,CACE1B,aAAAA,CACE;AACE+D,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,iBAAA,CAAA;YACnBI,cAAAA,EAAgB;SAClB,EACA;AACEC,YAAAA,IAAAA,EAAM,CAAA,EAAG3E,IAAAA,CAAK,CAAC,EAAEgF,KAAAA,CAAAA;AACnB,SAAA,CAAA,CAAA;AAGN,IAAA,CAAA;AAEA,IAAA,MAAME,iBAAiB,CAACF,KAAAA,GAAAA;AACtBhD,QAAAA,WAAAA,CACE1B,aAAAA,CACE;AACE+D,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,eAAA,CAAA;YACnBI,cAAAA,EAAgB,CAAC,sIAAsI;SACzJ,EACA;AACEC,YAAAA,IAAAA,EAAM,CAAA,EAAG3E,IAAAA,CAAK,CAAC,EAAEgF,KAAAA,CAAAA,CAAO;AACxBJ,YAAAA,QAAAA,EAAUC,UAAAA,CAAWG,KAAAA;AACvB,SAAA,CAAA,CAAA;AAGN,IAAA,CAAA;AAEA,IAAA,MAAMG,iBAAiB,CAACH,KAAAA,GAAAA;AACtBhD,QAAAA,WAAAA,CACE1B,aAAAA,CACE;AACE+D,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,eAAA,CAAA;YACnBI,cAAAA,EAAgB,CAAC,oDAAoD;SACvE,EACA;AACEC,YAAAA,IAAAA,EAAM,CAAA,EAAG3E,IAAAA,CAAK,CAAC,EAAEgF,KAAAA,CAAAA,CAAO;AACxBJ,YAAAA,QAAAA,EAAUC,UAAAA,CAAWG,KAAAA;AACvB,SAAA,CAAA,CAAA;AAGN,IAAA,CAAA;IAEA,MAAMI,iBAAAA,GAAoBzE,MAAM0E,KAAK,EAAA;AAErC,IAAA,MAAMC,QAAQC,YAAAA,CAAa,qBAAA,EAAuB,CAAChE,KAAAA,GAAUA,MAAM+D,KAAK,CAAA;IAExE,IAAIrE,KAAAA,CAAMsB,MAAM,KAAK,CAAA,EAAG;AACtB,QAAA,qBAAOiD,GAAA,CAACC,WAAAA,EAAAA;YAAY1F,QAAAA,EAAUA,QAAAA;YAAUC,IAAAA,EAAMA,IAAAA;YAAM0F,OAAAA,EAAS9B;;AAC/D,IAAA;AAEA,IAAA,qBACE+B,IAAA,CAACC,GAAAA,EAAAA;QAAIC,SAAS,EAAA,IAAA;;0BACZL,GAAA,CAACM,cAAAA,EAAAA;gBAAezB,EAAAA,EAAIe,iBAAAA;0BACjB9E,aAAAA,CAAc;AACb+D,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,kBAAA,CAAA;oBACnBI,cAAAA,EAAgB,CAAC,mCAAmC;AACtD,iBAAA;;0BAEFc,GAAA,CAACM,cAAAA,EAAAA;gBAAeC,WAAAA,EAAU,WAAA;AAAahE,gBAAAA,QAAAA,EAAAA;;0BACvC4D,IAAA,CAACK,aAAAA,EAAAA;gBACCC,MAAAA,EAAQ/E,KAAAA;gBACRD,KAAAA,EAAOW,cAAAA;gBACPsE,aAAAA,EAAepB,iBAAAA;gBACfqB,kBAAAA,EAAkBf,iBAAAA;;oBAEjBnE,KAAAA,CAAMyB,GAAG,CAAC,CAAC,EAAEG,YAAAA,EAAckC,GAAG,EAAEV,EAAE,EAAE,GAAG+B,sBAAAA,EAAwB,EAAEpB,KAAAA,GAAAA;AAChE,wBAAA,MAAMqB,aAAAA,GAAgB,CAAA,EAAGrG,IAAAA,CAAK,CAAC,EAAEgF,KAAAA,CAAAA,CAAO;AAExC,wBAAA,qBACEQ,GAAA,CAACc,iBAAAA,EAAAA;;4BAGCjC,EAAAA,EAAIA,EAAAA;AACJkC,4BAAAA,GAAAA,EAAKzG,UAAUgE,SAAS;AACxBwB,4BAAAA,KAAAA,EAAOA,KAAAA,GAAQ,CAAA;4BACfnB,IAAAA,EAAK,YAAA;AAEL,4BAAA,QAAA,gBAAAqB,GAAA,CAACgB,SAAAA,EAAAA;gCACCzG,QAAAA,EAAUA,QAAAA;gCACVC,IAAAA,EAAMqG,aAAAA;gCACNvG,SAAAA,EAAWA,SAAAA;gCACXkF,KAAAA,EAAOA,KAAAA;gCACP/E,SAAAA,EAAWA,SAAAA;gCACXwG,UAAAA,EAAYlC,wBAAAA;gCACZmC,iBAAAA,EAAmB,IAAA;AACjBjF,oCAAAA,cAAAA,CAAezB,IAAAA,EAAMgF,KAAAA,CAAAA;AACrBrB,oCAAAA,eAAAA,EAAAA;AACF,gCAAA,CAAA;gCACAA,eAAAA,EAAiBA,eAAAA;gCACjBgD,QAAAA,EAAU1B,YAAAA;gCACV2B,UAAAA,EAAYzB,cAAAA;gCACZ0B,UAAAA,EAAY3B,cAAAA;gCACZrC,YAAAA,EAAckC,GAAAA;AACd+B,gCAAAA,WAAAA,EAAa7F,MAAMsB,MAAM;0CAExBpC,MAAAA,CAAOuC,GAAG,CAAC,CAACqE,GAAAA,EAAK/B,KAAAA,GAAAA;AAChB,oCAAA,MAAMgC,gBAAgBD,GAAAA,CAAIjE,MAAM,CAAC,CAAC,EAAE,GAAGmE,KAAAA,EAAO,GAAA;AAC5C,wCAAA,MAAMC,SAAAA,GAAYD,KAAAA,CAAMnH,SAAS,CAACqH,UAAU,EAAEC,OAAAA;AAC9C,wCAAA,IAAIF,SAAAA,EAAW;4CACb,OAAOjF,WAAAA,CAAYoF,QAAQ,CAACH,SAAAA,EAAWd,sBAAAA,CAAAA;AACzC,wCAAA;wCAEA,OAAO,IAAA;AACT,oCAAA,CAAA,CAAA;oCAEA,IAAIY,aAAAA,CAAczE,MAAM,KAAK,CAAA,EAAG;AAC9B,wCAAA,OAAO;AACT,oCAAA;AACA,oCAAA,qBACEiD,GAAA,CAAC8B,kBAAAA,EAAAA;wCAAmBC,GAAAA,EAAK,CAAA;AACtBP,wCAAAA,QAAAA,EAAAA,aAAAA,CAActE,GAAG,CAAC,CAAC,EAAE8E,IAAI,EAAE,GAAGP,KAAAA,EAAO,GAAA;AACpC;;;;;4BAMA,MAAMQ,oBAAoB,CAAA,EAAGpB,aAAAA,CAAc,CAAC,EAAEY,KAAAA,CAAMjH,IAAI,CAAA,CAAE;AAE1D,4CAAA,MAAM0H,kBAAkBpH,aAAAA,CAAc;gDACpC+D,EAAAA,EAAI,CAAC,2BAA2B,EAAEvE,SAAAA,CAAUgE,SAAS,CAAC,CAAC,EAAEmD,KAAAA,CAAMjH,IAAI,CAAA,CAAE;AACrE0E,gDAAAA,cAAAA,EAAgBuC,MAAMU;AACxB,6CAAA,CAAA;AAEA,4CAAA,qBACEnC,GAAA,CAACoC,kBAAAA,EAAAA;gDACCC,GAAAA,EAAKL,IAAAA;gDAELM,CAAAA,EAAG,EAAA;gDACHC,EAAAA,EAAI,EAAA;gDACJC,SAAAA,EAAU,QAAA;gDACVC,UAAAA,EAAW,SAAA;0DAEV/H,QAAAA,CAAS;AACR,oDAAA,GAAG+G,KAAK;oDACRU,KAAAA,EAAOD,eAAAA;oDACP1H,IAAAA,EAAMyH,iBAAAA;oDACNS,QAAAA,EAAUpH;AACZ,iDAAA;AAXK2G,6CAAAA,EAAAA,iBAAAA,CAAAA;AAcX,wCAAA,CAAA;AAhC+BzC,qCAAAA,EAAAA,KAAAA,CAAAA;AAmCrC,gCAAA,CAAA;;AA1EGD,yBAAAA,EAAAA,GAAAA,CAAAA;AA8EX,oBAAA,CAAA,CAAA;kCACAS,GAAA,CAAC2C,gBAAAA,EAAAA;wBAAiBpI,QAAAA,EAAUA,QAAAA;wBAAU2F,OAAAA,EAAS9B,WAAAA;AAAawE,wBAAAA,SAAAA,gBAAW5C,GAAA,CAAC6C,IAAAA,EAAAA,EAAAA,CAAAA;kCACrE/H,aAAAA,CAAc;AACb+D,4BAAAA,EAAAA,EAAIC,cAAAA,CAAe,mCAAA,CAAA;4BACnBI,cAAAA,EAAgB;AAClB,yBAAA;;;;;;AAKV;AAEA,MAAMsB,aAAAA,GAAgBsC,MAAAA,CAAOC,SAAAA,CAAUC,IAAI,CAAsB;;AAE7D,IAAA,EAAE,CAAC,EAAEC,KAAK,EAAExC,MAAM,EAAE,GAAMA,MAAAA,GAASwC,KAAAA,CAAMC,MAAM,CAACC,SAAS,GAAGF,MAAMC,MAAM,CAACE,UAAU,CAAE;AACzF,CAAC;AAED,MAAMT,gBAAAA,GAAmBG,MAAAA,CAAOO,UAAAA,CAAW;;;;wBAInB,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,UAAU,CAAC;kBAC/C,EAAE,CAACE,QAAUA,KAAAA,CAAML,KAAK,CAACM,MAAM,CAAC,EAAE,CAAC;iBACpC,EAAE,CAACD,QAAUA,KAAAA,CAAML,KAAK,CAACM,MAAM,CAAC,EAAE,CAAC;;;;;;wBAM5B,EAAE,CAACD,QAAUA,KAAAA,CAAML,KAAK,CAACC,MAAM,CAACM,UAAU,CAAC;;;;;;;;;;;uCAW5B,EAAE,CAACF,KAAAA,GAAUA,KAAAA,CAAML,KAAK,CAACQ,MAAM,CAACC,OAAO,CAACC,WAAW,CAAC;;AAE3F,CAAC;AAoBD,MAAM3C,SAAAA,GAAY,CAAC,EACjBzG,QAAQ,EACRiF,KAAK,EACLhF,IAAI,EACJC,SAAAA,GAAY;IACVD,IAAAA,EAAM,IAAA;IACNmE,IAAAA,EAAM;AACR,CAAC,EACDjE,QAAQ,EACRwG,iBAAiB,EACjB/C,eAAe,EACfd,YAAY,EACZiE,WAAW,EACXL,UAAU,EACV,GAAG2C,SAAAA,EACY,GAAA;IACf,MAAM,EAAE9I,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM8I,SAAAA,GAAYC,YAAAA,EAAAA;IAElB,MAAMC,YAAAA,GAAejI,OAAAA,CAAQ,qBAAA,EAAuB,CAACC,KAAAA,GAAAA;QACnD,OAAOgC,KAAAA,CAAMhC,KAAAA,CAAMiI,MAAM,EAAE;AAAIxJ,YAAAA,GAAAA,IAAAA,CAAKsD,KAAK,CAAC,GAAA,CAAA;AAAMrD,YAAAA,SAAAA,CAAUD;AAAK,SAAA,CAAA;AACjE,IAAA,CAAA,CAAA;IAEA,MAAMyJ,YAAAA,GAAe9I,KAAAA,CAAM+I,MAAM,CAAoB,IAAA,CAAA;AAErD;;;;;AAKC,MACD,MAAMC,YAAAA,GAAe3J,IAAAA,CAAKsD,KAAK,CAAC,GAAA,CAAA,CAAKsG,KAAK,CAAC,CAAA,EAAG,EAAC,CAAA,CAAGC,IAAI,CAAC,GAAA,CAAA;AAEvD,IAAA,MAAM,CAAC,EAAEC,SAAS,EAAEC,UAAU,EAAEC,aAAa,EAAE,EAAEC,MAAAA,EAAQC,SAASC,OAAAA,EAASC,cAAAA,CAAe,GACxFC,cAAAA,CAAe,CAACtK,QAAAA,EAAU;AACxBoE,QAAAA,IAAAA,EAAM,GAAGmG,SAAAA,CAAUC,SAAS,CAAC,CAAC,EAAEZ,YAAAA,CAAAA,CAAc;AAC9C3E,QAAAA,KAAAA;QACAL,IAAAA,EAAM;AACJK,YAAAA,KAAAA;YACAwF,cAAAA,EAAgBjB;AAClB,SAAA;AACAkB,QAAAA,OAAAA,CAAAA,GAAAA;;AAEE9G,YAAAA,eAAAA,EAAAA;AACF,QAAA,CAAA;AACA8C,QAAAA,UAAAA;AACA,QAAA,GAAG2C;AACL,KAAA,CAAA;AAEFzI,IAAAA,KAAAA,CAAMwB,SAAS,CAAC,IAAA;AACdiI,QAAAA,cAAAA,CAAeM,aAAAA,EAAAA,EAAiB;YAAEC,oBAAAA,EAAsB;AAAM,SAAA,CAAA;IAChE,CAAA,EAAG;AAACP,QAAAA,cAAAA;AAAgBpF,QAAAA;AAAM,KAAA,CAAA;IAE1B,MAAM4F,qBAAAA,GAAwBC,gBAAmCpB,YAAAA,EAAcU,OAAAA,CAAAA;IAC/E,MAAMW,eAAAA,GAAkBD,gBACtBZ,MAAAA,EACAC,OAAAA,CAAAA;AAGF,IAAA,MAAMa,YAAAA,GAAepK,KAAAA,CAAMqK,WAAW,CACpC,CAACC,CAAAA,GAAAA;AACCA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;QACjB,IAAIlG,KAAAA,GAAQ,KAAKyB,UAAAA,EAAY;AAC3BA,YAAAA,UAAAA,CAAWzB,QAAQ,CAAA,EAAGA,KAAAA,CAAAA;AACxB,QAAA;IACF,CAAA,EACA;AAACA,QAAAA,KAAAA;AAAOyB,QAAAA;AAAW,KAAA,CAAA;AAGrB,IAAA,MAAM0E,cAAAA,GAAiBxK,KAAAA,CAAMqK,WAAW,CACtC,CAACC,CAAAA,GAAAA;AACCA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;QACjB,IAAIlG,KAAAA,GAAQ8B,WAAAA,GAAc,CAAA,IAAKL,UAAAA,EAAY;AACzCA,YAAAA,UAAAA,CAAWzB,QAAQ,CAAA,EAAGA,KAAAA,CAAAA;AACxB,QAAA;IACF,CAAA,EACA;AAACA,QAAAA,KAAAA;AAAO8B,QAAAA,WAAAA;AAAaL,QAAAA;AAAW,KAAA,CAAA;AAGlC,IAAA,MAAM2E,YAAYpG,KAAAA,GAAQ,CAAA;IAC1B,MAAMqG,WAAAA,GAAcrG,QAAQ8B,WAAAA,GAAc,CAAA;IAE1C,qBACEtB,GAAA,CAAA8F,QAAA,EAAA;AACGvB,QAAAA,QAAAA,EAAAA,UAAAA,iBACCvE,GAAA,CAAC+F,OAAAA,EAAAA,EAAAA,CAAAA,iBAED5F,IAAA,CAAC4C,SAAAA,CAAUiD,IAAI,EAAA;YAACC,GAAAA,EAAKX,eAAAA;YAAiB7J,KAAAA,EAAO4B,YAAAA;;AAC3C,8BAAA8C,IAAA,CAAC4C,UAAUmD,MAAM,EAAA;;AACf,sCAAAlG,GAAA,CAAC+C,UAAUoD,OAAO,EAAA;AAAEpC,4BAAAA,QAAAA,EAAAA;;AACpB,sCAAA5D,IAAA,CAAC4C,UAAUqD,OAAO,EAAA;;8CAChBpG,GAAA,CAACqG,UAAAA,EAAAA;oCACC9L,QAAAA,EAAUA,QAAAA;oCACV+L,OAAAA,EAAQ,OAAA;oCACRpG,OAAAA,EAASgB,iBAAAA;AACTiB,oCAAAA,KAAAA,EAAOrH,aAAAA,CAAc;AACnB+D,wCAAAA,EAAAA,EAAIC,cAAAA,CAAe,wBAAA,CAAA;wCACnBI,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AAEA,oCAAA,QAAA,gBAAAc,GAAA,CAACuG,KAAAA,EAAAA,EAAAA;;AAEF1C,gCAAAA,SAAAA,kBACC7D,GAAA,CAACqG,UAAAA,EAAAA;oCACC9L,QAAAA,EAAUA,QAAAA;oCACV0L,GAAAA,EAAKb,qBAAAA;oCACLkB,OAAAA,EAAQ,OAAA;oCACRpG,OAAAA,EAAS,CAACuF,CAAAA,GAAMA,CAAAA,CAAEC,eAAe,EAAA;oCACjCc,iBAAAA,EAAiBlC,SAAAA;AACjBnC,oCAAAA,KAAAA,EAAOrH,aAAAA,CAAc;AACnB+D,wCAAAA,EAAAA,EAAIC,cAAAA,CAAe,6BAAA,CAAA;wCACnBI,cAAAA,EAAgB;AAClB,qCAAA,CAAA;oCACAuH,SAAAA,EAAWjC,aAAAA;AAEX,oCAAA,QAAA,gBAAAxE,GAAA,CAAC0G,IAAAA,EAAAA,EAAAA;;AAGJ,gCAAA,CAAC7C,SAAAA,kBACA1D,IAAA,CAAA2F,QAAA,EAAA;;AACGF,wCAAAA,SAAAA,kBACC5F,GAAA,CAACqG,UAAAA,EAAAA;AACC9L,4CAAAA,QAAAA,EAAUA,YAAY,CAACqL,SAAAA;4CACvBU,OAAAA,EAAQ,OAAA;4CACRpG,OAAAA,EAASqF,YAAAA;AACTpD,4CAAAA,KAAAA,EAAOrH,aAAAA,CAAc;AACnB+D,gDAAAA,EAAAA,EAAIC,cAAAA,CAAe,gCAAA,CAAA;gDACnBI,cAAAA,EAAgB;AAClB,6CAAA,CAAA;AAEA,4CAAA,QAAA,gBAAAc,GAAA,CAAC2G,OAAAA,EAAAA,EAAAA;;AAGJd,wCAAAA,WAAAA,kBACC7F,GAAA,CAACqG,UAAAA,EAAAA;AACC9L,4CAAAA,QAAAA,EAAUA,YAAY,CAACsL,WAAAA;4CACvBS,OAAAA,EAAQ,OAAA;4CACRpG,OAAAA,EAASyF,cAAAA;AACTxD,4CAAAA,KAAAA,EAAOrH,aAAAA,CAAc;AACnB+D,gDAAAA,EAAAA,EAAIC,cAAAA,CAAe,kCAAA,CAAA;gDACnBI,cAAAA,EAAgB;AAClB,6CAAA,CAAA;AAEA,4CAAA,QAAA,gBAAAc,GAAA,CAAC4G,SAAAA,EAAAA,EAAAA;;;;;;;;AAOb,8BAAA5G,GAAA,CAAC+C,UAAU8D,OAAO,EAAA;AAChB,oBAAA,QAAA,gBAAA7G,GAAA,CAAC8G,IAAAA,EAAAA;wBACCtE,SAAAA,EAAU,QAAA;wBACVC,UAAAA,EAAW,SAAA;wBACXsE,UAAAA,EAAW,YAAA;wBACXC,OAAAA,EAAS;4BAAEC,OAAAA,EAAS,CAAA;4BAAGC,MAAAA,EAAQ;AAAE,yBAAA;wBACjCnF,GAAAA,EAAK;4BAAEkF,OAAAA,EAAS,CAAA;4BAAGC,MAAAA,EAAQ;AAAE,yBAAA;AAE5BxM,wBAAAA,QAAAA,EAAAA;;;;;;AAOf,CAAA;AAEA,MAAMqL,OAAAA,GAAU,IAAA;AACd,IAAA,qBAAO/F,GAAA,CAACmH,UAAAA,EAAAA;QAAWC,GAAAA,EAAI,MAAA;QAAOJ,OAAAA,EAAS,CAAA;QAAGD,UAAAA,EAAW;;AACvD,CAAA;AAEA,MAAMI,UAAAA,GAAarE,MAAAA,CAA6B1C,GAAAA,CAAI;;sBAE9B,EAAE,CAAC,EAAE6C,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACmE,UAAU,CAAC;;AAE/D,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"Repeatable.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/Repeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useField, useNotification, useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n TextButton,\n VisuallyHidden,\n Accordion,\n IconButton,\n useComposedRefs,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Plus, Drag, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { useDragAndDrop, type UseDragAndDropOptions } from '../../../../../hooks/useDragAndDrop';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { Initializer } from './Initializer';\n\nimport type { ComponentInputProps } from './Input';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ntype RepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst RepeatableComponent = ({\n attribute,\n disabled,\n name,\n mainField,\n children,\n layout,\n}: RepeatableComponentProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const search = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { currentDocument } = useDocumentContext('RepeatableComponent');\n const components = currentDocument.components;\n\n const {\n value = [],\n error,\n rawError,\n } = useField<Schema.Attribute.ComponentValue<`${string}.${string}`, true>>(name);\n const addFieldRow = useForm('RepeatableComponent', (state) => state.addFieldRow);\n const moveFieldRow = useForm('RepeatableComponent', (state) => state.moveFieldRow);\n const removeFieldRow = useForm('RepeatableComponent', (state) => state.removeFieldRow);\n const { max = Infinity } = attribute;\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n const [liveText, setLiveText] = React.useState('');\n\n React.useEffect(() => {\n const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;\n const hasNestedValue = value && Array.isArray(value) && value.length > 0;\n\n if (hasNestedErrors && hasNestedValue) {\n const errorOpenItems = rawError\n .map((_: unknown, idx: number) => {\n return value[idx] ? value[idx].__temp_key__ : null;\n })\n .filter((value) => !!value);\n\n if (errorOpenItems && errorOpenItems.length > 0) {\n setCollapseToOpen((collapseToOpen) => {\n if (!errorOpenItems.includes(collapseToOpen)) {\n return errorOpenItems[0];\n }\n\n return collapseToOpen;\n });\n }\n }\n }, [rawError, value]);\n\n /**\n * Get the temp key of the component that has the field that is currently focussed\n * as defined by the `field` query param. We can then force this specific component\n * to be in its \"open\" state.\n */\n const componentTmpKeyWithFocussedField = React.useMemo(() => {\n if (search.has('field')) {\n const fieldParam = search.get('field');\n\n if (!fieldParam) {\n return undefined;\n }\n\n const [, path] = fieldParam.split(`${name}.`);\n\n if (getIn(value, path, undefined) !== undefined) {\n const [subpath] = path.split('.');\n\n return getIn(value, subpath, undefined)?.__temp_key__;\n }\n }\n\n return undefined;\n }, [search, name, value]);\n\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n /**\n * When we add a new item to the array, we want to open the collapse.\n */\n if (prevValue && prevValue.length < value.length) {\n setCollapseToOpen(value[value.length - 1].__temp_key__);\n }\n }, [value, prevValue]);\n\n React.useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'string') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const toggleCollapses = React.useCallback(() => {\n setCollapseToOpen('');\n }, []);\n\n const handleClick = () => {\n if (value.length < max) {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n addFieldRow(name, data);\n // setCollapseToOpen(nextTempKey);\n } else if (value.length >= max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponentField = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleValueChange = (key: string) => {\n setCollapseToOpen(key);\n };\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDeleteComponent = React.useCallback(\n (index: number) => {\n removeFieldRow(name, index);\n toggleCollapses();\n },\n [name, removeFieldRow, toggleCollapses]\n );\n\n const ariaDescriptionId = React.useId();\n\n const level = useComponent('RepeatableComponent', (state) => state.level);\n\n if (value.length === 0) {\n return <Initializer disabled={disabled} name={name} onClick={handleClick} />;\n }\n\n return (\n <Box hasRadius>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <AccordionRoot\n $error={error}\n value={collapseToOpen}\n onValueChange={handleValueChange}\n aria-describedby={ariaDescriptionId}\n >\n {value.map((componentValue, index) => {\n const key = componentValue.__temp_key__;\n const id = componentValue.id;\n const nameWithIndex = `${name}.${index}`;\n\n return (\n <ComponentProvider\n key={key}\n // id is always a number in a component\n id={id as number}\n uid={attribute.component}\n level={level + 1}\n type=\"repeatable\"\n >\n <MemoizedComponent\n disabled={disabled}\n name={nameWithIndex}\n attributeComponent={attribute.component}\n index={index}\n mainField={mainField}\n onMoveItem={handleMoveComponentField}\n onDeleteComponent={handleDeleteComponent}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n __temp_key__={key}\n totalLength={value.length}\n layout={layout}\n renderField={children}\n />\n </ComponentProvider>\n );\n })}\n <TextButtonCustom disabled={disabled} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTranslation('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n </AccordionRoot>\n </Box>\n );\n};\n\nconst AccordionRoot = styled(Accordion.Root)<{ $error?: string }>`\n border: 1px solid\n ${({ theme, $error }) => ($error ? theme.colors.danger600 : theme.colors.neutral200)};\n`;\n\nconst TextButtonCustom = styled(TextButton)`\n width: 100%;\n display: flex;\n justify-content: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n padding-inline: ${(props) => props.theme.spaces[6]};\n padding-block: ${(props) => props.theme.spaces[3]};\n\n &:not([disabled]) {\n cursor: pointer;\n\n &:hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n }\n\n span {\n font-weight: 600;\n font-size: 1.4rem;\n line-height: 2.4rem;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n`;\n\ninterface RepeatableComponentFieldsProps\n extends Pick<RepeatableComponentProps, 'children' | 'layout'> {\n attributeComponent: string;\n nameWithIndex: string;\n}\n\nconst RepeatableComponentFields = React.memo(\n ({ attributeComponent, children, layout, nameWithIndex }: RepeatableComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n {layout.map((row, index) => {\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${nameWithIndex}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attributeComponent}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </>\n );\n }\n);\n\nRepeatableComponentFields.displayName = 'RepeatableComponentFields';\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel' | 'onMoveItem'>,\n Pick<RepeatableComponentProps, 'mainField' | 'layout'> {\n attributeComponent: string;\n disabled?: boolean;\n index: number;\n name: string;\n onDeleteComponent?: (index: number) => void;\n renderField: RepeatableComponentProps['children'];\n toggleCollapses: () => void;\n __temp_key__: string;\n totalLength: number;\n}\n\nconst Component = ({\n attributeComponent,\n disabled,\n index,\n name,\n mainField = {\n name: 'id',\n type: 'integer',\n },\n layout,\n onDeleteComponent,\n renderField,\n toggleCollapses,\n __temp_key__,\n totalLength,\n onMoveItem,\n ...dragProps\n}: ComponentProps) => {\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n const displayValue = useForm('RepeatableComponent', (state) => {\n return getIn(state.values, [...name.split('.'), mainField.name]);\n });\n\n const accordionRef = React.useRef<HTMLButtonElement>(null!);\n\n /**\n * The last item in the fieldName array will be the index of this component.\n * Drag and drop should be isolated to the parent component so nested repeatable\n * components are not affected by the drag and drop of the parent component in\n * their own re-ordering context.\n */\n const componentKey = name.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n index,\n displayedValue: displayValue,\n },\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n onMoveItem,\n ...dragProps,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = useComposedRefs<HTMLButtonElement>(accordionRef, dragRef);\n const composedBoxRefs = useComposedRefs<HTMLDivElement>(\n boxRef as React.RefObject<HTMLDivElement>,\n dropRef\n );\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleDeleteClick = () => {\n onDeleteComponent?.(index);\n };\n\n return (\n <>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Item ref={composedBoxRefs} value={__temp_key__}>\n <Accordion.Header>\n <Accordion.Trigger>{displayValue}</Accordion.Trigger>\n <Accordion.Actions>\n <IconButton\n disabled={disabled}\n variant=\"ghost\"\n onClick={handleDeleteClick}\n label={formatMessage({\n id: getTranslation('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n disabled={disabled}\n ref={composedAccordionRefs}\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n disabled={disabled || !canMoveUp}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onMoveItem) {\n onMoveItem(index - 1, index);\n }\n }}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n disabled={disabled || !canMoveDown}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onMoveItem) {\n onMoveItem(index + 1, index);\n }\n }}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={{ initial: 4, medium: 6 }}\n gap={{ initial: 3, medium: 4 }}\n >\n <RepeatableComponentFields\n attributeComponent={attributeComponent}\n layout={layout}\n nameWithIndex={name}\n >\n {renderField}\n </RepeatableComponentFields>\n </Flex>\n </Accordion.Content>\n </Accordion.Item>\n )}\n </>\n );\n};\n\nconst Preview = () => {\n return <StyledSpan tag=\"span\" padding={6} background=\"primary100\" />;\n};\n\nconst StyledSpan = styled<BoxComponent<'span'>>(Box)`\n display: block;\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n`;\n\nconst MemoizedComponent = React.memo(Component);\nconst MemoizedRepeatableComponent = React.memo(RepeatableComponent);\n\nexport { MemoizedRepeatableComponent as RepeatableComponent };\nexport type { RepeatableComponentProps };\n"],"names":["RepeatableComponent","attribute","disabled","name","mainField","children","layout","toggleNotification","useNotification","formatMessage","useIntl","search","searchString","useLocation","React","useMemo","URLSearchParams","currentDocument","useDocumentContext","components","value","error","rawError","useField","addFieldRow","useForm","state","moveFieldRow","removeFieldRow","max","Infinity","collapseToOpen","setCollapseToOpen","useState","liveText","setLiveText","useEffect","hasNestedErrors","Array","isArray","length","hasNestedValue","errorOpenItems","map","_","idx","__temp_key__","filter","includes","componentTmpKeyWithFocussedField","has","fieldParam","get","undefined","path","split","getIn","subpath","prevValue","usePrev","toggleCollapses","useCallback","handleClick","schema","component","form","createDefaultForm","data","transformDocument","type","message","id","getTranslation","handleMoveComponentField","newIndex","currentIndex","defaultMessage","item","position","handleValueChange","key","handleCancel","index","handleGrabItem","handleDropItem","handleDeleteComponent","ariaDescriptionId","useId","level","useComponent","_jsx","Initializer","onClick","_jsxs","Box","hasRadius","VisuallyHidden","aria-live","AccordionRoot","$error","onValueChange","aria-describedby","componentValue","nameWithIndex","ComponentProvider","uid","MemoizedComponent","attributeComponent","onMoveItem","onDeleteComponent","onCancel","onDropItem","onGrabItem","totalLength","renderField","TextButtonCustom","startIcon","Plus","styled","Accordion","Root","theme","colors","danger600","neutral200","TextButton","props","spaces","primary100","motion","easings","easeOutQuad","RepeatableComponentFields","memo","_Fragment","row","ResponsiveGridRoot","gap","size","field","completeFieldName","translatedLabel","label","ResponsiveGridItem","col","s","xs","direction","alignItems","displayName","Component","dragProps","isDesktop","useIsDesktop","displayValue","values","accordionRef","useRef","componentKey","slice","join","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","COMPONENT","displayedValue","onStart","getEmptyImage","captureDraggingState","composedAccordionRefs","useComposedRefs","composedBoxRefs","canMoveUp","canMoveDown","handleDeleteClick","Preview","Item","ref","Header","Trigger","Actions","IconButton","variant","Trash","e","stopPropagation","data-handler-id","onKeyDown","Drag","ArrowUp","ArrowDown","Content","Flex","background","padding","initial","medium","StyledSpan","tag","primary500","MemoizedRepeatableComponent"],"mappings":"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"}
|