@strapi/content-type-builder 5.58.0 → 5.60.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.
Files changed (130) hide show
  1. package/dist/admin/components/AIChat/FeedbackModal.js +13 -7
  2. package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
  3. package/dist/admin/components/AIChat/FeedbackModal.mjs +14 -8
  4. package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/UploadCodeModal.js +12 -6
  6. package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
  7. package/dist/admin/components/AIChat/UploadCodeModal.mjs +13 -7
  8. package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
  9. package/dist/admin/components/AIChat/UploadFigmaModal.js +12 -6
  10. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
  11. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +13 -7
  12. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
  13. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js +6 -3
  14. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
  15. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +7 -4
  16. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
  17. package/dist/admin/components/AIChat/components/Collapsible.js +9 -4
  18. package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
  19. package/dist/admin/components/AIChat/components/Collapsible.mjs +10 -5
  20. package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
  21. package/dist/admin/components/AIChat/components/Dropzone.js +13 -6
  22. package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
  23. package/dist/admin/components/AIChat/components/Dropzone.mjs +14 -7
  24. package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
  25. package/dist/admin/components/AIChat/components/FloatingPanel.js +11 -4
  26. package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
  27. package/dist/admin/components/AIChat/components/FloatingPanel.mjs +12 -5
  28. package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
  29. package/dist/admin/components/AIChat/components/FullScreenImage.js +16 -8
  30. package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
  31. package/dist/admin/components/AIChat/components/FullScreenImage.mjs +17 -9
  32. package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
  33. package/dist/admin/components/AIChat/components/Input.js +6 -3
  34. package/dist/admin/components/AIChat/components/Input.js.map +1 -1
  35. package/dist/admin/components/AIChat/components/Input.mjs +7 -4
  36. package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
  37. package/dist/admin/components/AIChat/components/Messages/Message.js +88 -12
  38. package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
  39. package/dist/admin/components/AIChat/components/Messages/Message.mjs +87 -13
  40. package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
  41. package/dist/admin/components/AIChat/components/StepModal.js +44 -17
  42. package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
  43. package/dist/admin/components/AIChat/components/StepModal.mjs +45 -18
  44. package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
  45. package/dist/admin/components/AIChat/providers/ChatProvider.js +79 -27
  46. package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
  47. package/dist/admin/components/AIChat/providers/ChatProvider.mjs +80 -28
  48. package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
  49. package/dist/admin/components/AIChat/providers/SchemaProvider.js +6 -3
  50. package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
  51. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +7 -4
  52. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
  53. package/dist/admin/components/AttributeOptions/AttributeOption.js +2 -2
  54. package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
  55. package/dist/admin/components/AttributeOptions/AttributeOption.mjs +2 -2
  56. package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
  57. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -1
  58. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -1
  59. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -1
  60. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -1
  61. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js +2 -1
  62. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
  63. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs +2 -1
  64. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
  65. package/dist/admin/components/DataManager/DataManagerProvider.js +317 -275
  66. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  67. package/dist/admin/components/DataManager/DataManagerProvider.mjs +319 -277
  68. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  69. package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -1
  70. package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -1
  71. package/dist/admin/components/DataManager/reducer.js +31 -4
  72. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  73. package/dist/admin/components/DataManager/reducer.mjs +31 -4
  74. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  75. package/dist/admin/components/DynamicZoneList.js +2 -1
  76. package/dist/admin/components/DynamicZoneList.js.map +1 -1
  77. package/dist/admin/components/DynamicZoneList.mjs +2 -1
  78. package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
  79. package/dist/admin/components/FormModal/attributes/ConditionForm.js +2 -1
  80. package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
  81. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs +2 -1
  82. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
  83. package/dist/admin/components/FormModal/attributes/types.js +2 -2
  84. package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
  85. package/dist/admin/components/FormModal/attributes/types.mjs +2 -2
  86. package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
  87. package/dist/admin/components/FormModal/forms/forms.js +1 -1
  88. package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
  89. package/dist/admin/components/FormModal/forms/forms.mjs +1 -1
  90. package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
  91. package/dist/admin/components/GenericInputs.js +2 -1
  92. package/dist/admin/components/GenericInputs.js.map +1 -1
  93. package/dist/admin/components/GenericInputs.mjs +2 -1
  94. package/dist/admin/components/GenericInputs.mjs.map +1 -1
  95. package/dist/admin/components/TabForm.js.map +1 -1
  96. package/dist/admin/components/TabForm.mjs.map +1 -1
  97. package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +8 -0
  98. package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +20 -0
  99. package/dist/admin/utils/folderTelemetry.js.map +1 -1
  100. package/dist/admin/utils/folderTelemetry.mjs.map +1 -1
  101. package/dist/admin/utils/formAPI.js.map +1 -1
  102. package/dist/admin/utils/formAPI.mjs.map +1 -1
  103. package/dist/server/controllers/validation/common.js +1 -1
  104. package/dist/server/controllers/validation/common.js.map +1 -1
  105. package/dist/server/controllers/validation/common.mjs +1 -1
  106. package/dist/server/controllers/validation/common.mjs.map +1 -1
  107. package/dist/server/controllers/validation/schema.js +3 -2
  108. package/dist/server/controllers/validation/schema.js.map +1 -1
  109. package/dist/server/controllers/validation/schema.mjs +4 -3
  110. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  111. package/dist/server/register.js.map +1 -1
  112. package/dist/server/register.mjs.map +1 -1
  113. package/dist/server/services/migration-builder/index.js.map +1 -1
  114. package/dist/server/services/migration-builder/index.mjs.map +1 -1
  115. package/dist/server/services/schema.js +34 -1
  116. package/dist/server/services/schema.js.map +1 -1
  117. package/dist/server/services/schema.mjs +34 -1
  118. package/dist/server/services/schema.mjs.map +1 -1
  119. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  120. package/dist/server/src/register.d.ts.map +1 -1
  121. package/dist/server/src/services/migration-builder/index.d.ts.map +1 -1
  122. package/dist/server/src/services/schema-builder/types.d.ts.map +1 -1
  123. package/dist/server/src/services/schema.d.ts.map +1 -1
  124. package/dist/server/src/utils/uid-target.d.ts +18 -0
  125. package/dist/server/src/utils/uid-target.d.ts.map +1 -0
  126. package/dist/server/utils/uid-target.js +34 -0
  127. package/dist/server/utils/uid-target.js.map +1 -0
  128. package/dist/server/utils/uid-target.mjs +31 -0
  129. package/dist/server/utils/uid-target.mjs.map +1 -0
  130. package/package.json +6 -6
