@webiny/app-admin 6.5.0-beta.4 → 6.5.0-beta.6

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 (92) hide show
  1. package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +2 -2
  2. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.d.ts +2 -2
  3. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +1 -1
  4. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
  5. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +8 -4
  6. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +2 -2
  7. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +1 -1
  8. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  9. package/base/Base/FieldRenderers/ObjectRenderer/{TemplatePicker.d.ts → TemplatePicker/AddTemplateButton.d.ts} +1 -1
  10. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js +24 -0
  11. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js.map +1 -0
  12. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.d.ts +13 -0
  13. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js +21 -0
  14. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js.map +1 -0
  15. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.d.ts +3 -0
  16. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js +35 -0
  17. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js.map +1 -0
  18. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.d.ts +8 -0
  19. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js +22 -0
  20. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js.map +1 -0
  21. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.d.ts +10 -0
  22. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js +46 -0
  23. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js.map +1 -0
  24. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.d.ts +8 -0
  25. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js +16 -0
  26. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js.map +1 -0
  27. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.d.ts +10 -0
  28. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js +22 -0
  29. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js.map +1 -0
  30. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.d.ts +3 -0
  31. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js +35 -0
  32. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js.map +1 -0
  33. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.d.ts +1 -0
  34. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.js +1 -0
  35. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.d.ts +6 -0
  36. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.js +0 -0
  37. package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +2 -2
  38. package/components/IconPicker/IconPickerComponent.d.ts +2 -2
  39. package/components/IconPicker/IconPickerComponent.js +1 -1
  40. package/components/IconPicker/IconPickerComponent.js.map +1 -1
  41. package/components/ListView/ListViewBulkActions.d.ts +2 -2
  42. package/components/ListView/ListViewContent.d.ts +2 -2
  43. package/components/ListView/ListViewFilters.d.ts +2 -2
  44. package/components/ListView/index.d.ts +6 -6
  45. package/components/RolesMultiAutocomplete/index.js +1 -1
  46. package/components/RolesMultiAutocomplete/index.js.map +1 -1
  47. package/components/Table/components/Table/TableInner.d.ts +2 -2
  48. package/components/TeamsMultiAutocomplete/index.js +1 -1
  49. package/components/TeamsMultiAutocomplete/index.js.map +1 -1
  50. package/domain/Identity.js +1 -1
  51. package/domain/Identity.js.map +1 -1
  52. package/features/debugger/Debugger.d.ts +2 -2
  53. package/features/debugger/DebuggerIndicator.d.ts +2 -2
  54. package/features/debugger/DebuggerView.d.ts +2 -2
  55. package/features/formModel/FieldBuilder.test.js +13 -0
  56. package/features/formModel/FieldBuilder.test.js.map +1 -1
  57. package/features/formModel/FormErrors.d.ts +2 -2
  58. package/features/formModel/FormModel.test.js +205 -2
  59. package/features/formModel/FormModel.test.js.map +1 -1
  60. package/features/formModel/FormView.d.ts +8 -4
  61. package/features/formModel/ObjectField.d.ts +2 -0
  62. package/features/formModel/ObjectField.js +19 -3
  63. package/features/formModel/ObjectField.js.map +1 -1
  64. package/features/formModel/PresenterErrors.d.ts +2 -2
  65. package/features/formModel/abstractions.d.ts +16 -0
  66. package/features/formModel/abstractions.js.map +1 -1
  67. package/features/formModel/demo/FormModelDemo.d.ts +2 -2
  68. package/features/formModel/fieldTypes/DateTimeFieldType.js +5 -4
  69. package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
  70. package/features/formModel/fieldTypes/ObjectFieldType.d.ts +3 -1
  71. package/features/formModel/fieldTypes/ObjectFieldType.js +23 -1
  72. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
  73. package/features/notifications/NotificationsRenderer.d.ts +2 -2
  74. package/hooks/useSnackbar.js.map +1 -1
  75. package/package.json +34 -34
  76. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +1 -2
  77. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
  78. package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +2 -2
  79. package/presentation/accessManagement/roles/RolesPresenter.js +1 -2
  80. package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
  81. package/presentation/accessManagement/roles/components/RolesView.d.ts +2 -2
  82. package/presentation/accessManagement/teams/TeamsPresenter.js +1 -2
  83. package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
  84. package/presentation/accessManagement/teams/components/TeamsView.d.ts +2 -2
  85. package/presentation/installation/components/SystemInstaller/SystemInstaller.d.ts +2 -2
  86. package/presentation/listPresenter/QueryMatcher.js +3 -3
  87. package/presentation/listPresenter/QueryMatcher.js.map +1 -1
  88. package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +2 -2
  89. package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +2 -2
  90. package/presentation/trashBin/components/TrashBinOverlay.d.ts +2 -2
  91. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +0 -68
  92. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +0 -1
