@plone/volto 19.0.0-alpha.5 → 19.0.0-alpha.7

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 (123) hide show
  1. package/.eslintrc +20 -0
  2. package/CHANGELOG.md +73 -0
  3. package/README.md +2 -2
  4. package/cypress/support/commands.js +5 -6
  5. package/locales/af.json +1 -1
  6. package/locales/ar.json +1 -1
  7. package/locales/bg.json +1 -1
  8. package/locales/bn.json +1 -1
  9. package/locales/ca/LC_MESSAGES/volto.po +25 -5
  10. package/locales/ca.json +1 -1
  11. package/locales/cs.json +1 -1
  12. package/locales/cy.json +1 -1
  13. package/locales/da.json +1 -1
  14. package/locales/de/LC_MESSAGES/volto.po +25 -5
  15. package/locales/de.json +1 -1
  16. package/locales/el.json +1 -1
  17. package/locales/en/LC_MESSAGES/volto.po +25 -5
  18. package/locales/en.json +1 -1
  19. package/locales/en_AU.json +1 -1
  20. package/locales/en_GB.json +1 -1
  21. package/locales/eo.json +1 -1
  22. package/locales/es/LC_MESSAGES/volto.po +25 -5
  23. package/locales/es.json +1 -1
  24. package/locales/et.json +1 -1
  25. package/locales/eu/LC_MESSAGES/volto.po +25 -5
  26. package/locales/eu.json +1 -1
  27. package/locales/fa.json +1 -1
  28. package/locales/fi/LC_MESSAGES/volto.po +25 -5
  29. package/locales/fi.json +1 -1
  30. package/locales/fr/LC_MESSAGES/volto.po +25 -5
  31. package/locales/fr.json +1 -1
  32. package/locales/fu.json +1 -1
  33. package/locales/gl.json +1 -1
  34. package/locales/he.json +1 -1
  35. package/locales/hi/LC_MESSAGES/volto.po +25 -5
  36. package/locales/hi.json +1 -1
  37. package/locales/hr.json +1 -1
  38. package/locales/hu.json +1 -1
  39. package/locales/hy.json +1 -1
  40. package/locales/id.json +1 -1
  41. package/locales/it/LC_MESSAGES/volto.po +26 -6
  42. package/locales/it.json +1 -1
  43. package/locales/ja/LC_MESSAGES/volto.po +25 -5
  44. package/locales/ja.json +1 -1
  45. package/locales/ka.json +1 -1
  46. package/locales/kn.json +1 -1
  47. package/locales/ko.json +1 -1
  48. package/locales/lt.json +1 -1
  49. package/locales/lv.json +1 -1
  50. package/locales/mi.json +1 -1
  51. package/locales/mk.json +1 -1
  52. package/locales/my.json +1 -1
  53. package/locales/nb_NO.json +1 -1
  54. package/locales/nl/LC_MESSAGES/volto.po +25 -5
  55. package/locales/nl.json +1 -1
  56. package/locales/nn.json +1 -1
  57. package/locales/pl.json +1 -1
  58. package/locales/pt/LC_MESSAGES/volto.po +25 -5
  59. package/locales/pt.json +1 -1
  60. package/locales/pt_BR/LC_MESSAGES/volto.po +36 -16
  61. package/locales/pt_BR.json +1 -1
  62. package/locales/rm.json +1 -1
  63. package/locales/ro/LC_MESSAGES/volto.po +25 -5
  64. package/locales/ro.json +1 -1
  65. package/locales/ru/LC_MESSAGES/volto.po +25 -5
  66. package/locales/ru.json +1 -1
  67. package/locales/sk.json +1 -1
  68. package/locales/sl.json +1 -1
  69. package/locales/sm.json +1 -1
  70. package/locales/sq.json +1 -1
  71. package/locales/sr.json +1 -1
  72. package/locales/sr@cyrl.json +1 -1
  73. package/locales/sr@latn.json +1 -1
  74. package/locales/sv.json +1 -1
  75. package/locales/ta.json +1 -1
  76. package/locales/te.json +1 -1
  77. package/locales/th.json +1 -1
  78. package/locales/to.json +1 -1
  79. package/locales/tr.json +1 -1
  80. package/locales/uk.json +1 -1
  81. package/locales/vi.json +1 -1
  82. package/locales/volto.pot +26 -6
  83. package/locales/zh_CN/LC_MESSAGES/volto.po +25 -5
  84. package/locales/zh_CN.json +1 -1
  85. package/locales/zh_Hant.json +1 -1
  86. package/locales/zh_Hant_HK.json +1 -1
  87. package/package.json +10 -10
  88. package/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +9 -4
  89. package/src/components/manage/Blocks/LeadImage/Edit.jsx +2 -2
  90. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +1 -1
  91. package/src/components/manage/Blocks/Maps/Edit.jsx +2 -1
  92. package/src/components/manage/Blocks/Teaser/Data.jsx +20 -6
  93. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +1 -1
  94. package/src/components/manage/Blocks/Video/Edit.jsx +2 -1
  95. package/src/components/manage/Contents/Contents.jsx +20 -2
  96. package/src/components/manage/Controlpanels/ContentType.jsx +1 -1
  97. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +3 -2
  98. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +156 -175
  99. package/src/components/manage/Sidebar/ObjectBrowserNav.jsx +2 -1
  100. package/src/components/manage/TemplateChooser/TemplateChooser.jsx +2 -1
  101. package/src/components/manage/Toolbar/PersonalTools.jsx +2 -1
  102. package/src/components/manage/Widgets/DatetimeWidget.jsx +5 -0
  103. package/src/components/manage/Widgets/FileWidget.jsx +14 -8
  104. package/src/components/manage/Widgets/ImageWidget.jsx +2 -2
  105. package/src/components/manage/Widgets/InternalUrlWidget.jsx +2 -0
  106. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +3 -0
  107. package/src/components/manage/Widgets/UrlWidget.jsx +2 -0
  108. package/src/components/theme/Avatar/Avatar.jsx +2 -1
  109. package/src/components/theme/PreviewImage/PreviewImage.jsx +1 -1
  110. package/src/components/theme/Widgets/ImageWidget.jsx +2 -1
  111. package/src/helpers/Content/withClientSideContent.jsx +35 -0
  112. package/src/helpers/Html/Html.jsx +1 -9
  113. package/src/helpers/MessageLabels/MessageLabels.js +5 -0
  114. package/src/middleware/api.js +3 -3
  115. package/src/routes.js +3 -1
  116. package/theme/themes/pastanaga/extras/contents.less +12 -0
  117. package/theme/themes/pastanaga/extras/main.less +4 -0
  118. package/types/components/manage/Controlpanels/Users/RenderUsers.d.ts +18 -2
  119. package/types/components/manage/Controlpanels/index.d.ts +1 -1
  120. package/types/helpers/Content/withClientSideContent.d.ts +1 -0
  121. package/types/helpers/MessageLabels/MessageLabels.d.ts +68 -62
  122. package/src/helpers/Url/bulkFlattenToAppURL.test.ts +0 -122
  123. package/src/helpers/Url/bulkFlattenToAppURL.ts +0 -24