@@ -212,10 +212,12 @@ const DataManagerProvider = ({ children })=>{
212
212
  const appNestedCompo = retrieveNestedComponents.retrieveNestedComponents(components);
213
213
  return appNestedCompo;
214
214
  };
215
- const updatePermissions = async ()=>{
215
+ const updatePermissions = React__namespace.useCallback(async ()=>{
216
216
  await refetchPermissions();
217
- };
218
- const requestRenameDecision = async (renames)=>{
217
+ }, [
218
+ refetchPermissions
219
+ ]);
220
+ const requestRenameDecision = React__namespace.useCallback(async (renames)=>{
219
221
  const acceptedKeys = await new Promise((resolve)=>{
220
222
  setRenameModal({
221
223
  renames,
@@ -224,8 +226,8 @@ const DataManagerProvider = ({ children })=>{
224
226
  });
225
227
  setRenameModal(null);
226
228
  return acceptedKeys;
227
- };
228
- const saveSchema = async ()=>{
229
+ }, []);
230
+ const saveSchema = React__namespace.useCallback(async ()=>{
229
231
  setIsSaving(true);
230
232
  const PluginForms = plugin?.apis?.forms;
231
233
  const mutatedCTs = Object.entries(state.current.contentTypes).reduce((acc, [uid, contentType])=>{
@@ -310,7 +312,24 @@ const DataManagerProvider = ({ children })=>{
310
312
  ctbSessionId
311
313
  });
312
314
  }
313
- };
315
+ }, [
316
+ ctbSessionId,
317
+ dispatch,
318
+ dispatchGuidedTour,
319
+ fetchClient,
320
+ formatMessage,
321
+ initialContentTypes,
322
+ lockAppWithAutoreload,
323
+ plugin,
324
+ regenerateSessionId,
325
+ requestRenameDecision,
326
+ serverRestartWatcher,
327
+ state,
328
+ toggleNotification,
329
+ trackUsage,
330
+ unlockAppWithAutoreload,
331
+ updatePermissions
332
+ ]);
314
333
  const componentsThatHaveOtherComponentInTheirAttributes = React__namespace.useMemo(()=>{
315
334
  return getAllComponentsThatHaveAComponentInTheirAttributes(components);
316
335
  }, [
@@ -338,284 +357,307 @@ const DataManagerProvider = ({ children })=>{
338
357
  }, [
339
358
  contentTypes
340
359
  ]);
341
- const context = {
342
- componentsThatHaveOtherComponentInTheirAttributes,
343
- nestedComponents,
344
- saveSchema,
345
- reservedNames,
346
- components,
347
- contentTypes,
348
- initialComponents,
349
- initialContentTypes,
350
- contentStructure: contentStructure$1,
351
- isSaving,
352
- isModified,
353
- isInDevelopmentMode,
354
- allComponentsCategories,
355
- componentsGroupedByCategory,
356
- sortedContentTypesList,
357
- isLoading,
358
- attributeRenameMigrationMode: renameMigrationModeRef.current,
359
- addAttribute (payload) {
360
- dispatch(reducer.actions.addAttribute({
361
- ...payload,
362
- attributeToSet: payload.attributeToSet
363
- }));
364
- },
365
- editAttribute (payload) {
366
- dispatch(reducer.actions.editAttribute({
367
- ...payload,
368
- attributeToSet: payload.attributeToSet
369
- }));
370
- },
371
- addCustomFieldAttribute (payload) {
372
- dispatch(reducer.actions.addCustomFieldAttribute({
373
- ...payload,
374
- attributeToSet: payload.attributeToSet
375
- }));
376
- },
377
- editCustomFieldAttribute (payload) {
378
- dispatch(reducer.actions.editCustomFieldAttribute({
379
- ...payload,
380
- attributeToSet: payload.attributeToSet
381
- }));
382
- },
383
- async confirmAttributeRenameMigration ({ forTarget, uid, oldName, newName }) {
384
- if (oldName === newName) {
385
- return true;
386
- }
387
- const schema = forTarget === 'contentType' ? contentTypes[uid] : components[uid];
388
- // A field that was never saved has no data to preserve: accept without
389
- // prompting so neither name ends up in `declinedRenameNames`.
390
- const initialAttribute = schema?.attributes.find((attribute)=>attribute.name === oldName);
391
- if (initialAttribute?.status === 'NEW') {
392
- return true;
393
- }
394
- // Consent inherits along a chain: a hop joining an accepted chain is
395
- // accepted, one touching a declined name is declined, neither prompts.
396
- const consent = resolveAfterEditRenameConsent.resolveAfterEditRenameConsent({
397
- renames: schema?.renames ?? [],
398
- declinedRenameNames: schema?.declinedRenameNames ?? [],
399
- oldName,
400
- newName,
401
- mode: renameMigrationModeRef.current
402
- });
403
- if (consent !== 'prompt') {
404
- return consent === 'accept';
405
- }
406
- const key = `${uid}:edit`;
407
- const acceptedKeys = await requestRenameDecision([
408
- {
409
- key,
410
- uid,
411
- typeName: schema?.info.displayName ?? uid,
412
- pairs: [
413
- {
414
- oldName,
415
- newName
416
- }
417
- ],
418
- via: []
360
+ const context = React__namespace.useMemo(()=>({
361
+ componentsThatHaveOtherComponentInTheirAttributes,
362
+ nestedComponents,
363
+ saveSchema,
364
+ reservedNames,
365
+ components,
366
+ contentTypes,
367
+ initialComponents,
368
+ initialContentTypes,
369
+ contentStructure: contentStructure$1,
370
+ isSaving,
371
+ isModified,
372
+ isInDevelopmentMode,
373
+ allComponentsCategories,
374
+ componentsGroupedByCategory,
375
+ sortedContentTypesList,
376
+ isLoading,
377
+ attributeRenameMigrationMode: renameMigrationModeRef.current,
378
+ addAttribute (payload) {
379
+ dispatch(reducer.actions.addAttribute({
380
+ ...payload,
381
+ attributeToSet: payload.attributeToSet
382
+ }));
383
+ },
384
+ editAttribute (payload) {
385
+ dispatch(reducer.actions.editAttribute({
386
+ ...payload,
387
+ attributeToSet: payload.attributeToSet
388
+ }));
389
+ },
390
+ addCustomFieldAttribute (payload) {
391
+ dispatch(reducer.actions.addCustomFieldAttribute({
392
+ ...payload,
393
+ attributeToSet: payload.attributeToSet
394
+ }));
395
+ },
396
+ editCustomFieldAttribute (payload) {
397
+ dispatch(reducer.actions.editCustomFieldAttribute({
398
+ ...payload,
399
+ attributeToSet: payload.attributeToSet
400
+ }));
401
+ },
402
+ async confirmAttributeRenameMigration ({ forTarget, uid, oldName, newName }) {
403
+ if (oldName === newName) {
404
+ return true;
419
405
  }
420
- ]);
421
- if (acceptedKeys === null) {
422
- return null;
423
- }
424
- return acceptedKeys.has(key);
425
- },
426
- addCreatedComponentToDynamicZone (payload) {
427
- dispatch(reducer.actions.addCreatedComponentToDynamicZone(payload));
428
- },
429
- createSchema (payload) {
430
- const { folder, ...rest } = payload;
431
- dispatch(reducer.actions.createSchema({
432
- ...rest,
433
- folder: toFolderAssignment(folder)
434
- }));
435
- },
436
- createComponentSchema ({ data, uid, componentCategory }) {
437
- dispatch(reducer.actions.createComponentSchema({
438
- data,
439
- uid,
440
- componentCategory
441
- }));
442
- },
443
- changeDynamicZoneComponents ({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {
444
- dispatch(reducer.actions.changeDynamicZoneComponents({
445
- forTarget,
446
- targetUid,
447
- dynamicZoneTarget,
448
- newComponents
449
- }));
450
- },
451
- removeAttribute (payload) {
452
- if (payload.forTarget === 'contentType') {
453
- // Note: willDeleteFieldOfContentType doesn't accept properties
454
- trackUsage('willDeleteFieldOfContentType');
455
- }
456
- dispatch(reducer.actions.removeField(payload));
457
- },
458
- removeComponentFromDynamicZone (payload) {
459
- dispatch(reducer.actions.removeComponentFromDynamicZone(payload));
460
- },
461
- deleteComponent (uid) {
462
- const userConfirm = window.confirm(formatMessage({
463
- id: getTrad.getTrad(`popUpWarning.bodyMessage.component.delete`)
464
- }));
465
- if (userConfirm) {
466
- onCloseModal();
467
- dispatch(reducer.actions.deleteComponent(uid));
468
- }
469
- },
470
- deleteContentType (uid) {
471
- const userConfirm = window.confirm(formatMessage({
472
- id: getTrad.getTrad(`popUpWarning.bodyMessage.contentType.delete`)
473
- }));
474
- if (userConfirm) {
475
- onCloseModal();
476
- dispatch(reducer.actions.deleteContentType(uid));
477
- }
478
- },
479
- createFolder ({ section, name, parentId }) {
480
- dispatch(reducer.actions.createFolder({
481
- section,
482
- name,
483
- parentId,
484
- id: contentStructure.generateGroupId()
485
- }));
486
- },
487
- renameFolder (payload) {
488
- dispatch(reducer.actions.renameFolder(payload));
489
- },
490
- moveFolder (payload) {
491
- dispatch(reducer.actions.moveFolder(payload));
492
- },
493
- deleteFolderOnly (payload) {
494
- dispatch(reducer.actions.deleteFolderOnly(payload));
495
- },
496
- deleteFolderAndContent ({ section, id, contentTypeUids }) {
497
- dispatch(reducer.actions.deleteFolderAndContent({
498
- section,
499
- id,
500
- contentTypeUids
501
- }));
502
- },
503
- assignContentTypeToFolder (payload) {
504
- dispatch(reducer.actions.assignContentTypeToFolder(payload));
505
- },
506
- reorderFolderChildren (payload) {
507
- dispatch(reducer.actions.reorderFolderChildren(payload));
508
- },
509
- updateComponentSchema ({ data, componentUID }) {
510
- dispatch(reducer.actions.updateComponentSchema({
511
- data,
512
- uid: componentUID
513
- }));
514
- },
515
- updateComponentUid ({ componentUID, newComponentUID }) {
516
- dispatch(reducer.actions.updateComponentUid({
517
- uid: componentUID,
518
- newComponentUID
519
- }));
520
- },
521
- updateSchema (args) {
522
- const { folder, ...rest } = args;
523
- dispatch(reducer.actions.updateSchema({
524
- ...rest,
525
- folder: toFolderAssignment(folder)
526
- }));
527
- },
528
- moveAttribute (args) {
529
- dispatch(reducer.actions.moveAttribute(args));
530
- },
531
- async applyChange ({ action, schema }) {
532
- const renames = schema.renames ?? [];
533
- if (action !== 'update' || renames.length === 0) {
534
- dispatch(reducer.actions.applyChange({
535
- action,
536
- schema
406
+ const schema = forTarget === 'contentType' ? contentTypes[uid] : components[uid];
407
+ // A field that was never saved has no data to preserve: accept without
408
+ // prompting so neither name ends up in `declinedRenameNames`.
409
+ const initialAttribute = schema?.attributes.find((attribute)=>attribute.name === oldName);
410
+ if (initialAttribute?.status === 'NEW') {
411
+ return true;
412
+ }
413
+ // Consent inherits along a chain: a hop joining an accepted chain is
414
+ // accepted, one touching a declined name is declined, neither prompts.
415
+ const consent = resolveAfterEditRenameConsent.resolveAfterEditRenameConsent({
416
+ renames: schema?.renames ?? [],
417
+ declinedRenameNames: schema?.declinedRenameNames ?? [],
418
+ oldName,
419
+ newName,
420
+ mode: renameMigrationModeRef.current
421
+ });
422
+ if (consent !== 'prompt') {
423
+ return consent === 'accept';
424
+ }
425
+ const key = `${uid}:edit`;
426
+ const acceptedKeys = await requestRenameDecision([
427
+ {
428
+ key,
429
+ uid,
430
+ typeName: schema?.info.displayName ?? uid,
431
+ pairs: [
432
+ {
433
+ oldName,
434
+ newName
435
+ }
436
+ ],
437
+ via: []
438
+ }
439
+ ]);
440
+ if (acceptedKeys === null) {
441
+ return null;
442
+ }
443
+ return acceptedKeys.has(key);
444
+ },
445
+ addCreatedComponentToDynamicZone (payload) {
446
+ dispatch(reducer.actions.addCreatedComponentToDynamicZone(payload));
447
+ },
448
+ createSchema (payload) {
449
+ const { folder, ...rest } = payload;
450
+ dispatch(reducer.actions.createSchema({
451
+ ...rest,
452
+ folder: toFolderAssignment(folder)
537
453
  }));
538
- return true;
539
- }
540
- const mode = renameMigrationModeRef.current;
541
- if (mode === 'never') {
542
- dispatch(reducer.actions.applyChange({
543
- action,
544
- schema: omit__default.default(schema, [
545
- 'renames'
546
- ])
454
+ },
455
+ createComponentSchema ({ data, uid, componentCategory }) {
456
+ dispatch(reducer.actions.createComponentSchema({
457
+ data,
458
+ uid,
459
+ componentCategory
547
460
  }));
548
- return true;
549
- }
550
- // 'always' | 'prompt-before-save': the before-save modal decides per chain.
551
- if (mode !== 'prompt-after-edit') {
552
- dispatch(reducer.actions.applyChange({
553
- action,
554
- schema
461
+ },
462
+ changeDynamicZoneComponents ({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {
463
+ dispatch(reducer.actions.changeDynamicZoneComponents({
464
+ forTarget,
465
+ targetUid,
466
+ dynamicZoneTarget,
467
+ newComponents
555
468
  }));
556
- return true;
557
- }
558
- // 'prompt-after-edit': decide per chain now, inheriting consent already
559
- // given (or refused) for the hops recorded on the type.
560
- const existing = schema.modelType === 'contentType' ? contentTypes[schema.uid] : components[schema.uid];
561
- const chains = groupRenameChains.groupRenameChains(schema.uid, renames);
562
- const { keep, prompt } = splitChainsByInheritedConsent.splitChainsByInheritedConsent({
563
- recorded: existing?.renames ?? [],
564
- declinedRenameNames: existing?.declinedRenameNames ?? [],
565
- chains,
566
- renames
567
- });
568
- const accepted = new Set(keep.map((chain)=>chain.id));
569
- if (prompt.length > 0) {
570
- const typeName = schema.info?.displayName ?? schema.uid;
571
- const decision = await requestRenameDecision(prompt.map((chain)=>RenameMigrationModal.toPendingRename(chain, renames, {
572
- uid: schema.uid,
573
- typeName
574
- })));
575
- // The user cancelled: apply nothing.
576
- if (decision === null) {
577
- return false;
469
+ },
470
+ removeAttribute (payload) {
471
+ if (payload.forTarget === 'contentType') {
472
+ // Note: willDeleteFieldOfContentType doesn't accept properties
473
+ trackUsage('willDeleteFieldOfContentType');
578
474
  }
579
- decision.forEach((id)=>accepted.add(id));
580
- }
581
- const declinedChains = chains.filter((chain)=>!accepted.has(chain.id));
582
- const keptRenames = RenameMigrationModal.filterRenamesByAcceptedChains(schema.uid, renames, accepted);
583
- const declinedRenameNames = uniq__default.default([
584
- ...schema.declinedRenameNames ?? [],
585
- ...splitChainsByInheritedConsent.namesOfChains(declinedChains, renames)
586
- ]);
587
- dispatch(reducer.actions.applyChange({
588
- action,
589
- schema: {
590
- ...omit__default.default(schema, [
591
- 'renames',
592
- 'declinedRenameNames'
593
- ]),
594
- ...keptRenames.length > 0 ? {
595
- renames: keptRenames
596
- } : {},
597
- ...declinedRenameNames.length > 0 ? {
598
- declinedRenameNames
599
- } : {}
475
+ dispatch(reducer.actions.removeField(payload));
476
+ },
477
+ removeComponentFromDynamicZone (payload) {
478
+ dispatch(reducer.actions.removeComponentFromDynamicZone(payload));
479
+ },
480
+ deleteComponent (uid) {
481
+ const userConfirm = window.confirm(formatMessage({
482
+ id: getTrad.getTrad(`popUpWarning.bodyMessage.component.delete`)
483
+ }));
484
+ if (userConfirm) {
485
+ onCloseModal();
486
+ dispatch(reducer.actions.deleteComponent(uid));
600
487
  }
601
- }));
602
- return true;
603
- },
604
- history: {
605
- undo () {
606
- dispatch(reducer.actions.undo());
607
488
  },
608
- redo () {
609
- dispatch(reducer.actions.redo());
489
+ deleteContentType (uid) {
490
+ const userConfirm = window.confirm(formatMessage({
491
+ id: getTrad.getTrad(`popUpWarning.bodyMessage.contentType.delete`)
492
+ }));
493
+ if (userConfirm) {
494
+ onCloseModal();
495
+ dispatch(reducer.actions.deleteContentType(uid));
496
+ }
610
497
  },
611
- discardAllChanges () {
612
- dispatch(reducer.actions.discardAll());
498
+ createFolder ({ section, name, parentId }) {
499
+ dispatch(reducer.actions.createFolder({
500
+ section,
501
+ name,
502
+ parentId,
503
+ id: contentStructure.generateGroupId()
504
+ }));
613
505
  },
614
- canUndo: state.past.length > 0,
615
- canRedo: state.future.length > 0,
616
- canDiscardAll: isModified
617
- }
618
- };
506
+ renameFolder (payload) {
507
+ dispatch(reducer.actions.renameFolder(payload));
508
+ },
509
+ moveFolder (payload) {
510
+ dispatch(reducer.actions.moveFolder(payload));
511
+ },
512
+ deleteFolderOnly (payload) {
513
+ dispatch(reducer.actions.deleteFolderOnly(payload));
514
+ },
515
+ deleteFolderAndContent ({ section, id, contentTypeUids }) {
516
+ dispatch(reducer.actions.deleteFolderAndContent({
517
+ section,
518
+ id,
519
+ contentTypeUids
520
+ }));
521
+ },
522
+ assignContentTypeToFolder (payload) {
523
+ dispatch(reducer.actions.assignContentTypeToFolder(payload));
524
+ },
525
+ reorderFolderChildren (payload) {
526
+ dispatch(reducer.actions.reorderFolderChildren(payload));
527
+ },
528
+ updateComponentSchema ({ data, componentUID }) {
529
+ dispatch(reducer.actions.updateComponentSchema({
530
+ data,
531
+ uid: componentUID
532
+ }));
533
+ },
534
+ updateComponentUid ({ componentUID, newComponentUID }) {
535
+ dispatch(reducer.actions.updateComponentUid({
536
+ uid: componentUID,
537
+ newComponentUID
538
+ }));
539
+ },
540
+ updateSchema (args) {
541
+ const { folder, ...rest } = args;
542
+ dispatch(reducer.actions.updateSchema({
543
+ ...rest,
544
+ folder: toFolderAssignment(folder)
545
+ }));
546
+ },
547
+ moveAttribute (args) {
548
+ dispatch(reducer.actions.moveAttribute(args));
549
+ },
550
+ async applyChange ({ action, schema }) {
551
+ const renames = schema.renames ?? [];
552
+ if (action !== 'update' || renames.length === 0) {
553
+ dispatch(reducer.actions.applyChange({
554
+ action,
555
+ schema
556
+ }));
557
+ return true;
558
+ }
559
+ const mode = renameMigrationModeRef.current;
560
+ if (mode === 'never') {
561
+ dispatch(reducer.actions.applyChange({
562
+ action,
563
+ schema: omit__default.default(schema, [
564
+ 'renames'
565
+ ])
566
+ }));
567
+ return true;
568
+ }
569
+ // 'always' | 'prompt-before-save': the before-save modal decides per chain.
570
+ if (mode !== 'prompt-after-edit') {
571
+ dispatch(reducer.actions.applyChange({
572
+ action,
573
+ schema
574
+ }));
575
+ return true;
576
+ }
577
+ // 'prompt-after-edit': decide per chain now, inheriting consent already
578
+ // given (or refused) for the hops recorded on the type.
579
+ const existing = schema.modelType === 'contentType' ? contentTypes[schema.uid] : components[schema.uid];
580
+ const chains = groupRenameChains.groupRenameChains(schema.uid, renames);
581
+ const { keep, prompt } = splitChainsByInheritedConsent.splitChainsByInheritedConsent({
582
+ recorded: existing?.renames ?? [],
583
+ declinedRenameNames: existing?.declinedRenameNames ?? [],
584
+ chains,
585
+ renames
586
+ });
587
+ const accepted = new Set(keep.map((chain)=>chain.id));
588
+ if (prompt.length > 0) {
589
+ const typeName = schema.info?.displayName ?? schema.uid;
590
+ const decision = await requestRenameDecision(prompt.map((chain)=>RenameMigrationModal.toPendingRename(chain, renames, {
591
+ uid: schema.uid,
592
+ typeName
593
+ })));
594
+ // The user cancelled: apply nothing.
595
+ if (decision === null) {
596
+ return false;
597
+ }
598
+ decision.forEach((id)=>accepted.add(id));
599
+ }
600
+ const declinedChains = chains.filter((chain)=>!accepted.has(chain.id));
601
+ const keptRenames = RenameMigrationModal.filterRenamesByAcceptedChains(schema.uid, renames, accepted);
602
+ const declinedRenameNames = uniq__default.default([
603
+ ...schema.declinedRenameNames ?? [],
604
+ ...splitChainsByInheritedConsent.namesOfChains(declinedChains, renames)
605
+ ]);
606
+ dispatch(reducer.actions.applyChange({
607
+ action,
608
+ schema: {
609
+ ...omit__default.default(schema, [
610
+ 'renames',
611
+ 'declinedRenameNames'
612
+ ]),
613
+ ...keptRenames.length > 0 ? {
614
+ renames: keptRenames
615
+ } : {},
616
+ ...declinedRenameNames.length > 0 ? {
617
+ declinedRenameNames
618
+ } : {}
619
+ }
620
+ }));
621
+ return true;
622
+ },
623
+ history: {
624
+ undo () {
625
+ dispatch(reducer.actions.undo());
626
+ },
627
+ redo () {
628
+ dispatch(reducer.actions.redo());
629
+ },
630
+ discardAllChanges () {
631
+ dispatch(reducer.actions.discardAll());
632
+ },
633
+ canUndo: state.past.length > 0,
634
+ canRedo: state.future.length > 0,
635
+ canDiscardAll: isModified
636
+ }
637
+ }), [
638
+ allComponentsCategories,
639
+ components,
640
+ componentsGroupedByCategory,
641
+ componentsThatHaveOtherComponentInTheirAttributes,
642
+ contentStructure$1,
643
+ contentTypes,
644
+ dispatch,
645
+ formatMessage,
646
+ initialComponents,
647
+ initialContentTypes,
648
+ isInDevelopmentMode,
649
+ isLoading,
650
+ isModified,
651
+ isSaving,
652
+ nestedComponents,
653
+ onCloseModal,
654
+ requestRenameDecision,
655
+ reservedNames,
656
+ saveSchema,
657
+ sortedContentTypesList,
658
+ state,
659
+ trackUsage
660
+ ]);
619
661
  return /*#__PURE__*/ jsxRuntime.jsxs(DataManagerContext.DataManagerContext.Provider, {
620
662
  value: context,
621
663
  children: [