@@ -1834,7 +1834,7 @@ describe("FormModel", ()=>{
1834
1834
  return createForm({
1835
1835
  fields: (fields)=>({
1836
1836
  content: fields.object().label("Content").template("hero", (t)=>{
1837
- t.label("Hero Banner").fields((f)=>({
1837
+ t.label("Hero Banner").description("Large heading with an image").fields((f)=>({
1838
1838
  heading: f.text().label("Heading").required("Required"),
1839
1839
  image: f.text().label("Image")
1840
1840
  }));
@@ -1861,7 +1861,8 @@ describe("FormModel", ()=>{
1861
1861
  expect(vm.availableTemplates).toEqual([
1862
1862
  {
1863
1863
  id: "hero",
1864
- label: "Hero Banner"
1864
+ label: "Hero Banner",
1865
+ description: "Large heading with an image"
1865
1866
  },
1866
1867
  {
1867
1868
  id: "text",
@@ -2732,6 +2733,190 @@ describe("FormModel", ()=>{
2732
2733
  });
2733
2734
  });
2734
2735
  });
2736
+ describe("inner layouts declared on the field builder", ()=>{
2737
+ it("lays out a single object's children with .layout()", ()=>{
2738
+ const form = createForm({
2739
+ fields: (fields)=>({
2740
+ address: fields.object().fields((f)=>({
2741
+ street: f.text().label("Street"),
2742
+ city: f.text().label("City"),
2743
+ zip: f.text().label("Zip")
2744
+ })).layout((l)=>[
2745
+ l.row("street"),
2746
+ l.row("city", "zip")
2747
+ ])
2748
+ })
2749
+ });
2750
+ const vm = form.field("address").vm;
2751
+ expect(vm.layout.map((node)=>asRow(node).fields.map((f)=>f.name))).toEqual([
2752
+ [
2753
+ "street"
2754
+ ],
2755
+ [
2756
+ "city",
2757
+ "zip"
2758
+ ]
2759
+ ]);
2760
+ });
2761
+ it("applies .layout() to every list item", ()=>{
2762
+ const form = createForm({
2763
+ fields: (fields)=>({
2764
+ stats: fields.object().list().fields((f)=>({
2765
+ value: f.number().label("Value"),
2766
+ label: f.text().label("Label")
2767
+ })).layout((l)=>[
2768
+ l.row("value", "label")
2769
+ ])
2770
+ })
2771
+ });
2772
+ form.setData({
2773
+ stats: [
2774
+ {
2775
+ value: 1,
2776
+ label: "A"
2777
+ },
2778
+ {
2779
+ value: 2,
2780
+ label: "B"
2781
+ }
2782
+ ]
2783
+ });
2784
+ const vm = form.field("stats").vm;
2785
+ expect(vm.items).toHaveLength(2);
2786
+ for (const item of vm.items)expect(item.layout.map((node)=>asRow(node).fields.map((f)=>f.name))).toEqual([
2787
+ [
2788
+ "value",
2789
+ "label"
2790
+ ]
2791
+ ]);
2792
+ });
2793
+ it("lays out an object nested in another object with its own .layout()", ()=>{
2794
+ const form = createForm({
2795
+ fields: (fields)=>({
2796
+ subMenu: fields.object().fields((f)=>({
2797
+ climbing: f.object().list().fields((c)=>({
2798
+ label: c.text().label("Label"),
2799
+ url: c.text().label("URL")
2800
+ })).layout((l)=>[
2801
+ l.row("label", "url")
2802
+ ]),
2803
+ yoga: f.text().label("Yoga")
2804
+ })).layout((l)=>[
2805
+ l.row("climbing", "yoga")
2806
+ ])
2807
+ })
2808
+ });
2809
+ form.setData({
2810
+ subMenu: {
2811
+ climbing: [
2812
+ {
2813
+ label: "Classes",
2814
+ url: "/c"
2815
+ }
2816
+ ],
2817
+ yoga: ""
2818
+ }
2819
+ });
2820
+ const outer = form.field("subMenu").vm;
2821
+ expect(asRow(outer.layout[0]).fields.map((f)=>f.name)).toEqual([
2822
+ "climbing",
2823
+ "yoga"
2824
+ ]);
2825
+ const inner = form.field("subMenu.climbing").vm;
2826
+ expect(asRow(inner.items[0].layout[0]).fields.map((f)=>f.name)).toEqual([
2827
+ "label",
2828
+ "url"
2829
+ ]);
2830
+ });
2831
+ it("lets a layout.object() node override the field's .layout()", ()=>{
2832
+ const form = createForm({
2833
+ fields: (fields)=>({
2834
+ meta: fields.object().fields((f)=>({
2835
+ a: f.text().label("A"),
2836
+ b: f.text().label("B")
2837
+ })).layout((l)=>[
2838
+ l.row("a", "b")
2839
+ ])
2840
+ }),
2841
+ layout: (layout)=>[
2842
+ layout.object("meta", (l)=>[
2843
+ l.row("b"),
2844
+ l.row("a")
2845
+ ])
2846
+ ]
2847
+ });
2848
+ const vm = form.field("meta").vm;
2849
+ expect(vm.layout.map((node)=>asRow(node).fields.map((f)=>f.name))).toEqual([
2850
+ [
2851
+ "b"
2852
+ ],
2853
+ [
2854
+ "a"
2855
+ ]
2856
+ ]);
2857
+ });
2858
+ it("uses the layout declared on each template", ()=>{
2859
+ const form = createForm({
2860
+ fields: (fields)=>({
2861
+ content: fields.object().template("hero", (t)=>{
2862
+ t.label("Hero").fields((f)=>({
2863
+ heading: f.text().label("Heading"),
2864
+ subheading: f.text().label("Subheading")
2865
+ })).layout((l)=>[
2866
+ l.row("heading", "subheading")
2867
+ ]);
2868
+ }).template("cta", (t)=>{
2869
+ t.label("CTA").fields((f)=>({
2870
+ text: f.text().label("Text"),
2871
+ url: f.text().label("URL")
2872
+ })).layout((l)=>[
2873
+ l.row("url", "text")
2874
+ ]);
2875
+ })
2876
+ }),
2877
+ layout: (layout)=>[
2878
+ layout.object("content", {
2879
+ hero: (l)=>[
2880
+ l.row("subheading"),
2881
+ l.row("heading")
2882
+ ]
2883
+ })
2884
+ ]
2885
+ });
2886
+ const field = form.field("content");
2887
+ field.setTemplate("hero");
2888
+ let vm = form.field("content").vm;
2889
+ expect(vm.layout.map((node)=>asRow(node).fields.map((f)=>f.name))).toEqual([
2890
+ [
2891
+ "subheading"
2892
+ ],
2893
+ [
2894
+ "heading"
2895
+ ]
2896
+ ]);
2897
+ field.setTemplate("cta");
2898
+ vm = form.field("content").vm;
2899
+ expect(vm.layout.map((node)=>asRow(node).fields.map((f)=>f.name))).toEqual([
2900
+ [
2901
+ "url",
2902
+ "text"
2903
+ ]
2904
+ ]);
2905
+ });
2906
+ it("throws when an object has both .layout() and .template()", ()=>{
2907
+ expect(()=>createForm({
2908
+ fields: (fields)=>({
2909
+ content: fields.object().template("hero", (t)=>{
2910
+ t.fields((f)=>({
2911
+ heading: f.text()
2912
+ }));
2913
+ }).layout((l)=>[
2914
+ l.row("heading")
2915
+ ])
2916
+ })
2917
+ })).toThrow(/both .layout\(\) and .template\(\)/);
2918
+ });
2919
+ });
2735
2920
  describe("nested object layouts (Phase 8c.1)", ()=>{
2736
2921
  it("registers layout.object() nested inside another object's inner layout (non-templated)", ()=>{
2737
2922
  const form = createForm({
@@ -3049,6 +3234,24 @@ describe("FormModel", ()=>{
3049
3234
  "text"
3050
3235
  ]);
3051
3236
  });
3237
+ it("templates.add keeps the layout declared on the added template", ()=>{
3238
+ const form = createSingleTemplatedForm();
3239
+ const field = form.field("content").as("object");
3240
+ field.templates.add("cta", (t)=>{
3241
+ t.label("CTA").fields((f)=>({
3242
+ text: f.text(),
3243
+ url: f.text()
3244
+ })).layout((l)=>[
3245
+ l.row("text", "url")
3246
+ ]);
3247
+ });
3248
+ form.field("content").setTemplate("cta");
3249
+ const vm = form.field("content").vm;
3250
+ expect(asRow(vm.layout[0]).fields.map((f)=>f.name)).toEqual([
3251
+ "text",
3252
+ "url"
3253
+ ]);
3254
+ });
3052
3255
  it("templates.add throws on duplicate id", ()=>{
3053
3256
  const form = createSingleTemplatedForm();
3054
3257
  const field = form.field("content").as("object");