@@ -219,376 +219,382 @@ export namespace messages {
219
219
  let defaultMessage_36: string;
220
220
  export { defaultMessage_36 as defaultMessage };
221
221
  }
222
- namespace addGroupsFormDescriptionTitle {
222
+ namespace addGroupsFormGroupNameDescription {
223
223
  let id_37: string;
224
224
  export { id_37 as id };
225
225
  let defaultMessage_37: string;
226
226
  export { defaultMessage_37 as defaultMessage };
227
227
  }
228
- namespace addUserFormEmailTitle {
228
+ namespace addGroupsFormDescriptionTitle {
229
229
  let id_38: string;
230
230
  export { id_38 as id };
231
231
  let defaultMessage_38: string;
232
232
  export { defaultMessage_38 as defaultMessage };
233
233
  }
234
- namespace addGroupsFormEmailTitle {
234
+ namespace addUserFormEmailTitle {
235
235
  let id_39: string;
236
236
  export { id_39 as id };
237
237
  let defaultMessage_39: string;
238
238
  export { defaultMessage_39 as defaultMessage };
239
239
  }
240
- namespace addUserFormPasswordTitle {
240
+ namespace addGroupsFormEmailTitle {
241
241
  let id_40: string;
242
242
  export { id_40 as id };
243
243
  let defaultMessage_40: string;
244
244
  export { defaultMessage_40 as defaultMessage };
245
245
  }
246
- namespace addUserFormSendPasswordResetTitle {
246
+ namespace addUserFormPasswordTitle {
247
247
  let id_41: string;
248
248
  export { id_41 as id };
249
249
  let defaultMessage_41: string;
250
250
  export { defaultMessage_41 as defaultMessage };
251
251
  }
252
- namespace addUserFormRolesTitle {
252
+ namespace addUserFormSendPasswordResetTitle {
253
253
  let id_42: string;
254
254
  export { id_42 as id };
255
255
  let defaultMessage_42: string;
256
256
  export { defaultMessage_42 as defaultMessage };
257
257
  }
258
- namespace addUserFormPasswordAndSendPasswordTogetherNotAllowed {
258
+ namespace addUserFormRolesTitle {
259
259
  let id_43: string;
260
260
  export { id_43 as id };
261
261
  let defaultMessage_43: string;
262
262
  export { defaultMessage_43 as defaultMessage };
263
263
  }
264
- namespace userSearchNoResults {
264
+ namespace addUserFormPasswordAndSendPasswordTogetherNotAllowed {
265
265
  let id_44: string;
266
266
  export { id_44 as id };
267
267
  let defaultMessage_44: string;
268
268
  export { defaultMessage_44 as defaultMessage };
269
269
  }
270
- namespace groupSearchNoResults {
270
+ namespace userSearchNoResults {
271
271
  let id_45: string;
272
272
  export { id_45 as id };
273
273
  let defaultMessage_45: string;
274
274
  export { defaultMessage_45 as defaultMessage };
275
275
  }
276
- namespace updateUserFormTitle {
276
+ namespace groupSearchNoResults {
277
277
  let id_46: string;
278
278
  export { id_46 as id };
279
279
  let defaultMessage_46: string;
280
280
  export { defaultMessage_46 as defaultMessage };
281
281
  }
282
- namespace updateUserSuccess {
282
+ namespace updateUserFormTitle {
283
283
  let id_47: string;
284
284
  export { id_47 as id };
285
285
  let defaultMessage_47: string;
286
286
  export { defaultMessage_47 as defaultMessage };
287
287
  }
288
- namespace updateRoles {
288
+ namespace updateUserSuccess {
289
289
  let id_48: string;
290
290
  export { id_48 as id };
291
291
  let defaultMessage_48: string;
292
292
  export { defaultMessage_48 as defaultMessage };
293
293
  }
294
- namespace updateGroups {
294
+ namespace updateRoles {
295
295
  let id_49: string;
296
296
  export { id_49 as id };
297
297
  let defaultMessage_49: string;
298
298
  export { defaultMessage_49 as defaultMessage };
299
299
  }
300
- namespace addGroupsFormRolesTitle {
300
+ namespace updateGroups {
301
301
  let id_50: string;
302
302
  export { id_50 as id };
303
303
  let defaultMessage_50: string;
304
304
  export { defaultMessage_50 as defaultMessage };
305
305
  }
306
- namespace success {
306
+ namespace addGroupsFormRolesTitle {
307
307
  let id_51: string;
308
308
  export { id_51 as id };
309
309
  let defaultMessage_51: string;
310
310
  export { defaultMessage_51 as defaultMessage };
311
311
  }
312
- namespace userCreated {
312
+ namespace success {
313
313
  let id_52: string;
314
314
  export { id_52 as id };
315
315
  let defaultMessage_52: string;
316
316
  export { defaultMessage_52 as defaultMessage };
317
317
  }
318
- namespace userDeleted {
318
+ namespace userCreated {
319
319
  let id_53: string;
320
320
  export { id_53 as id };
321
321
  let defaultMessage_53: string;
322
322
  export { defaultMessage_53 as defaultMessage };
323
323
  }
324
- namespace groupCreated {
324
+ namespace userDeleted {
325
325
  let id_54: string;
326
326
  export { id_54 as id };
327
327
  let defaultMessage_54: string;
328
328
  export { defaultMessage_54 as defaultMessage };
329
329
  }
330
- namespace users {
330
+ namespace groupCreated {
331
331
  let id_55: string;
332
332
  export { id_55 as id };
333
333
  let defaultMessage_55: string;
334
334
  export { defaultMessage_55 as defaultMessage };
335
335
  }
336
- namespace usergroup {
336
+ namespace users {
337
337
  let id_56: string;
338
338
  export { id_56 as id };
339
339
  let defaultMessage_56: string;
340
340
  export { defaultMessage_56 as defaultMessage };
341
341
  }
342
- namespace usergroupmemberbership {
342
+ namespace usergroup {
343
343
  let id_57: string;
344
344
  export { id_57 as id };
345
345
  let defaultMessage_57: string;
346
346
  export { defaultMessage_57 as defaultMessage };
347
347
  }
348
- namespace membershipUpdated {
348
+ namespace usergroupmemberbership {
349
349
  let id_58: string;
350
350
  export { id_58 as id };
351
351
  let defaultMessage_58: string;
352
352
  export { defaultMessage_58 as defaultMessage };
353
353
  }
354
- namespace noUserFound {
354
+ namespace membershipUpdated {
355
355
  let id_59: string;
356
356
  export { id_59 as id };
357
357
  let defaultMessage_59: string;
358
358
  export { defaultMessage_59 as defaultMessage };
359
359
  }
360
- namespace pleaseSearchOrFilterUsers {
360
+ namespace noUserFound {
361
361
  let id_60: string;
362
362
  export { id_60 as id };
363
363
  let defaultMessage_60: string;
364
364
  export { defaultMessage_60 as defaultMessage };
365
365
  }
366
- namespace addUsersToGroup {
366
+ namespace pleaseSearchOrFilterUsers {
367
367
  let id_61: string;
368
368
  export { id_61 as id };
369
369
  let defaultMessage_61: string;
370
370
  export { defaultMessage_61 as defaultMessage };
371
371
  }
372
- namespace removeUsersFromGroup {
372
+ namespace addUsersToGroup {
373
373
  let id_62: string;
374
374
  export { id_62 as id };
375
375
  let defaultMessage_62: string;
376
376
  export { defaultMessage_62 as defaultMessage };
377
377
  }
378
- namespace groups {
378
+ namespace removeUsersFromGroup {
379
379
  let id_63: string;
380
380
  export { id_63 as id };
381
381
  let defaultMessage_63: string;
382
382
  export { defaultMessage_63 as defaultMessage };
383
383
  }
384
- namespace copyBlocks {
384
+ namespace groups {
385
385
  let id_64: string;
386
386
  export { id_64 as id };
387
387
  let defaultMessage_64: string;
388
388
  export { defaultMessage_64 as defaultMessage };
389
389
  }
390
- namespace cutBlocks {
390
+ namespace copyBlocks {
391
391
  let id_65: string;
392
392
  export { id_65 as id };
393
393
  let defaultMessage_65: string;
394
394
  export { defaultMessage_65 as defaultMessage };
395
395
  }
396
- namespace pasteBlocks {
396
+ namespace cutBlocks {
397
397
  let id_66: string;
398
398
  export { id_66 as id };
399
399
  let defaultMessage_66: string;
400
400
  export { defaultMessage_66 as defaultMessage };
401
401
  }
402
- namespace deleteBlocks {
402
+ namespace pasteBlocks {
403
403
  let id_67: string;
404
404
  export { id_67 as id };
405
405
  let defaultMessage_67: string;
406
406
  export { defaultMessage_67 as defaultMessage };
407
407
  }
408
- namespace showAllUserButton {
408
+ namespace deleteBlocks {
409
409
  let id_68: string;
410
410
  export { id_68 as id };
411
411
  let defaultMessage_68: string;
412
412
  export { defaultMessage_68 as defaultMessage };
413
413
  }
414
- namespace showAllUserText {
414
+ namespace showAllUserButton {
415
415
  let id_69: string;
416
416
  export { id_69 as id };
417
417
  let defaultMessage_69: string;
418
418
  export { defaultMessage_69 as defaultMessage };
419
419
  }
420
- namespace addJoinedGroups {
420
+ namespace showAllUserText {
421
421
  let id_70: string;
422
422
  export { id_70 as id };
423
423
  let defaultMessage_70: string;
424
424
  export { defaultMessage_70 as defaultMessage };
425
425
  }
426
- namespace urlClipboardCopy {
426
+ namespace addJoinedGroups {
427
427
  let id_71: string;
428
428
  export { id_71 as id };
429
429
  let defaultMessage_71: string;
430
430
  export { defaultMessage_71 as defaultMessage };
431
431
  }
432
- namespace inspectRelations {
432
+ namespace urlClipboardCopy {
433
433
  let id_72: string;
434
434
  export { id_72 as id };
435
435
  let defaultMessage_72: string;
436
436
  export { defaultMessage_72 as defaultMessage };
437
437
  }
438
- namespace relations {
438
+ namespace inspectRelations {
439
439
  let id_73: string;
440
440
  export { id_73 as id };
441
441
  let defaultMessage_73: string;
442
442
  export { defaultMessage_73 as defaultMessage };
443
443
  }
444
- namespace fixRelations {
444
+ namespace relations {
445
445
  let id_74: string;
446
446
  export { id_74 as id };
447
447
  let defaultMessage_74: string;
448
448
  export { defaultMessage_74 as defaultMessage };
449
449
  }
450
- namespace searchRelationSource {
450
+ namespace fixRelations {
451
451
  let id_75: string;
452
452
  export { id_75 as id };
453
453
  let defaultMessage_75: string;
454
454
  export { defaultMessage_75 as defaultMessage };
455
455
  }
456
- namespace searchRelationTarget {
456
+ namespace searchRelationSource {
457
457
  let id_76: string;
458
458
  export { id_76 as id };
459
459
  let defaultMessage_76: string;
460
460
  export { defaultMessage_76 as defaultMessage };
461
461
  }
462
- namespace createOrDeleteRelationsToTarget {
462
+ namespace searchRelationTarget {
463
463
  let id_77: string;
464
464
  export { id_77 as id };
465
465
  let defaultMessage_77: string;
466
466
  export { defaultMessage_77 as defaultMessage };
467
467
  }
468
- namespace relationName {
468
+ namespace createOrDeleteRelationsToTarget {
469
469
  let id_78: string;
470
470
  export { id_78 as id };
471
471
  let defaultMessage_78: string;
472
472
  export { defaultMessage_78 as defaultMessage };
473
473
  }
474
- namespace selectRelation {
474
+ namespace relationName {
475
475
  let id_79: string;
476
476
  export { id_79 as id };
477
477
  let defaultMessage_79: string;
478
478
  export { defaultMessage_79 as defaultMessage };
479
479
  }
480
- namespace norelationfound {
480
+ namespace selectRelation {
481
481
  let id_80: string;
482
482
  export { id_80 as id };
483
483
  let defaultMessage_80: string;
484
484
  export { defaultMessage_80 as defaultMessage };
485
485
  }
486
- namespace toomanyrelationsfound {
486
+ namespace norelationfound {
487
487
  let id_81: string;
488
488
  export { id_81 as id };
489
489
  let defaultMessage_81: string;
490
490
  export { defaultMessage_81 as defaultMessage };
491
491
  }
492
- namespace rebuildRelations {
492
+ namespace toomanyrelationsfound {
493
493
  let id_82: string;
494
494
  export { id_82 as id };
495
495
  let defaultMessage_82: string;
496
496
  export { defaultMessage_82 as defaultMessage };
497
497
  }
498
- namespace flushAndRebuildRelations {
498
+ namespace rebuildRelations {
499
499
  let id_83: string;
500
500
  export { id_83 as id };
501
501
  let defaultMessage_83: string;
502
502
  export { defaultMessage_83 as defaultMessage };
503
503
  }
504
- namespace flushAndRebuildRelationsHints {
504
+ namespace flushAndRebuildRelations {
505
505
  let id_84: string;
506
506
  export { id_84 as id };
507
507
  let defaultMessage_84: string;
508
508
  export { defaultMessage_84 as defaultMessage };
509
509
  }
510
- namespace addPotentialTargetsPath {
510
+ namespace flushAndRebuildRelationsHints {
511
511
  let id_85: string;
512
512
  export { id_85 as id };
513
513
  let defaultMessage_85: string;
514
514
  export { defaultMessage_85 as defaultMessage };
515
515
  }
516
- namespace addPotentialSourcesPath {
516
+ namespace addPotentialTargetsPath {
517
517
  let id_86: string;
518
518
  export { id_86 as id };
519
519
  let defaultMessage_86: string;
520
520
  export { defaultMessage_86 as defaultMessage };
521
521
  }
522
- namespace relationsUpdated {
522
+ namespace addPotentialSourcesPath {
523
523
  let id_87: string;
524
524
  export { id_87 as id };
525
525
  let defaultMessage_87: string;
526
526
  export { defaultMessage_87 as defaultMessage };
527
527
  }
528
- namespace select {
528
+ namespace relationsUpdated {
529
529
  let id_88: string;
530
530
  export { id_88 as id };
531
531
  let defaultMessage_88: string;
532
532
  export { defaultMessage_88 as defaultMessage };
533
533
  }
534
- namespace selected {
534
+ namespace select {
535
535
  let id_89: string;
536
536
  export { id_89 as id };
537
537
  let defaultMessage_89: string;
538
538
  export { defaultMessage_89 as defaultMessage };
539
539
  }
540
- namespace filter {
540
+ namespace selected {
541
541
  let id_90: string;
542
542
  export { id_90 as id };
543
543
  let defaultMessage_90: string;
544
544
  export { defaultMessage_90 as defaultMessage };
545
545
  }
546
- namespace fileTooLarge {
546
+ namespace filter {
547
547
  let id_91: string;
548
548
  export { id_91 as id };
549
549
  let defaultMessage_91: string;
550
550
  export { defaultMessage_91 as defaultMessage };
551
551
  }
552
- namespace blocksFieldsErrorTitle {
552
+ namespace fileTooLarge {
553
553
  let id_92: string;
554
554
  export { id_92 as id };
555
555
  let defaultMessage_92: string;
556
556
  export { defaultMessage_92 as defaultMessage };
557
557
  }
558
- namespace startEventRange {
558
+ namespace blocksFieldsErrorTitle {
559
559
  let id_93: string;
560
560
  export { id_93 as id };
561
561
  let defaultMessage_93: string;
562
562
  export { defaultMessage_93 as defaultMessage };
563
563
  }
564
- namespace endEventRange {
564
+ namespace startEventRange {
565
565
  let id_94: string;
566
566
  export { id_94 as id };
567
567
  let defaultMessage_94: string;
568
568
  export { defaultMessage_94 as defaultMessage };
569
569
  }
570
- namespace pattern {
570
+ namespace endEventRange {
571
571
  let id_95: string;
572
572
  export { id_95 as id };
573
573
  let defaultMessage_95: string;
574
574
  export { defaultMessage_95 as defaultMessage };
575
575
  }
576
- namespace maxItems {
576
+ namespace pattern {
577
577
  let id_96: string;
578
578
  export { id_96 as id };
579
579
  let defaultMessage_96: string;
580
580
  export { defaultMessage_96 as defaultMessage };
581
581
  }
582
- namespace minItems {
582
+ namespace maxItems {
583
583
  let id_97: string;
584
584
  export { id_97 as id };
585
585
  let defaultMessage_97: string;
586
586
  export { defaultMessage_97 as defaultMessage };
587
587
  }
588
- namespace defaultLanguage {
588
+ namespace minItems {
589
589
  let id_98: string;
590
590
  export { id_98 as id };
591
591
  let defaultMessage_98: string;
592
592
  export { defaultMessage_98 as defaultMessage };
593
593
  }
594
+ namespace defaultLanguage {
595
+ let id_99: string;
596
+ export { id_99 as id };
597
+ let defaultMessage_99: string;
598
+ export { defaultMessage_99 as defaultMessage };
599
+ }
594
600
  }
@@ -1,122 +0,0 @@
1
- import { describe, it, expect, afterEach } from 'vitest';
2
- import config from '@plone/registry';
3
- import { bulkFlattenToAppURL } from './bulkFlattenToAppURL';
4
-
5
- const API_PATH = 'http://example.com/api';
6
- const INTERNAL_API_PATH = 'http://backend/api';
7
-
8
- describe('bulkFlattenToAppURL', () => {
9
- afterEach(() => {
10
- config.settings = {};
11
- });
12
-
13
- it('should flatten URLs correctly with API_PATH', () => {
14
- config.settings.apiPath = API_PATH;
15
-
16
- const input = {
17
- '@id': `${API_PATH}/path/to/resource`,
18
- anotherField: `${API_PATH}/another/path`,
19
- nested: {
20
- '@id': `${API_PATH}/nested/resource`,
21
- anotherNestedField: `${API_PATH}/nested/another/path`,
22
- },
23
- arrayField: [
24
- {
25
- '@id': `${API_PATH}/array/resource/1`,
26
- anotherArrayField: `${API_PATH}/array/another/path/1`,
27
- },
28
- {
29
- '@id': `${API_PATH}/array/resource/2`,
30
- anotherArrayField: `${API_PATH}/array/another/path/2`,
31
- },
32
- ],
33
- stringField: 'This is a string',
34
- numberField: 42,
35
- booleanField: true,
36
- nullField: null,
37
- undefinedField: undefined,
38
- };
39
-
40
- const expectedOutput = {
41
- '@id': '/path/to/resource',
42
- anotherField: '/another/path',
43
- nested: {
44
- '@id': '/nested/resource',
45
- anotherNestedField: '/nested/another/path',
46
- },
47
- arrayField: [
48
- {
49
- '@id': '/array/resource/1',
50
- anotherArrayField: '/array/another/path/1',
51
- },
52
- {
53
- '@id': '/array/resource/2',
54
- anotherArrayField: '/array/another/path/2',
55
- },
56
- ],
57
- stringField: 'This is a string',
58
- numberField: 42,
59
- booleanField: true,
60
- nullField: null,
61
- undefinedField: undefined,
62
- };
63
-
64
- const result = bulkFlattenToAppURL(input as any);
65
- expect(result).toEqual(expectedOutput);
66
- });
67
-
68
- it('should flatten URLs correctly with INTERNAL_API_PATH', () => {
69
- config.settings.internalApiPath = INTERNAL_API_PATH;
70
-
71
- const input = {
72
- '@id': `${INTERNAL_API_PATH}/path/to/resource`,
73
- anotherField: `${INTERNAL_API_PATH}/another/path`,
74
- nested: {
75
- '@id': `${INTERNAL_API_PATH}/nested/resource`,
76
- anotherNestedField: `${INTERNAL_API_PATH}/nested/another/path`,
77
- },
78
- arrayField: [
79
- {
80
- '@id': `${INTERNAL_API_PATH}/array/resource/1`,
81
- anotherArrayField: `${INTERNAL_API_PATH}/array/another/path/1`,
82
- },
83
- {
84
- '@id': `${INTERNAL_API_PATH}/array/resource/2`,
85
- anotherArrayField: `${INTERNAL_API_PATH}/array/another/path/2`,
86
- },
87
- ],
88
- stringField: 'This is a string',
89
- numberField: 42,
90
- booleanField: true,
91
- nullField: null,
92
- undefinedField: undefined,
93
- };
94
-
95
- const expectedOutput = {
96
- '@id': '/path/to/resource',
97
- anotherField: '/another/path',
98
- nested: {
99
- '@id': '/nested/resource',
100
- anotherNestedField: '/nested/another/path',
101
- },
102
- arrayField: [
103
- {
104
- '@id': '/array/resource/1',
105
- anotherArrayField: '/array/another/path/1',
106
- },
107
- {
108
- '@id': '/array/resource/2',
109
- anotherArrayField: '/array/another/path/2',
110
- },
111
- ],
112
- stringField: 'This is a string',
113
- numberField: 42,
114
- booleanField: true,
115
- nullField: null,
116
- undefinedField: undefined,
117
- };
118
-
119
- const result = bulkFlattenToAppURL(input as any);
120
- expect(result).toEqual(expectedOutput);
121
- });
122
- });
@@ -1,24 +0,0 @@
1
- import config from '@plone/registry';
2
-
3
- /**
4
- * The definitive flattenToAppURL function
5
- * Flattens all the URLs in the response to the current app URL (or internalApiPath if set).
6
- */
7
- export function bulkFlattenToAppURL<T>(data: T) {
8
- // Convert data to string to perform replacements
9
- let stringData = JSON.stringify(data);
10
-
11
- // Replace all occurrences of backend URLs
12
- stringData = stringData.replaceAll(`${config.settings.apiPath}/`, '/');
13
- stringData = stringData.replaceAll(config.settings.apiPath, '/');
14
- if (config.settings.internalApiPath) {
15
- stringData = stringData.replaceAll(
16
- `${config.settings.internalApiPath}/`,
17
- '/',
18
- );
19
- stringData = stringData.replaceAll(config.settings.internalApiPath, '/');
20
- }
21
-
22
- // Parse back to object
23
- return JSON.parse(stringData) as T;
24
- }