@strapi/content-manager 5.39.0 → 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
|
@@ -56,7 +56,6 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
56
56
|
const { max = Infinity } = attribute;
|
|
57
57
|
const [collapseToOpen, setCollapseToOpen] = React__namespace.useState('');
|
|
58
58
|
const [liveText, setLiveText] = React__namespace.useState('');
|
|
59
|
-
const rulesEngine = strapiAdmin.createRulesEngine();
|
|
60
59
|
React__namespace.useEffect(()=>{
|
|
61
60
|
const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;
|
|
62
61
|
const hasNestedValue = value && Array.isArray(value) && value.length > 0;
|
|
@@ -117,9 +116,9 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
117
116
|
}, [
|
|
118
117
|
componentTmpKeyWithFocussedField
|
|
119
118
|
]);
|
|
120
|
-
const toggleCollapses = ()=>{
|
|
119
|
+
const toggleCollapses = React__namespace.useCallback(()=>{
|
|
121
120
|
setCollapseToOpen('');
|
|
122
|
-
};
|
|
121
|
+
}, []);
|
|
123
122
|
const handleClick = ()=>{
|
|
124
123
|
if (value.length < max) {
|
|
125
124
|
const schema = components[attribute.component];
|
|
@@ -136,46 +135,69 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
136
135
|
});
|
|
137
136
|
}
|
|
138
137
|
};
|
|
139
|
-
const handleMoveComponentField = (newIndex, currentIndex)=>{
|
|
138
|
+
const handleMoveComponentField = React__namespace.useCallback((newIndex, currentIndex)=>{
|
|
140
139
|
setLiveText(formatMessage({
|
|
141
140
|
id: translations.getTranslation('dnd.reorder'),
|
|
142
141
|
defaultMessage: '{item}, moved. New position in list: {position}.'
|
|
143
142
|
}, {
|
|
144
143
|
item: `${name}.${currentIndex}`,
|
|
145
|
-
position:
|
|
144
|
+
position: `${newIndex + 1} of ${value.length}`
|
|
146
145
|
}));
|
|
147
146
|
moveFieldRow(name, currentIndex, newIndex);
|
|
148
|
-
}
|
|
147
|
+
}, [
|
|
148
|
+
formatMessage,
|
|
149
|
+
moveFieldRow,
|
|
150
|
+
name,
|
|
151
|
+
value.length
|
|
152
|
+
]);
|
|
149
153
|
const handleValueChange = (key)=>{
|
|
150
154
|
setCollapseToOpen(key);
|
|
151
155
|
};
|
|
152
|
-
const
|
|
153
|
-
const handleCancel = (index)=>{
|
|
156
|
+
const handleCancel = React__namespace.useCallback((index)=>{
|
|
154
157
|
setLiveText(formatMessage({
|
|
155
158
|
id: translations.getTranslation('dnd.cancel-item'),
|
|
156
159
|
defaultMessage: '{item}, dropped. Re-order cancelled.'
|
|
157
160
|
}, {
|
|
158
161
|
item: `${name}.${index}`
|
|
159
162
|
}));
|
|
160
|
-
}
|
|
161
|
-
|
|
163
|
+
}, [
|
|
164
|
+
formatMessage,
|
|
165
|
+
name
|
|
166
|
+
]);
|
|
167
|
+
const handleGrabItem = React__namespace.useCallback((index)=>{
|
|
162
168
|
setLiveText(formatMessage({
|
|
163
169
|
id: translations.getTranslation('dnd.grab-item'),
|
|
164
170
|
defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`
|
|
165
171
|
}, {
|
|
166
172
|
item: `${name}.${index}`,
|
|
167
|
-
position:
|
|
173
|
+
position: `${index + 1} of ${value.length}`
|
|
168
174
|
}));
|
|
169
|
-
}
|
|
170
|
-
|
|
175
|
+
}, [
|
|
176
|
+
formatMessage,
|
|
177
|
+
name,
|
|
178
|
+
value.length
|
|
179
|
+
]);
|
|
180
|
+
const handleDropItem = React__namespace.useCallback((index)=>{
|
|
171
181
|
setLiveText(formatMessage({
|
|
172
182
|
id: translations.getTranslation('dnd.drop-item'),
|
|
173
183
|
defaultMessage: `{item}, dropped. Final position in list: {position}.`
|
|
174
184
|
}, {
|
|
175
185
|
item: `${name}.${index}`,
|
|
176
|
-
position:
|
|
186
|
+
position: `${index + 1} of ${value.length}`
|
|
177
187
|
}));
|
|
178
|
-
}
|
|
188
|
+
}, [
|
|
189
|
+
formatMessage,
|
|
190
|
+
name,
|
|
191
|
+
value.length
|
|
192
|
+
]);
|
|
193
|
+
const handleDeleteComponent = React__namespace.useCallback((index)=>{
|
|
194
|
+
removeFieldRow(name, index);
|
|
195
|
+
toggleCollapses();
|
|
196
|
+
}, [
|
|
197
|
+
name,
|
|
198
|
+
removeFieldRow,
|
|
199
|
+
toggleCollapses
|
|
200
|
+
]);
|
|
179
201
|
const ariaDescriptionId = React__namespace.useId();
|
|
180
202
|
const level = ComponentContext.useComponent('RepeatableComponent', (state)=>state.level);
|
|
181
203
|
if (value.length === 0) {
|
|
@@ -205,7 +227,9 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
205
227
|
onValueChange: handleValueChange,
|
|
206
228
|
"aria-describedby": ariaDescriptionId,
|
|
207
229
|
children: [
|
|
208
|
-
value.map((
|
|
230
|
+
value.map((componentValue, index)=>{
|
|
231
|
+
const key = componentValue.__temp_key__;
|
|
232
|
+
const id = componentValue.id;
|
|
209
233
|
const nameWithIndex = `${name}.${index}`;
|
|
210
234
|
return /*#__PURE__*/ jsxRuntime.jsx(ComponentContext.ComponentProvider, {
|
|
211
235
|
// id is always a number in a component
|
|
@@ -213,63 +237,22 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
|
|
|
213
237
|
uid: attribute.component,
|
|
214
238
|
level: level + 1,
|
|
215
239
|
type: "repeatable",
|
|
216
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(
|
|
240
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(MemoizedComponent, {
|
|
217
241
|
disabled: disabled,
|
|
218
242
|
name: nameWithIndex,
|
|
219
|
-
|
|
243
|
+
attributeComponent: attribute.component,
|
|
220
244
|
index: index,
|
|
221
245
|
mainField: mainField,
|
|
222
246
|
onMoveItem: handleMoveComponentField,
|
|
223
|
-
onDeleteComponent:
|
|
224
|
-
removeFieldRow(name, index);
|
|
225
|
-
toggleCollapses();
|
|
226
|
-
},
|
|
247
|
+
onDeleteComponent: handleDeleteComponent,
|
|
227
248
|
toggleCollapses: toggleCollapses,
|
|
228
249
|
onCancel: handleCancel,
|
|
229
250
|
onDropItem: handleDropItem,
|
|
230
251
|
onGrabItem: handleGrabItem,
|
|
231
252
|
__temp_key__: key,
|
|
232
253
|
totalLength: value.length,
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const condition = field.attribute.conditions?.visible;
|
|
236
|
-
if (condition) {
|
|
237
|
-
return rulesEngine.evaluate(condition, currentComponentValues);
|
|
238
|
-
}
|
|
239
|
-
return true;
|
|
240
|
-
});
|
|
241
|
-
if (visibleFields.length === 0) {
|
|
242
|
-
return null; // Skip rendering the entire grid row
|
|
243
|
-
}
|
|
244
|
-
return /*#__PURE__*/ jsxRuntime.jsx(FormLayout.ResponsiveGridRoot, {
|
|
245
|
-
gap: 4,
|
|
246
|
-
children: visibleFields.map(({ size, ...field })=>{
|
|
247
|
-
/**
|
|
248
|
-
* Layouts are built from schemas so they don't understand the complete
|
|
249
|
-
* schema tree, for components we append the parent name to the field name
|
|
250
|
-
* because this is the structure for the data & permissions also understand
|
|
251
|
-
* the nesting involved.
|
|
252
|
-
*/ const completeFieldName = `${nameWithIndex}.${field.name}`;
|
|
253
|
-
const translatedLabel = formatMessage({
|
|
254
|
-
id: `content-manager.components.${attribute.component}.${field.name}`,
|
|
255
|
-
defaultMessage: field.label
|
|
256
|
-
});
|
|
257
|
-
return /*#__PURE__*/ jsxRuntime.jsx(FormLayout.ResponsiveGridItem, {
|
|
258
|
-
col: size,
|
|
259
|
-
s: 12,
|
|
260
|
-
xs: 12,
|
|
261
|
-
direction: "column",
|
|
262
|
-
alignItems: "stretch",
|
|
263
|
-
children: children({
|
|
264
|
-
...field,
|
|
265
|
-
label: translatedLabel,
|
|
266
|
-
name: completeFieldName,
|
|
267
|
-
document: currentDocument
|
|
268
|
-
})
|
|
269
|
-
}, completeFieldName);
|
|
270
|
-
})
|
|
271
|
-
}, index);
|
|
272
|
-
})
|
|
254
|
+
layout: layout,
|
|
255
|
+
renderField: children
|
|
273
256
|
})
|
|
274
257
|
}, key);
|
|
275
258
|
}),
|
|
@@ -317,10 +300,45 @@ const TextButtonCustom = styledComponents.styled(designSystem.TextButton)`
|
|
|
317
300
|
transition: background-color 120ms ${(props)=>props.theme.motion.easings.easeOutQuad};
|
|
318
301
|
}
|
|
319
302
|
`;
|
|
320
|
-
const
|
|
303
|
+
const RepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attributeComponent, children, layout, nameWithIndex })=>{
|
|
304
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
305
|
+
return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
306
|
+
children: layout.map((row, index)=>{
|
|
307
|
+
return /*#__PURE__*/ jsxRuntime.jsx(FormLayout.ResponsiveGridRoot, {
|
|
308
|
+
gap: 4,
|
|
309
|
+
children: row.map(({ size, ...field })=>{
|
|
310
|
+
/**
|
|
311
|
+
* Layouts are built from schemas so they don't understand the complete
|
|
312
|
+
* schema tree, for components we append the parent name to the field name
|
|
313
|
+
* because this is the structure for the data & permissions also understand
|
|
314
|
+
* the nesting involved.
|
|
315
|
+
*/ const completeFieldName = `${nameWithIndex}.${field.name}`;
|
|
316
|
+
const translatedLabel = formatMessage({
|
|
317
|
+
id: `content-manager.components.${attributeComponent}.${field.name}`,
|
|
318
|
+
defaultMessage: field.label
|
|
319
|
+
});
|
|
320
|
+
return /*#__PURE__*/ jsxRuntime.jsx(FormLayout.ResponsiveGridItem, {
|
|
321
|
+
col: size,
|
|
322
|
+
s: 12,
|
|
323
|
+
xs: 12,
|
|
324
|
+
direction: "column",
|
|
325
|
+
alignItems: "stretch",
|
|
326
|
+
children: children({
|
|
327
|
+
...field,
|
|
328
|
+
label: translatedLabel,
|
|
329
|
+
name: completeFieldName
|
|
330
|
+
})
|
|
331
|
+
}, completeFieldName);
|
|
332
|
+
})
|
|
333
|
+
}, index);
|
|
334
|
+
})
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
RepeatableComponentFields.displayName = 'RepeatableComponentFields';
|
|
338
|
+
const Component = ({ attributeComponent, disabled, index, name, mainField = {
|
|
321
339
|
name: 'id',
|
|
322
340
|
type: 'integer'
|
|
323
|
-
},
|
|
341
|
+
}, layout, onDeleteComponent, renderField, toggleCollapses, __temp_key__, totalLength, onMoveItem, ...dragProps })=>{
|
|
324
342
|
const { formatMessage } = reactIntl.useIntl();
|
|
325
343
|
const isDesktop = strapiAdmin.useIsDesktop();
|
|
326
344
|
const displayValue = strapiAdmin.useForm('RepeatableComponent', (state)=>{
|
|
@@ -360,27 +378,11 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
360
378
|
]);
|
|
361
379
|
const composedAccordionRefs = designSystem.useComposedRefs(accordionRef, dragRef);
|
|
362
380
|
const composedBoxRefs = designSystem.useComposedRefs(boxRef, dropRef);
|
|
363
|
-
const handleMoveUp = React__namespace.useCallback((e)=>{
|
|
364
|
-
e.stopPropagation();
|
|
365
|
-
if (index > 0 && onMoveItem) {
|
|
366
|
-
onMoveItem(index - 1, index);
|
|
367
|
-
}
|
|
368
|
-
}, [
|
|
369
|
-
index,
|
|
370
|
-
onMoveItem
|
|
371
|
-
]);
|
|
372
|
-
const handleMoveDown = React__namespace.useCallback((e)=>{
|
|
373
|
-
e.stopPropagation();
|
|
374
|
-
if (index < totalLength - 1 && onMoveItem) {
|
|
375
|
-
onMoveItem(index + 1, index);
|
|
376
|
-
}
|
|
377
|
-
}, [
|
|
378
|
-
index,
|
|
379
|
-
totalLength,
|
|
380
|
-
onMoveItem
|
|
381
|
-
]);
|
|
382
381
|
const canMoveUp = index > 0;
|
|
383
382
|
const canMoveDown = index < totalLength - 1;
|
|
383
|
+
const handleDeleteClick = ()=>{
|
|
384
|
+
onDeleteComponent?.(index);
|
|
385
|
+
};
|
|
384
386
|
return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
385
387
|
children: isDragging ? /*#__PURE__*/ jsxRuntime.jsx(Preview, {}) : /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Accordion.Item, {
|
|
386
388
|
ref: composedBoxRefs,
|
|
@@ -396,7 +398,7 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
396
398
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
397
399
|
disabled: disabled,
|
|
398
400
|
variant: "ghost",
|
|
399
|
-
onClick:
|
|
401
|
+
onClick: handleDeleteClick,
|
|
400
402
|
label: formatMessage({
|
|
401
403
|
id: translations.getTranslation('containers.Edit.delete'),
|
|
402
404
|
defaultMessage: 'Delete'
|
|
@@ -421,7 +423,12 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
421
423
|
canMoveUp && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
422
424
|
disabled: disabled || !canMoveUp,
|
|
423
425
|
variant: "ghost",
|
|
424
|
-
onClick:
|
|
426
|
+
onClick: (e)=>{
|
|
427
|
+
e.stopPropagation();
|
|
428
|
+
if (onMoveItem) {
|
|
429
|
+
onMoveItem(index - 1, index);
|
|
430
|
+
}
|
|
431
|
+
},
|
|
425
432
|
label: formatMessage({
|
|
426
433
|
id: translations.getTranslation('components.DynamicZone.move-up'),
|
|
427
434
|
defaultMessage: 'Move up'
|
|
@@ -431,7 +438,12 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
431
438
|
canMoveDown && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
432
439
|
disabled: disabled || !canMoveDown,
|
|
433
440
|
variant: "ghost",
|
|
434
|
-
onClick:
|
|
441
|
+
onClick: (e)=>{
|
|
442
|
+
e.stopPropagation();
|
|
443
|
+
if (onMoveItem) {
|
|
444
|
+
onMoveItem(index + 1, index);
|
|
445
|
+
}
|
|
446
|
+
},
|
|
435
447
|
label: formatMessage({
|
|
436
448
|
id: translations.getTranslation('components.DynamicZone.move-down'),
|
|
437
449
|
defaultMessage: 'Move down'
|
|
@@ -457,7 +469,12 @@ const Component = ({ disabled, index, name, mainField = {
|
|
|
457
469
|
initial: 3,
|
|
458
470
|
medium: 4
|
|
459
471
|
},
|
|
460
|
-
children:
|
|
472
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(RepeatableComponentFields, {
|
|
473
|
+
attributeComponent: attributeComponent,
|
|
474
|
+
layout: layout,
|
|
475
|
+
nameWithIndex: name,
|
|
476
|
+
children: renderField
|
|
477
|
+
})
|
|
461
478
|
})
|
|
462
479
|
})
|
|
463
480
|
]
|
|
@@ -476,6 +493,8 @@ const StyledSpan = styledComponents.styled(designSystem.Box)`
|
|
|
476
493
|
outline: 1px dashed ${({ theme })=>theme.colors.primary500};
|
|
477
494
|
outline-offset: -1px;
|
|
478
495
|
`;
|
|
496
|
+
const MemoizedComponent = /*#__PURE__*/ React__namespace.memo(Component);
|
|
497
|
+
const MemoizedRepeatableComponent = /*#__PURE__*/ React__namespace.memo(RepeatableComponent);
|
|
479
498
|
|
|
480
|
-
exports.RepeatableComponent =
|
|
499
|
+
exports.RepeatableComponent = MemoizedRepeatableComponent;
|
|
481
500
|
//# sourceMappingURL=Repeatable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repeatable.js","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":"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"}
|
|
1
|
+
{"version":3,"file":"Repeatable.js","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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"}
|