@wix/auto-patterns 1.27.0 → 1.29.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 (193) hide show
  1. package/dist/cjs/components/AutoPatternsCollectionPage/AutoPatternsCollectionPage.js +19 -58
  2. package/dist/cjs/components/AutoPatternsCollectionPage/AutoPatternsCollectionPage.js.map +1 -1
  3. package/dist/cjs/components/AutoPatternsCollectionPageContent/AutoPatternsCollectionPageContent.js +1 -1
  4. package/dist/cjs/components/AutoPatternsCollectionPageContent/AutoPatternsCollectionPageContent.js.map +1 -1
  5. package/dist/cjs/components/AutoPatternsCollectionPageFooter/AutoPatternsCollectionPageFooter.js +48 -0
  6. package/dist/cjs/components/AutoPatternsCollectionPageFooter/AutoPatternsCollectionPageFooter.js.map +1 -0
  7. package/dist/cjs/components/AutoPatternsEntityPage/RenderLayout/RenderLayoutContent.js +1 -1
  8. package/dist/cjs/components/AutoPatternsEntityPage/RenderLayout/RenderLayoutContent.js.map +1 -1
  9. package/dist/cjs/components/AutoPatternsEntityPage/ViewEntityPage/RenderViewLayoutContent.js +1 -1
  10. package/dist/cjs/components/AutoPatternsEntityPage/ViewEntityPage/RenderViewLayoutContent.js.map +1 -1
  11. package/dist/cjs/components/AutoPatternsRoute/AutoPatternsRoutes.js +11 -7
  12. package/dist/cjs/components/AutoPatternsRoute/AutoPatternsRoutes.js.map +1 -1
  13. package/dist/cjs/components/ModalRenderer.js +1 -1
  14. package/dist/cjs/components/ModalRenderer.js.map +1 -1
  15. package/dist/cjs/dataSourceAdapters/cms/cmsAdapter.js +5 -0
  16. package/dist/cjs/dataSourceAdapters/cms/cmsAdapter.js.map +1 -1
  17. package/dist/cjs/dataSourceAdapters/cms/fetchCmsData.js +1 -1
  18. package/dist/cjs/dataSourceAdapters/cms/fetchCmsData.js.map +1 -1
  19. package/dist/cjs/hooks/useAutoPatternsOptimisticActions.js +13 -6
  20. package/dist/cjs/hooks/useAutoPatternsOptimisticActions.js.map +1 -1
  21. package/dist/cjs/hooks/useBaseCollectionParams.js +38 -0
  22. package/dist/cjs/hooks/useBaseCollectionParams.js.map +1 -0
  23. package/dist/cjs/hooks/useBaseSDK.js +1 -1
  24. package/dist/cjs/hooks/useBaseSDK.js.map +1 -1
  25. package/dist/cjs/hooks/useColumns.js +1 -1
  26. package/dist/cjs/hooks/useColumns.js.map +1 -1
  27. package/dist/cjs/hooks/useCommonCollectionFeatures.js +13 -6
  28. package/dist/cjs/hooks/useCommonCollectionFeatures.js.map +1 -1
  29. package/dist/cjs/hooks/useEmptyStates.js +1 -1
  30. package/dist/cjs/hooks/useEmptyStates.js.map +1 -1
  31. package/dist/cjs/hooks/useEntityPageHeaderTexts.js +2 -2
  32. package/dist/cjs/hooks/useEntityPageHeaderTexts.js.map +1 -1
  33. package/dist/cjs/hooks/useFetchData.js +4 -5
  34. package/dist/cjs/hooks/useFetchData.js.map +1 -1
  35. package/dist/cjs/hooks/useFilters.js +2 -2
  36. package/dist/cjs/hooks/useFilters.js.map +1 -1
  37. package/dist/cjs/hooks/useGridFeatures.js +6 -26
  38. package/dist/cjs/hooks/useGridFeatures.js.map +1 -1
  39. package/dist/cjs/hooks/useTableFeatures.js +8 -28
  40. package/dist/cjs/hooks/useTableFeatures.js.map +1 -1
  41. package/dist/cjs/hooks/useTableGridSwitchFeatures.js +8 -28
  42. package/dist/cjs/hooks/useTableGridSwitchFeatures.js.map +1 -1
  43. package/dist/cjs/providers/{PatternsWizardOverridesContext.js → AutoPatternsOverridesContext.js} +14 -11
  44. package/dist/cjs/providers/AutoPatternsOverridesContext.js.map +1 -0
  45. package/dist/cjs/providers/SchemaContext.js +24 -7
  46. package/dist/cjs/providers/SchemaContext.js.map +1 -1
  47. package/dist/cjs/providers/index.js +4 -4
  48. package/dist/cjs/providers/index.js.map +1 -1
  49. package/dist/cjs/types/BaseSDK.js.map +1 -1
  50. package/dist/cjs/types/CollectionPageConfig.js.map +1 -1
  51. package/dist/cjs/types/actions/base.js.map +1 -1
  52. package/dist/cjs/types/fetchData.js +4 -0
  53. package/dist/cjs/types/fetchData.js.map +1 -0
  54. package/dist/cjs/types/index.js +6 -0
  55. package/dist/cjs/types/index.js.map +1 -1
  56. package/dist/cjs/types/types.js.map +1 -1
  57. package/dist/cjs/utils/actions/resolveAction.js +2 -1
  58. package/dist/cjs/utils/actions/resolveAction.js.map +1 -1
  59. package/dist/cjs/utils/actions/types.js.map +1 -1
  60. package/dist/cjs/utils/vibe.js +11 -0
  61. package/dist/cjs/utils/vibe.js.map +1 -0
  62. package/dist/docs/action_cell.md +18 -8
  63. package/dist/docs/app_config_structure.md +37 -1
  64. package/dist/docs/app_context.md +45 -0
  65. package/dist/docs/auto-patterns-guide.md +331 -82
  66. package/dist/docs/bulk_actions.md +10 -5
  67. package/dist/docs/collection_page.md +1 -1
  68. package/dist/docs/collection_page_actions.md +16 -9
  69. package/dist/docs/custom_overrides.md +22 -36
  70. package/dist/docs/entity_page.md +10 -10
  71. package/dist/docs/entity_page_actions.md +11 -4
  72. package/dist/docs/error_handling.md +135 -0
  73. package/dist/docs/index.md +8 -0
  74. package/dist/docs/installation.md +3 -3
  75. package/dist/docs/resolved_action.md +6 -2
  76. package/dist/docs/schema_config.md +11 -3
  77. package/dist/docs/wix_fqdn_custom_data_source.md +51 -9
  78. package/dist/esm/components/AutoPatternsCollectionPage/AutoPatternsCollectionPage.js +2 -25
  79. package/dist/esm/components/AutoPatternsCollectionPage/AutoPatternsCollectionPage.js.map +1 -1
  80. package/dist/esm/components/AutoPatternsCollectionPageContent/AutoPatternsCollectionPageContent.js +2 -2
  81. package/dist/esm/components/AutoPatternsCollectionPageContent/AutoPatternsCollectionPageContent.js.map +1 -1
  82. package/dist/esm/components/AutoPatternsCollectionPageFooter/AutoPatternsCollectionPageFooter.js +29 -0
  83. package/dist/esm/components/AutoPatternsCollectionPageFooter/AutoPatternsCollectionPageFooter.js.map +1 -0
  84. package/dist/esm/components/AutoPatternsEntityPage/RenderLayout/RenderLayoutContent.js +2 -2
  85. package/dist/esm/components/AutoPatternsEntityPage/RenderLayout/RenderLayoutContent.js.map +1 -1
  86. package/dist/esm/components/AutoPatternsEntityPage/ViewEntityPage/RenderViewLayoutContent.js +2 -2
  87. package/dist/esm/components/AutoPatternsEntityPage/ViewEntityPage/RenderViewLayoutContent.js.map +1 -1
  88. package/dist/esm/components/AutoPatternsRoute/AutoPatternsRoutes.js +5 -1
  89. package/dist/esm/components/AutoPatternsRoute/AutoPatternsRoutes.js.map +1 -1
  90. package/dist/esm/components/ModalRenderer.js +2 -2
  91. package/dist/esm/components/ModalRenderer.js.map +1 -1
  92. package/dist/esm/dataSourceAdapters/cms/cmsAdapter.js +4 -0
  93. package/dist/esm/dataSourceAdapters/cms/cmsAdapter.js.map +1 -1
  94. package/dist/esm/dataSourceAdapters/cms/fetchCmsData.js +1 -1
  95. package/dist/esm/dataSourceAdapters/cms/fetchCmsData.js.map +1 -1
  96. package/dist/esm/hooks/useAutoPatternsOptimisticActions.js +14 -9
  97. package/dist/esm/hooks/useAutoPatternsOptimisticActions.js.map +1 -1
  98. package/dist/esm/hooks/useBaseCollectionParams.js +37 -0
  99. package/dist/esm/hooks/useBaseCollectionParams.js.map +1 -0
  100. package/dist/esm/hooks/useBaseSDK.js +2 -2
  101. package/dist/esm/hooks/useBaseSDK.js.map +1 -1
  102. package/dist/esm/hooks/useColumns.js +2 -2
  103. package/dist/esm/hooks/useColumns.js.map +1 -1
  104. package/dist/esm/hooks/useCommonCollectionFeatures.js +9 -2
  105. package/dist/esm/hooks/useCommonCollectionFeatures.js.map +1 -1
  106. package/dist/esm/hooks/useEmptyStates.js +2 -2
  107. package/dist/esm/hooks/useEmptyStates.js.map +1 -1
  108. package/dist/esm/hooks/useEntityPageHeaderTexts.js +2 -2
  109. package/dist/esm/hooks/useEntityPageHeaderTexts.js.map +1 -1
  110. package/dist/esm/hooks/useFetchData.js +2 -2
  111. package/dist/esm/hooks/useFetchData.js.map +1 -1
  112. package/dist/esm/hooks/useFilters.js +2 -2
  113. package/dist/esm/hooks/useFilters.js.map +1 -1
  114. package/dist/esm/hooks/useGridFeatures.js +6 -29
  115. package/dist/esm/hooks/useGridFeatures.js.map +1 -1
  116. package/dist/esm/hooks/useTableFeatures.js +8 -31
  117. package/dist/esm/hooks/useTableFeatures.js.map +1 -1
  118. package/dist/esm/hooks/useTableGridSwitchFeatures.js +8 -31
  119. package/dist/esm/hooks/useTableGridSwitchFeatures.js.map +1 -1
  120. package/dist/esm/providers/AutoPatternsOverridesContext.js +19 -0
  121. package/dist/esm/providers/AutoPatternsOverridesContext.js.map +1 -0
  122. package/dist/esm/providers/SchemaContext.js +23 -6
  123. package/dist/esm/providers/SchemaContext.js.map +1 -1
  124. package/dist/esm/providers/index.js +1 -1
  125. package/dist/esm/providers/index.js.map +1 -1
  126. package/dist/esm/types/BaseSDK.js.map +1 -1
  127. package/dist/esm/types/CollectionPageConfig.js.map +1 -1
  128. package/dist/esm/types/actions/base.js.map +1 -1
  129. package/dist/esm/types/fetchData.js +2 -0
  130. package/dist/esm/types/fetchData.js.map +1 -0
  131. package/dist/esm/types/index.js +1 -0
  132. package/dist/esm/types/index.js.map +1 -1
  133. package/dist/esm/types/types.js.map +1 -1
  134. package/dist/esm/utils/actions/resolveAction.js +2 -1
  135. package/dist/esm/utils/actions/resolveAction.js.map +1 -1
  136. package/dist/esm/utils/actions/types.js.map +1 -1
  137. package/dist/esm/utils/vibe.js +6 -0
  138. package/dist/esm/utils/vibe.js.map +1 -0
  139. package/dist/types/components/AutoPatternsCollectionPage/AutoPatternsCollectionPage.d.ts.map +1 -1
  140. package/dist/types/components/AutoPatternsCollectionPageFooter/AutoPatternsCollectionPageFooter.d.ts +3 -0
  141. package/dist/types/components/AutoPatternsCollectionPageFooter/AutoPatternsCollectionPageFooter.d.ts.map +1 -0
  142. package/dist/types/components/AutoPatternsRoute/AutoPatternsRoutes.d.ts.map +1 -1
  143. package/dist/types/dataSourceAdapters/cms/cmsAdapter.d.ts +2 -1
  144. package/dist/types/dataSourceAdapters/cms/cmsAdapter.d.ts.map +1 -1
  145. package/dist/types/hooks/useAutoPatternsOptimisticActions.d.ts +7 -1
  146. package/dist/types/hooks/useAutoPatternsOptimisticActions.d.ts.map +1 -1
  147. package/dist/types/hooks/useBaseCollectionParams.d.ts +27 -0
  148. package/dist/types/hooks/useBaseCollectionParams.d.ts.map +1 -0
  149. package/dist/types/hooks/useCommonCollectionFeatures.d.ts +4 -3
  150. package/dist/types/hooks/useCommonCollectionFeatures.d.ts.map +1 -1
  151. package/dist/types/hooks/useEntityPageHeaderTexts.d.ts.map +1 -1
  152. package/dist/types/hooks/useFetchData.d.ts +3 -13
  153. package/dist/types/hooks/useFetchData.d.ts.map +1 -1
  154. package/dist/types/hooks/useGridFeatures.d.ts +1 -1
  155. package/dist/types/hooks/useGridFeatures.d.ts.map +1 -1
  156. package/dist/types/hooks/useTableFeatures.d.ts +1 -1
  157. package/dist/types/hooks/useTableFeatures.d.ts.map +1 -1
  158. package/dist/types/hooks/useTableGridSwitchFeatures.d.ts +1 -1
  159. package/dist/types/hooks/useTableGridSwitchFeatures.d.ts.map +1 -1
  160. package/dist/types/providers/{PatternsWizardOverridesContext.d.ts → AutoPatternsOverridesContext.d.ts} +14 -5
  161. package/dist/types/providers/AutoPatternsOverridesContext.d.ts.map +1 -0
  162. package/dist/types/providers/SchemaContext.d.ts.map +1 -1
  163. package/dist/types/providers/index.d.ts +1 -1
  164. package/dist/types/providers/index.d.ts.map +1 -1
  165. package/dist/types/types/BaseSDK.d.ts +2 -2
  166. package/dist/types/types/BaseSDK.d.ts.map +1 -1
  167. package/dist/types/types/CollectionPageConfig.d.ts +4 -0
  168. package/dist/types/types/CollectionPageConfig.d.ts.map +1 -1
  169. package/dist/types/types/actions/base.d.ts +1 -0
  170. package/dist/types/types/actions/base.d.ts.map +1 -1
  171. package/dist/types/types/fetchData.d.ts +21 -0
  172. package/dist/types/types/fetchData.d.ts.map +1 -0
  173. package/dist/types/types/index.d.ts +1 -0
  174. package/dist/types/types/index.d.ts.map +1 -1
  175. package/dist/types/types/types.d.ts +12 -7
  176. package/dist/types/types/types.d.ts.map +1 -1
  177. package/dist/types/utils/actions/resolveAction.d.ts +1 -0
  178. package/dist/types/utils/actions/resolveAction.d.ts.map +1 -1
  179. package/dist/types/utils/actions/types.d.ts +1 -0
  180. package/dist/types/utils/actions/types.d.ts.map +1 -1
  181. package/dist/types/utils/vibe.d.ts +2 -0
  182. package/dist/types/utils/vibe.d.ts.map +1 -0
  183. package/package.json +10 -10
  184. package/dist/cjs/dataSourceAdapters/factory.js +0 -14
  185. package/dist/cjs/dataSourceAdapters/factory.js.map +0 -1
  186. package/dist/cjs/providers/PatternsWizardOverridesContext.js.map +0 -1
  187. package/dist/esm/dataSourceAdapters/factory.js +0 -10
  188. package/dist/esm/dataSourceAdapters/factory.js.map +0 -1
  189. package/dist/esm/providers/PatternsWizardOverridesContext.js +0 -15
  190. package/dist/esm/providers/PatternsWizardOverridesContext.js.map +0 -1
  191. package/dist/types/dataSourceAdapters/factory.d.ts +0 -3
  192. package/dist/types/dataSourceAdapters/factory.d.ts.map +0 -1
  193. package/dist/types/providers/PatternsWizardOverridesContext.d.ts.map +0 -1
@@ -78,6 +78,34 @@ It is configured using a TypeScript file conforming to the `AppConfig` interface
78
78
 
79
79
  # AppConfig Structure
80
80
 
81
+ ## ⚠️ CRITICAL REQUIREMENT: Mandatory `biName` Property
82
+
83
+ **Every action configuration in auto-patterns MUST include a `biName` property.** This is not optional - it's a mandatory requirement for all auto-patterns applications.
84
+
85
+ ### Why `biName` is Mandatory:
86
+ - **Analytics Tracking**: Enables tracking of user interactions with actions
87
+ - **Feature Usage**: Helps understand which features are most/least used
88
+ - **User Behavior**: Provides insights into user workflows and preferences
89
+ - **Business Intelligence**: Supports data-driven decision making
90
+ - **A/B Testing**: Enables testing different action configurations
91
+ - **Compliance**: Required for proper application monitoring and reporting
92
+
93
+ ### `biName` Requirements:
94
+ - **MUST be included** in every action configuration
95
+ - **Use descriptive, kebab-case naming** (e.g., "toggle-vaccination-action")
96
+ - **Must be unique** across the application
97
+ - **Follow the pattern**: `{action-purpose}-action`
98
+
99
+ ### Example:
100
+ ```json
101
+ {
102
+ "id": "toggleVaccination",
103
+ "type": "custom",
104
+ "label": "Toggle Vaccination",
105
+ "biName": "toggle-vaccination-action" // MANDATORY
106
+ }
107
+ ```
108
+
81
109
  ## Configuration Rules
82
110
 
83
111
  - **Configuration must come only from a TypeScript file** - never inline or from other sources
@@ -102,6 +130,8 @@ It is configured using a TypeScript file conforming to the `AppConfig` interface
102
130
  - **Missing action type properties**: Not including `create`, `update`, `delete`, or `bulkDelete` properties when required by the action type
103
131
  - **Including wrong action properties**: Adding properties from different action types in the same action configuration
104
132
  - **Action type mismatches**: Using action cell types in collection actions, or bulk action types in regular actions
133
+ - **Missing `biName` property**: Every action configuration MUST include a `biName` property for analytics tracking
134
+ - **Generic `biName` values**: Using generic names like "action" or "button" instead of descriptive, kebab-case names
105
135
 
106
136
  ```ts
107
137
  export interface AppConfig {
@@ -128,6 +158,7 @@ export interface AppConfig {
128
158
  id: string; // Unique identifier for the action
129
159
  type: 'create' | 'custom'; // Action type
130
160
  label?: string; // Text displayed for the action
161
+ biName: string; // MANDATORY: Business intelligence name for analytics tracking
131
162
  collection: {
132
163
  collectionId: string; // ID of the Wix Data collection
133
164
  entityTypeSource: 'cms' | 'custom'; // Data source type.
@@ -167,6 +198,7 @@ export interface AppConfig {
167
198
  reflectQueryInUrl?: boolean; // Reflects query state (search, filters, sorting) in the browser URL. Default: false
168
199
  selectAllScope?: 'page' | 'all'; // Controls "Select All" scope. 'all' selects entire collection, 'page' selects only visible items. Default: 'all'
169
200
  selectionUpdateMode?: 'preserve' | 'clear'; // Controls selection behavior when data changes. 'preserve' maintains selections, 'clear' clears them. Default: 'clear'
201
+ paginationMode?: 'cursor' | 'offset'; // Controls pagination strategy and expected find() return shape. 'cursor' => { items, cursor, total? }, 'offset' (default) => { items, hasNext, total? }
170
202
  };
171
203
  filters?: {
172
204
  panelTitle?: string; // Title of the filters panel
@@ -221,6 +253,7 @@ export interface AppConfig {
221
253
  type: 'update' | 'delete' | 'custom'; // Action type
222
254
  label?: string; // Text displayed for the action
223
255
  skin?: string; // Visual appearance of the action button (see Action Button Skin Values section)
256
+ biName: string; // MANDATORY: Business intelligence name for analytics tracking
224
257
  disabled?: boolean; // Whether the action is disabled
225
258
  tooltip?: string; // Tooltip text shown on hover
226
259
  update?: { // Required when type is 'update'
@@ -273,6 +306,7 @@ export interface AppConfig {
273
306
  id: string; // Unique identifier for the bulk action
274
307
  type: 'bulkDelete' | 'custom'; // Bulk action type
275
308
  label?: string; // Text displayed for the action
309
+ biName: string; // MANDATORY: Business intelligence name for analytics tracking
276
310
  bulkDelete?: { // Required when type is 'bulkDelete'
277
311
  mode: 'modal'; // Currently only 'modal' is supported
278
312
  modal: {
@@ -378,7 +412,7 @@ export interface AppConfig {
378
412
  } |
379
413
  {
380
414
  type: 'custom'; // Component type for custom slot components
381
- id: string; // Unique identifier that maps to a custom React component provided through PatternsWizardOverridesProvider slots
415
+ id: string; // Unique identifier that maps to a custom React component provided through AutoPatternsOverridesProvider slots
382
416
  }
383
417
  ]; // End of components array
384
418
  };
@@ -410,6 +444,7 @@ export interface AppConfig {
410
444
  id: string;
411
445
  type: 'create' | 'custom';
412
446
  label?: string;
447
+ biName: string; // MANDATORY: Business intelligence name for analytics tracking
413
448
  create?: { // Required when type is 'create'
414
449
  mode: 'page';
415
450
  page: {
@@ -432,6 +467,7 @@ export interface AppConfig {
432
467
  id: string;
433
468
  type: 'custom';
434
469
  label?: string;
470
+ biName: string; // MANDATORY: Business intelligence name for analytics tracking
435
471
  }[];
436
472
  };
437
473
  parentPageId?: string; // ID of the parent collection page
@@ -708,7 +744,7 @@ The `layout` array contains the rendering components for the collection. Each la
708
744
  1. **Table Layout Item** (`type: 'Table'`):
709
745
  * `table` field contains table-specific configuration
710
746
  * Used for displaying collection in a **table view**
711
- * Includes columns, actionCell, bulkActionToolbar, etc.
747
+ * Includes columns, bulkActionToolbar, etc.
712
748
 
713
749
  2. **Grid Layout Item** (`type: 'Grid'`):
714
750
  * `grid` field contains grid-specific configuration
@@ -773,7 +809,7 @@ In addition to these common properties, each action item must specify a `type` w
773
809
  ### 2. `type: "custom"`
774
810
  * **Purpose**: Executes custom JavaScript logic defined in your application's overrides.
775
811
  * **Details**:
776
- * The `custom` object in the configuration is typically empty. The functionality is determined by a custom action resolver function that you implement and register in the `actions` section of your `PatternsWizardOverridesProvider`. The `id` of this action item must exactly match the name (key) of the registered custom action resolver. The resolver will receive parameters including `collectionId`.
812
+ * The `custom` object in the configuration is typically empty. The functionality is determined by a custom action resolver function that you implement and register in the `actions` section of your `AutoPatternsOverridesProvider`. The `id` of this action item must exactly match the name (key) of the registered custom action resolver. The resolver will receive parameters including `collectionId`.
777
813
 
778
814
  ### 3. `type: "divider"`
779
815
  * **Purpose**: Creates a visual separator between action groups in menus and lists.
@@ -862,6 +898,7 @@ Custom collection page actions execute JavaScript code that you define for colle
862
898
  "id": "exportCollection", // MUST match the function name exactly
863
899
  "type": "custom", // REQUIRED: Must be exactly "custom"
864
900
  "label": "Export Collection", // Optional: Displayed text
901
+ "biName": "export-collection-action", // MANDATORY: Analytics tracking identifier
865
902
  "collection": {
866
903
  "collectionId": "WixPets",
867
904
  "entityTypeSource": "cms"
@@ -869,7 +906,7 @@ Custom collection page actions execute JavaScript code that you define for colle
869
906
  }
870
907
  ```
871
908
 
872
- 5. Register your action in the `PatternsWizardOverridesProvider`:
909
+ 5. Register your action in the `AutoPatternsOverridesProvider`:
873
910
  ```typescript
874
911
  import { useActions } from '../components/actions';
875
912
 
@@ -877,9 +914,9 @@ Custom collection page actions execute JavaScript code that you define for colle
877
914
  const actions = useActions();
878
915
 
879
916
  return (
880
- <PatternsWizardOverridesProvider value={{ actions }}>
917
+ <AutoPatternsOverridesProvider value={{ actions }}>
881
918
  <AutoPatternsApp configuration={config} />
882
- </PatternsWizardOverridesProvider>
919
+ </AutoPatternsOverridesProvider>
883
920
  );
884
921
  }
885
922
  ```
@@ -951,6 +988,7 @@ export const handleRowClick: CustomActionCollectionPageActionOnRowClickResolver
951
988
 
952
989
  // Your custom logic...
953
990
  },
991
+ biName: 'view-details-action' // MANDATORY: For analytics tracking
954
992
  };
955
993
  };
956
994
  ```
@@ -986,6 +1024,7 @@ export const openSidePanel: CustomActionCollectionPageActionOnRowClickResolver =
986
1024
  // Or use a modal service/context that you've set up
987
1025
  // modalService.openSidePanel(item);
988
1026
  },
1027
+ biName: 'open-side-panel-action' // MANDATORY: For analytics tracking
989
1028
  };
990
1029
  };
991
1030
  ```
@@ -1015,7 +1054,7 @@ export const useActions = () => {
1015
1054
  }
1016
1055
  ```
1017
1056
 
1018
- **Step 4: Register in `PatternsWizardOverridesProvider`**:
1057
+ **Step 4: Register in `AutoPatternsOverridesProvider`**:
1019
1058
  ```typescript
1020
1059
  import { useActions } from '../components/actions';
1021
1060
 
@@ -1023,9 +1062,9 @@ export default function YourPage() {
1023
1062
  const actions = useActions();
1024
1063
 
1025
1064
  return (
1026
- <PatternsWizardOverridesProvider value={{ actions }}>
1065
+ <AutoPatternsOverridesProvider value={{ actions }}>
1027
1066
  <AutoPatternsApp configuration={config} />
1028
- </PatternsWizardOverridesProvider>
1067
+ </AutoPatternsOverridesProvider>
1029
1068
  );
1030
1069
  }
1031
1070
  ```
@@ -1062,6 +1101,7 @@ export const quickToggle: CustomActionCollectionPageActionOnRowClickResolver = (
1062
1101
  })
1063
1102
  });
1064
1103
  },
1104
+ biName: 'quick-toggle-action' // MANDATORY: For analytics tracking
1065
1105
  };
1066
1106
  };
1067
1107
  ```
@@ -1085,7 +1125,7 @@ export const quickToggle: CustomActionCollectionPageActionOnRowClickResolver = (
1085
1125
  - The implementation must use the `CustomActionCollectionPageActionOnRowClickResolver` type
1086
1126
  - **Required Return Object**: Must return a `ResolvedAction` object - see [ResolvedAction Reference](./resolved_action.md)
1087
1127
  - Access the clicked item's data through `actionParams.item`
1088
- - The implementation must be exported as a named export and registered in your `PatternsWizardOverridesProvider`
1128
+ - The implementation must be exported as a named export and registered in your `AutoPatternsOverridesProvider`
1089
1129
  - When `onRowClick` is configured, the default navigation to entity page is completely disabled
1090
1130
  - **Complete Setup Required**: You need to create the action file, export it in the index, and register it in the provider - missing any step will cause errors
1091
1131
 
@@ -1103,10 +1143,13 @@ export const quickToggle: CustomActionCollectionPageActionOnRowClickResolver = (
1103
1143
  ✓ Divider actions use `{ "type": "divider" }` format and require no additional properties.
1104
1144
  ✓ If `onRowClick` is configured in table layout, it must have a valid `id` and `type: "custom"`.
1105
1145
  ✓ **CRITICAL**: Custom row click actions must have corresponding implementations registered in the `actions` override - configuration without implementation will cause errors.
1106
- ✓ Custom row click action implementations must return an object with `label`, `icon`, and `onClick` properties - all are required.
1146
+ ✓ Custom row click action implementations must return a `ResolvedAction` object with `label`, `icon`, `onClick`, and `biName` properties - all are required. See [ResolvedAction Reference](./resolved_action.md) for complete field documentation.
1107
1147
  ✓ Custom row click action implementations must be exported as named exports and included in the actions index file.
1108
1148
  ✓ `onRowClick` is optional - when not configured, rows navigate to entity page by default.
1109
1149
  ✓ **IMPORTANT**: Configuring `onRowClick` completely disables default navigation - you must handle all row click logic in your custom implementation.
1150
+ ✓ **MANDATORY**: Every action configuration MUST include a `biName` property for analytics tracking.
1151
+ ✓ **MANDATORY**: `biName` must use descriptive, kebab-case naming (e.g., "export-collection-action").
1152
+ ✓ **MANDATORY**: `biName` must be unique across the application and follow the pattern `{action-purpose}-action`.
1110
1153
 
1111
1154
  ---
1112
1155
 
@@ -1235,19 +1278,25 @@ export interface SchemaConfig {
1235
1278
  update: (updatedEntity: any) => Promise<any>;
1236
1279
  delete: (entityId: string) => Promise<any>;
1237
1280
  bulkDelete: (entityIds: string[]) => Promise<any>;
1281
+ // The return shape depends on pagination mode (see AppConfig.collection.paginationMode)
1282
+ // - Cursor mode: { items, cursor, total? }
1283
+ // - Offset mode (default): { items, hasNext, total? }
1238
1284
  find: (
1239
1285
  query: Query,
1240
1286
  options?: {
1241
1287
  searchableFieldIds?: string[];
1242
1288
  filterFieldMapping?: Record<string, { fieldId: string }>;
1243
1289
  },
1244
- ) => Promise<{ items: any[]; total: number }>;
1290
+ ) => Promise<
1291
+ | { items: any[]; cursor?: string | null; total?: number | null }
1292
+ | { items: any[]; hasNext?: boolean; total?: number | null }
1293
+ >;
1245
1294
  };
1246
1295
  }
1247
1296
 
1248
1297
  export interface Query {
1249
1298
  limit: number; // Maximum number of items to return per request (controls page size)
1250
- offset: number; // Number of items to skip from the beginning (for pagination)
1299
+ offset?: number; // Number of items to skip from the beginning (for pagination)
1251
1300
  page: number; // Current page number (1-based, works with limit for pagination)
1252
1301
  search?: string; // Text search query applied to searchable fields
1253
1302
  cursor?: string | null; // Cursor-based pagination token (alternative to offset-based pagination)
@@ -1346,7 +1395,9 @@ export type Field = ReferenceField | NonReferenceField;
1346
1395
  - `query`: Query object with pagination, filtering, sorting, and search criteria (see Query Interface section)
1347
1396
  - `options.searchableFieldIds`: Array of field IDs that support text search
1348
1397
  - `options.filterFieldMapping`: Maps filter IDs to actual field IDs for complex filtering
1349
- - Returns: `{ items: any[], total: number }`
1398
+ - Returns (depends on pagination mode):
1399
+ - Cursor mode: `{ items: any[]; cursor?: string | null; total?: number | null }`
1400
+ - Offset mode (default): `{ items: any[]; hasNext?: boolean; total?: number | null }`
1350
1401
 
1351
1402
  ### Field Type Information
1352
1403
 
@@ -1540,6 +1591,7 @@ Custom actions execute JavaScript code that you define. These actions receive pa
1540
1591
  })
1541
1592
  });
1542
1593
  },
1594
+ biName: 'download-pet-details-action' // MANDATORY: For analytics tracking
1543
1595
  };
1544
1596
  };
1545
1597
  ```
@@ -1564,10 +1616,11 @@ Custom actions execute JavaScript code that you define. These actions receive pa
1564
1616
  "id": "downloadPetDetails", // MUST match the function name exactly
1565
1617
  "type": "custom", // REQUIRED: Must be exactly "custom"
1566
1618
  "label": "Download Details", // Optional: Displayed text
1619
+ "biName": "download-pet-details-action" // MANDATORY: Analytics tracking identifier
1567
1620
  }
1568
1621
  ```
1569
1622
 
1570
- 5. Register your action in the `PatternsWizardOverridesProvider`:
1623
+ 5. Register your action in the `AutoPatternsOverridesProvider`:
1571
1624
  ```typescript
1572
1625
  import { useActions } from '../components/actions';
1573
1626
 
@@ -1575,9 +1628,9 @@ Custom actions execute JavaScript code that you define. These actions receive pa
1575
1628
  const actions = useActions();
1576
1629
 
1577
1630
  return (
1578
- <PatternsWizardOverridesProvider value={{ actions }}>
1631
+ <AutoPatternsOverridesProvider value={{ actions }}>
1579
1632
  <AutoPatternsApp configuration={config} />
1580
- </PatternsWizardOverridesProvider>
1633
+ </AutoPatternsOverridesProvider>
1581
1634
  );
1582
1635
  }
1583
1636
  ```
@@ -1592,13 +1645,21 @@ Custom actions execute JavaScript code that you define. These actions receive pa
1592
1645
 
1593
1646
  1. `id` must:
1594
1647
  - Match exactly the function name of the custom action implementation
1595
- - Be registered in the `actions` property of your `PatternsWizardOverridesProvider`
1648
+ - Be registered in the `actions` property of your `AutoPatternsOverridesProvider`
1596
1649
  - Follow JavaScript identifier naming rules (camelCase recommended)
1597
1650
 
1598
- 2. The implementation must return an object with:
1599
- - `label`: Text displayed for the action
1651
+ 2. `biName` must:
1652
+ - Be included in every action configuration (MANDATORY)
1653
+ - Use descriptive, kebab-case naming (e.g., "download-pet-details-action")
1654
+ - Be unique across the application
1655
+ - Follow the pattern: `{action-purpose}-action`
1656
+ - Enable analytics tracking for user interactions
1657
+
1658
+ 2. The implementation must return a `ResolvedAction` object with:
1659
+ - `label`: Text displayed for the action
1600
1660
  - `icon`: An Icon component from "@wix/wix-ui-icons-common"
1601
1661
  - `onClick`: Handler function for the action
1662
+ - `biName`: Business intelligence name for analytics tracking. Must match the `biName` in your action configuration (required)
1602
1663
  - `hidden` (optional): Boolean to hide the action when true
1603
1664
 
1604
1665
  3. The implementation must:
@@ -1634,13 +1695,13 @@ Follow this decision process when implementing ActionCell:
1634
1695
  - Complex, full-entity edits → Use `mode: "page"` to navigate to entity page
1635
1696
 
1636
1697
  6. **Custom Implementation**:
1637
- - For `custom` actions, you must provide implementations in your code and register them with `PatternsWizardOverridesProvider`
1698
+ - For `custom` actions, you must provide implementations in your code and register them with `AutoPatternsOverridesProvider`
1638
1699
 
1639
1700
  ### ActionCell Validation Checklist
1640
1701
 
1641
1702
  AI agents should verify these requirements before generating ActionCell configurations:
1642
1703
 
1643
- ✓ ActionCell is placed directly inside `table` or `grid` configuration
1704
+ ✓ ActionCell is placed at the collection component level (`collectionPage.components[*].actionCell`) as a sibling to `collection`, `layout`, etc. — NOT inside `table` or `grid`
1644
1705
  ✓ Each action has a unique `id` and correct `type` value
1645
1706
  ✓ Each action type only includes its required field(s)
1646
1707
  ✓ Update page action refers to a valid entity page ID
@@ -1779,6 +1840,7 @@ Custom bulk actions execute JavaScript code that you define for bulk operations.
1779
1840
  })
1780
1841
  });
1781
1842
  },
1843
+ biName: 'bulk-export-pets-action' // MANDATORY: For analytics tracking
1782
1844
  };
1783
1845
  };
1784
1846
  ```
@@ -1801,10 +1863,11 @@ Custom bulk actions execute JavaScript code that you define for bulk operations.
1801
1863
  "id": "bulkExportPets", // MUST match the function name exactly
1802
1864
  "type": "custom", // REQUIRED: Must be exactly "custom"
1803
1865
  "label": "Export Selected", // Optional: Displayed text
1866
+ "biName": "bulk-export-pets-action" // MANDATORY: Analytics tracking identifier
1804
1867
  }
1805
1868
  ```
1806
1869
 
1807
- 5. Register your action in the `PatternsWizardOverridesProvider`:
1870
+ 5. Register your action in the `AutoPatternsOverridesProvider`:
1808
1871
  ```typescript
1809
1872
  import { useActions } from '../components/actions';
1810
1873
 
@@ -1812,9 +1875,9 @@ Custom bulk actions execute JavaScript code that you define for bulk operations.
1812
1875
  const actions = useActions();
1813
1876
 
1814
1877
  return (
1815
- <PatternsWizardOverridesProvider value={{ actions }}>
1878
+ <AutoPatternsOverridesProvider value={{ actions }}>
1816
1879
  <AutoPatternsApp configuration={config} />
1817
- </PatternsWizardOverridesProvider>
1880
+ </AutoPatternsOverridesProvider>
1818
1881
  );
1819
1882
  }
1820
1883
  ```
@@ -1831,7 +1894,7 @@ Custom bulk actions execute JavaScript code that you define for bulk operations.
1831
1894
 
1832
1895
  1. `id` must:
1833
1896
  - Match exactly the function name of the custom bulk action implementation
1834
- - Be registered in the `actions` property of your `PatternsWizardOverridesProvider`
1897
+ - Be registered in the `actions` property of your `AutoPatternsOverridesProvider`
1835
1898
  - Follow JavaScript identifier naming rules (camelCase recommended)
1836
1899
 
1837
1900
  2. The implementation must return a `ResolvedAction`:
@@ -1921,7 +1984,7 @@ Follow this decision process when implementing Bulk Action Toolbar:
1921
1984
  - Less common bulk operations → Place in `secondaryActions` array
1922
1985
 
1923
1986
  3. **Custom Implementation**:
1924
- - For `custom` bulk actions, you must provide implementations in your code and register them with `PatternsWizardOverridesProvider`
1987
+ - For `custom` bulk actions, you must provide implementations in your code and register them with `AutoPatternsOverridesProvider`
1925
1988
 
1926
1989
  ### Bulk Action Toolbar Validation Checklist
1927
1990
 
@@ -1936,6 +1999,9 @@ AI agents should verify these requirements before generating Bulk Action Toolbar
1936
1999
  ✓ Primary actions use `action`/`menu` structure with proper `action` or `menu` properties
1937
2000
  ✓ Secondary actions are an array that can include dividers
1938
2001
  ✓ Menu items within primary actions is array that can include dividers
2002
+ ✓ **MANDATORY**: Every action configuration MUST include a `biName` property for analytics tracking
2003
+ ✓ **MANDATORY**: `biName` must use descriptive, kebab-case naming (e.g., "bulk-export-pets-action")
2004
+ ✓ **MANDATORY**: `biName` must be unique across the application and follow the pattern `bulk-{action}-action`
1939
2005
 
1940
2006
  ---
1941
2007
 
@@ -1963,7 +2029,7 @@ When a user asks to "add badges to the entity page", understand that they want:
1963
2029
  1. **Custom component overrides** - NOT direct configuration in JSON
1964
2030
  2. **Function that returns badge objects** - NOT JSX components
1965
2031
  3. **Badge properties** like `text`, `skin`, `prefixIcon`, etc.
1966
- 4. **Registration in PatternsWizardOverridesProvider** under `entityPageHeaderBadges`
2032
+ 4. **Registration in AutoPatternsOverridesProvider** under `entityPageHeaderBadges`
1967
2033
 
1968
2034
  **Example Request**: "Add 2 badges with random skins and text 'wow'"
1969
2035
  **Correct Implementation**: Create a function that returns `[{text: 'wow', skin: 'success'}, {text: 'wow', skin: 'premium'}]`
@@ -2057,7 +2123,7 @@ const Index: FC = () => {
2057
2123
  const entityPageHeaderSubtitle = useEntityPageHeaderSubtitle();
2058
2124
 
2059
2125
  return (
2060
- <PatternsWizardOverridesProvider
2126
+ <AutoPatternsOverridesProvider
2061
2127
  value={{
2062
2128
  // ... other overrides
2063
2129
  entityPageHeaderSubtitle: {
@@ -2066,7 +2132,7 @@ const Index: FC = () => {
2066
2132
  }}
2067
2133
  >
2068
2134
  <WixPetsPage />
2069
- </PatternsWizardOverridesProvider>
2135
+ </AutoPatternsOverridesProvider>
2070
2136
  );
2071
2137
  };
2072
2138
  ```
@@ -2117,16 +2183,16 @@ export const myFunction = (entity) => { ... }
2117
2183
 
2118
2184
  ### Integration
2119
2185
 
2120
- Register your subtitle override in the `PatternsWizardOverridesProvider`:
2186
+ Register your subtitle override in the `AutoPatternsOverridesProvider`:
2121
2187
 
2122
2188
  ```typescript
2123
- <PatternsWizardOverridesProvider value={{
2189
+ <AutoPatternsOverridesProvider value={{
2124
2190
  entityPageHeaderSubtitle: {
2125
2191
  mySubtitleOverride,
2126
2192
  },
2127
2193
  }}>
2128
2194
  <AutoPatternsApp configuration={config} />
2129
- </PatternsWizardOverridesProvider>
2195
+ </AutoPatternsOverridesProvider>
2130
2196
  ```
2131
2197
 
2132
2198
  ## Entity Page Dynamic Badges
@@ -2159,7 +2225,7 @@ When implementing badges for entity pages, understand these key points:
2159
2225
  1. **Badges are CUSTOM COMPONENT OVERRIDES** - NOT direct configuration
2160
2226
  2. **Badge function returns an ARRAY of badge objects** - NOT JSX components
2161
2227
  3. **Each badge object has properties** like `text`, `skin`, `prefixIcon`, etc.
2162
- 4. **Must be registered in PatternsWizardOverridesProvider** under `entityPageHeaderBadges`
2228
+ 4. **Must be registered in AutoPatternsOverridesProvider** under `entityPageHeaderBadges`
2163
2229
 
2164
2230
  ### Complete Implementation Guide
2165
2231
 
@@ -2214,7 +2280,7 @@ const Index: FC = () => {
2214
2280
  const entityPageHeaderBadges = useEntityPageHeaderBadges();
2215
2281
 
2216
2282
  return (
2217
- <PatternsWizardOverridesProvider
2283
+ <AutoPatternsOverridesProvider
2218
2284
  value={{
2219
2285
  // ... other overrides
2220
2286
  entityPageHeaderSubtitle: {
@@ -2226,7 +2292,7 @@ const Index: FC = () => {
2226
2292
  }}
2227
2293
  >
2228
2294
  <WixPetsPage />
2229
- </PatternsWizardOverridesProvider>
2295
+ </AutoPatternsOverridesProvider>
2230
2296
  );
2231
2297
  };
2232
2298
  ```
@@ -2268,7 +2334,7 @@ src/dashboard/
2268
2334
 
2269
2335
  1. **❌ DON'T return JSX components** - Return badge objects instead
2270
2336
  2. **❌ DON'T use direct configuration** - Use custom component overrides
2271
- 3. **❌ DON'T forget to register in PatternsWizardOverridesProvider**
2337
+ 3. **❌ DON'T forget to register in AutoPatternsOverridesProvider**
2272
2338
  5. **❌ DON'T forget to export from index.ts** - Must export the function
2273
2339
 
2274
2340
 
@@ -2424,18 +2490,21 @@ Entity pages in **edit mode** support not only built-in actions (such as "Save"
2424
2490
  {
2425
2491
  "id": "sendEmail",
2426
2492
  "type": "custom",
2427
- "label": "Send Email"
2493
+ "label": "Send Email",
2494
+ "biName": "send-email-action"
2428
2495
  },
2429
2496
  {
2430
2497
  "id": "exportData",
2431
2498
  "type": "custom",
2432
- "label": "Export Data"
2499
+ "label": "Export Data",
2500
+ "biName": "export-data-action"
2433
2501
  },
2434
2502
  { "type": "divider" },
2435
2503
  {
2436
2504
  "id": "archiveEntity",
2437
2505
  "type": "custom",
2438
- "label": "Archive"
2506
+ "label": "Archive",
2507
+ "biName": "archive-entity-action"
2439
2508
  }
2440
2509
  ]
2441
2510
  }
@@ -2462,6 +2531,7 @@ export const myMoreAction: CustomEntityPageActionResolver = (params) => {
2462
2531
  onClick: () => {
2463
2532
  // Your custom logic here
2464
2533
  },
2534
+ biName: 'my-more-action' // MANDATORY: For analytics tracking
2465
2535
  };
2466
2536
  };
2467
2537
  ```
@@ -2487,9 +2557,12 @@ export const myMoreAction: CustomEntityPageActionResolver = (params) => {
2487
2557
  ✓ Each action in `moreActions` has a unique `id` and correct `type` value
2488
2558
  ✓ Each action type only includes its required field(s)
2489
2559
  ✓ Custom actions match implementations in overrides
2490
- ✓ The resolver is exported and registered in the `actions` property of your `PatternsWizardOverridesProvider`
2560
+ ✓ The resolver is exported and registered in the `actions` property of your `AutoPatternsOverridesProvider`
2491
2561
  ✓ The function signature matches `CustomEntityPageActionResolver`
2492
2562
  ✓ The returned object is a `ResolvedAction` (see [ResolvedAction Reference](./resolved_action.md))
2563
+ ✓ **MANDATORY**: Every action configuration MUST include a `biName` property for analytics tracking
2564
+ ✓ **MANDATORY**: `biName` must use descriptive, kebab-case naming (e.g., "send-email-action")
2565
+ ✓ **MANDATORY**: `biName` must be unique across the application and follow the pattern `{action-purpose}-action`
2493
2566
 
2494
2567
  ---
2495
2568
 
@@ -2659,6 +2732,7 @@ export interface ResolvedAction {
2659
2732
  hidden?: boolean;
2660
2733
  tooltip?: string;
2661
2734
  skin?: string;
2735
+ biName?: string;
2662
2736
  }
2663
2737
  ```
2664
2738
 
@@ -2669,6 +2743,7 @@ export interface ResolvedAction {
2669
2743
  - **`label`** (string): Text displayed in the button or menu item.
2670
2744
  - **`icon`** (IconElement): An icon component, typically from `@wix/wix-ui-icons-common`. Example: `icon: <Delete />`.
2671
2745
  - **`onClick`** (function): Handler function invoked when the user triggers the action. Can be async.
2746
+ - **`biName`** (string): Business intelligence name for analytics tracking. Used to identify the action in analytics and reporting systems. The value should match the `biName` specified in your action configuration.
2672
2747
 
2673
2748
  ### Optional Fields
2674
2749
 
@@ -2692,7 +2767,8 @@ return {
2692
2767
  icon: <Add />,
2693
2768
  onClick: () => {
2694
2769
  // Your action logic here
2695
- }
2770
+ },
2771
+ biName: 'create-action' // MANDATORY: For analytics tracking
2696
2772
  };
2697
2773
  ```
2698
2774
 
@@ -2715,7 +2791,8 @@ return {
2715
2791
  disabled: total === 0,
2716
2792
  tooltip: total === 0 ? 'Select at least one item to export' : undefined,
2717
2793
  hidden: !userHasExportPermission,
2718
- skin: 'premium'
2794
+ skin: 'premium',
2795
+ biName: 'export_selected_items' // MANDATORY: For analytics tracking
2719
2796
  };
2720
2797
  ```
2721
2798
 
@@ -2805,7 +2882,7 @@ import React, { type FC } from 'react';
2805
2882
  import { WixDesignSystemProvider } from '@wix/design-system';
2806
2883
  import '@wix/design-system/styles.global.css';
2807
2884
  import { WixPatternsProvider } from '@wix/patterns/provider';
2808
- import { PatternsWizardOverridesProvider, AutoPatternsApp } from '@wix/auto-patterns';
2885
+ import { AutoPatternsOverridesProvider, AutoPatternsApp } from '@wix/auto-patterns';
2809
2886
  import { withDashboard } from '@wix/patterns';
2810
2887
 
2811
2888
  import { config } from './MyCollectionConfig.patterns';
@@ -2814,9 +2891,9 @@ const Index: FC = () => {
2814
2891
  return (
2815
2892
  <WixDesignSystemProvider features={{ newColorsBranding: true }}>
2816
2893
  <WixPatternsProvider>
2817
- <PatternsWizardOverridesProvider value={{ }}>
2894
+ <AutoPatternsOverridesProvider value={{ }}>
2818
2895
  <AutoPatternsApp configuration={config} />
2819
- </PatternsWizardOverridesProvider>
2896
+ </AutoPatternsOverridesProvider>
2820
2897
  </WixPatternsProvider>
2821
2898
  </WixDesignSystemProvider>
2822
2899
  );
@@ -2827,14 +2904,63 @@ export default withDashboard(Index);
2827
2904
 
2828
2905
  ---
2829
2906
 
2907
+ # AppContext
2908
+
2909
+ The AppContext feature allows you to add components outside the main AutoPatternsApp flow while still accessing the collection data.
2910
+
2911
+ ## 1. Adding Components as Children
2912
+
2913
+ Components that need to be rendered outside the main AutoPatternsApp interface (such as modals or side panels) should be passed as children:
2914
+
2915
+ ```tsx
2916
+ import { AutoPatternsApp } from '@wix/auto-patterns';
2917
+ import { MyModal } from './MyModal';
2918
+ import { MySidePanel } from './MySidePanel';
2919
+
2920
+ <AutoPatternsApp configuration={config}>
2921
+ <MyModal />
2922
+ <MySidePanel />
2923
+ </AutoPatternsApp>
2924
+ ```
2925
+
2926
+ These children components are typically:
2927
+ - **Modals** - for custom actions, forms, or dialogs
2928
+ - **Side Panels** - for additional information or controls
2929
+ - **Overlay Components** - that need to appear on top of the main interface
2930
+
2931
+ ## 2. Accessing Collection Data
2932
+
2933
+ Use the `useAppContext` hook to access the current collection items from within your child components:
2934
+
2935
+ ```tsx
2936
+ import React from 'react';
2937
+ import { useAppContext } from '@wix/auto-patterns';
2938
+
2939
+ export const MyModal: React.FC = () => {
2940
+ const { items } = useAppContext();
2941
+
2942
+ return (
2943
+ <div>
2944
+ <p>Current collection has {items.length} items</p>
2945
+ {/* Your modal content */}
2946
+ </div>
2947
+ );
2948
+ };
2949
+ ```
2950
+
2951
+ The `items` array contains the current filtered and paginated collection data that matches what's displayed in the table/grid.
2952
+
2953
+ ---
2954
+
2830
2955
  # Custom Overrides
2831
2956
 
2832
2957
  ## Override Rules
2833
2958
 
2834
2959
  - **Custom overrides are restricted to the defined areas only** - attempting to override or modify any other aspect of `AutoPatternsApp` is prohibited and can cause unexpected behavior
2835
- - **Always verify override implementation** - when implementing custom overrides, you MUST ensure they are correctly imported and passed to the `PatternsWizardOverridesProvider`
2960
+ - **Always verify override implementation** - when implementing custom overrides, you MUST ensure they are correctly imported and passed to the `AutoPatternsOverridesProvider`
2961
+ - **CRITICAL: Error handling for custom actions** - Custom actions that make external API calls (using `fetch()`, `axios`, etc.) should NOT use `errorHandler.withErrorHandler`. Only Wix HTTP requests (httpClient from @wix/essentials, Wix APIs like wix/data and wix/stores, and httpClient.fetchWithAuth()) require errorHandler wrapping. See the "Error Handling for HTTP Requests" section for details.
2836
2962
 
2837
- The `PatternsWizardOverridesProvider` allows you to inject custom code to override default behaviors or add additional functionality. Below are the areas where overrides can be applied:
2963
+ The `AutoPatternsOverridesProvider` allows you to inject custom code to override default behaviors or add additional functionality. Below are the areas where overrides can be applied:
2838
2964
 
2839
2965
  > **Note:** These are the only areas where overrides are supported. Avoid attempting to override or modify other parts of the system, as this is not supported and may lead to unexpected behavior.
2840
2966
 
@@ -2909,9 +3035,9 @@ export default function YourPage() {
2909
3035
  const entityPageHeaderBadges = useEntityPageHeaderBadges();
2910
3036
 
2911
3037
  return (
2912
- <PatternsWizardOverridesProvider value={{ actions, columns, slots, sections, components, modals, customDataSources, entityPageHeaderSubtitle, entityPageHeaderBadges }}>
3038
+ <AutoPatternsOverridesProvider value={{ actions, columns, slots, sections, components, modals, customDataSources, entityPageHeaderSubtitle, entityPageHeaderBadges }}>
2913
3039
  <AutoPatternsApp configuration={config} />
2914
- </PatternsWizardOverridesProvider>
3040
+ </AutoPatternsOverridesProvider>
2915
3041
  );
2916
3042
  }
2917
3043
  ```
@@ -2931,7 +3057,7 @@ For example:
2931
3057
  - Adding a new subtitle override → Update `../components/entityPageHeaderSubtitle/index.tsx` to include the new subtitle in the `useEntityPageHeaderSubtitle` hook
2932
3058
  - Adding a new badges override → Update `../components/entityPageHeaderBadges/index.tsx` to include the new badges in the `useEntityPageHeaderBadges` hook
2933
3059
 
2934
- Without updating the hook index files, your implementations won't be available to the `PatternsWizardOverridesProvider`.
3060
+ Without updating the hook index files, your implementations won't be available to the `AutoPatternsOverridesProvider`.
2935
3061
 
2936
3062
  ## Common Override Mistakes to Avoid
2937
3063
 
@@ -3176,9 +3302,9 @@ export default function YourPage() {
3176
3302
  const columns = useColumns();
3177
3303
 
3178
3304
  return (
3179
- <PatternsWizardOverridesProvider value={{ columns }}>
3305
+ <AutoPatternsOverridesProvider value={{ columns }}>
3180
3306
  <AutoPatternsApp configuration={config} />
3181
- </PatternsWizardOverridesProvider>
3307
+ </AutoPatternsOverridesProvider>
3182
3308
  );
3183
3309
  }
3184
3310
  ```
@@ -3196,7 +3322,7 @@ your-page/
3196
3322
  ├── fullName.tsx // Calculated column
3197
3323
  └── date.tsx // Enhanced formatting with row context
3198
3324
 
3199
- PatternsWizardOverridesProvider
3325
+ AutoPatternsOverridesProvider
3200
3326
  └── value.columns (from useColumns hook)
3201
3327
  ├── name
3202
3328
  ├── petInfo
@@ -3353,9 +3479,9 @@ export default function YourPage() {
3353
3479
  const components = useComponents();
3354
3480
 
3355
3481
  return (
3356
- <PatternsWizardOverridesProvider value={{ components }}>
3482
+ <AutoPatternsOverridesProvider value={{ components }}>
3357
3483
  <AutoPatternsApp configuration={config} />
3358
- </PatternsWizardOverridesProvider>
3484
+ </AutoPatternsOverridesProvider>
3359
3485
  );
3360
3486
  }
3361
3487
  ```
@@ -3484,7 +3610,7 @@ your-page/
3484
3610
  │ ├── combinedNameFields.tsx // Multiple fields override
3485
3611
  │ └── infoCard.tsx // Standalone component
3486
3612
 
3487
- PatternsWizardOverridesProvider
3613
+ AutoPatternsOverridesProvider
3488
3614
  └── value.components (from useComponents hook)
3489
3615
  ├── customNameField
3490
3616
  ├── combinedNameFields
@@ -3554,7 +3680,7 @@ To enable sections, add the `sections` configuration to your table configuration
3554
3680
 
3555
3681
  ### Custom Data Source Hook Structure
3556
3682
 
3557
- Custom data sources are implemented through the `useCustomDataSources` hook in your `PatternsWizardOverridesProvider`:
3683
+ Custom data sources are implemented through the `useCustomDataSources` hook in your `AutoPatternsOverridesProvider`:
3558
3684
 
3559
3685
  ```tsx
3560
3686
  import { useCustomDataSources } from '../components/customDataSources';
@@ -3563,9 +3689,9 @@ export default function YourPage() {
3563
3689
  const customDataSources = useCustomDataSources();
3564
3690
 
3565
3691
  return (
3566
- <PatternsWizardOverridesProvider value={{ customDataSources }}>
3692
+ <AutoPatternsOverridesProvider value={{ customDataSources }}>
3567
3693
  <AutoPatternsApp configuration={config} />
3568
- </PatternsWizardOverridesProvider>
3694
+ </AutoPatternsOverridesProvider>
3569
3695
  );
3570
3696
  }
3571
3697
  ```
@@ -3639,22 +3765,7 @@ When implementing custom data sources, you need to map your data source field ty
3639
3765
  - **Reference fields** → `'REFERENCE'`
3640
3766
  - **URL fields** → `'URL'`
3641
3767
 
3642
- ### Error Handling
3643
-
3644
- Custom data sources should include proper error handling:
3645
3768
 
3646
- ```tsx
3647
- actions: {
3648
- get: async (entityId: string) => {
3649
- try {
3650
- const result = await yourDataSourceCall(entityId);
3651
- return result;
3652
- } catch (error) {
3653
- throw new Error(`Failed to fetch entity: ${error.message}`);
3654
- }
3655
- }
3656
- }
3657
- ```
3658
3769
 
3659
3770
  ### Validation Requirements
3660
3771
 
@@ -3696,9 +3807,9 @@ export default function YourPage() {
3696
3807
  const customDataSources = useCustomDataSources();
3697
3808
 
3698
3809
  return (
3699
- <PatternsWizardOverridesProvider value={{ customDataSources }}>
3810
+ <AutoPatternsOverridesProvider value={{ customDataSources }}>
3700
3811
  <AutoPatternsApp configuration={config} />
3701
- </PatternsWizardOverridesProvider>
3812
+ </AutoPatternsOverridesProvider>
3702
3813
  );
3703
3814
  }
3704
3815
  ```
@@ -3707,7 +3818,7 @@ export default function YourPage() {
3707
3818
 
3708
3819
  ### Creating Section Renderers
3709
3820
 
3710
- Section renderers are functions that determine how to group items and what information to display in section headers. They must be provided through the `PatternsWizardOverridesProvider`.
3821
+ Section renderers are functions that determine how to group items and what information to display in section headers. They must be provided through the `AutoPatternsOverridesProvider`.
3711
3822
 
3712
3823
  #### Function Signature
3713
3824
 
@@ -3833,9 +3944,9 @@ import * as sections from './components/sections';
3833
3944
  import * as columns from './components/columns';
3834
3945
  import * as actions from './components/actions';
3835
3946
 
3836
- <PatternsWizardOverridesProvider value={{ sections, columns, actions }}>
3947
+ <AutoPatternsOverridesProvider value={{ sections, columns, actions }}>
3837
3948
  <AutoPatternsApp configuration={config} />
3838
- </PatternsWizardOverridesProvider>
3949
+ </AutoPatternsOverridesProvider>
3839
3950
  ```
3840
3951
 
3841
3952
  ### Important Notes
@@ -3981,9 +4092,9 @@ export default function YourPage() {
3981
4092
  const slots = useSlots();
3982
4093
 
3983
4094
  return (
3984
- <PatternsWizardOverridesProvider value={{ slots }}>
4095
+ <AutoPatternsOverridesProvider value={{ slots }}>
3985
4096
  <AutoPatternsApp configuration={config} />
3986
- </PatternsWizardOverridesProvider>
4097
+ </AutoPatternsOverridesProvider>
3987
4098
  );
3988
4099
  }
3989
4100
  ```
@@ -4001,3 +4112,141 @@ export default function YourPage() {
4001
4112
  Slots provide a powerful way to enhance collection pages with custom functionality while maintaining the structure and features of the AutoPatterns system.
4002
4113
 
4003
4114
  ---
4115
+
4116
+ # Error Handling for HTTP Requests
4117
+
4118
+ **⚠️ CRITICAL**: When implementing custom data sources that make HTTP requests, you **MUST** wrap specific HTTP calls with proper error handling. This ensures consistent error management, prevents unhandled promise rejections, and provides better user experience.
4119
+
4120
+ ## What Requires Error Handling
4121
+
4122
+ **ONLY the following HTTP requests** in your custom data source actions must be wrapped with `errorHandler`:
4123
+
4124
+ - **httpClient from @wix/essentials** (e.g., `httpClient.request(getDummyEntity(...))`)
4125
+ - **Wix APIs** (e.g., `wix/data`, `wix/stores`, `items.get()`, `items.insert()`, `collections.getDataCollection()`)
4126
+ - **httpClient.fetchWithAuth()** calls
4127
+
4128
+ **DO NOT use errorHandler with:**
4129
+
4130
+ - **External API calls** using `fetch()`, `axios.get()`, or other HTTP libraries
4131
+ - **Custom HTTP clients** (e.g., any non-Wix HTTP request library)
4132
+ - **Third-party API calls** using non-Wix HTTP methods
4133
+
4134
+ **EXCEPTION**: SDK actions that you get from the AutoPatterns SDK (e.g., `sdk.getOptimisticActions()`, `sdk.getSchema()`) do NOT need error handling as they are already handled internally.
4135
+
4136
+ ## Why Error Handling is Required
4137
+
4138
+ Custom data sources often make HTTP requests to Wix APIs and services. Without proper error handling:
4139
+
4140
+ - **Unhandled Promise Rejections**: HTTP failures can crash your application
4141
+ - **Poor User Experience**: Users don't get meaningful error messages
4142
+ - **Inconsistent Error Management**: Different parts of your app handle errors differently
4143
+ - **Debugging Difficulties**: Hard to trace and diagnose API failures
4144
+
4145
+ ## Using @wix/essentials errorHandler
4146
+
4147
+ The recommended approach is to use the `errorHandler` from `@wix/essentials` package, which provides consistent error handling patterns across Wix applications.
4148
+
4149
+ ### Installation
4150
+
4151
+ First, ensure `@wix/essentials` is installed in your project:
4152
+
4153
+ ```bash
4154
+ npm install @wix/essentials
4155
+ ```
4156
+
4157
+ ### Basic Error Handling Pattern
4158
+
4159
+ Wrap Wix HTTP requests in your custom data source actions with `errorHandler.withErrorHandler`:
4160
+
4161
+ ```typescript
4162
+ import { errorHandler } from '@wix/essentials';
4163
+
4164
+ // In your custom data source actions
4165
+ actions: {
4166
+ get: async (entityId: string) => {
4167
+ return errorHandler.withErrorHandler(
4168
+ async () => {
4169
+ const response = await httpClient.request(
4170
+ getDummyEntity({ dummyEntityId: entityId })
4171
+ );
4172
+ return response.data.dummyEntity;
4173
+ },
4174
+ {}
4175
+ );
4176
+ },
4177
+ }
4178
+ ```
4179
+
4180
+ ### Examples of HTTP Requests That Need Error Handling
4181
+
4182
+ **httpClient from @wix/essentials:**
4183
+
4184
+ ```typescript
4185
+ return errorHandler.withErrorHandler(async () => {
4186
+ const response = await httpClient.request(
4187
+ getDummyEntity({ dummyEntityId: entityId })
4188
+ );
4189
+ return response.data.dummyEntity;
4190
+ }, {});
4191
+ ```
4192
+
4193
+ **Wix APIs (wix/data, wix/stores):**
4194
+
4195
+ ```typescript
4196
+ return errorHandler.withErrorHandler(async () => {
4197
+ return await items.get(collectionId, entityId);
4198
+ }, {});
4199
+ ```
4200
+
4201
+ **httpClient.fetchWithAuth() calls:**
4202
+
4203
+ ```typescript
4204
+ return errorHandler.withErrorHandler(async () => {
4205
+ const response = await httpClient.fetchWithAuth("/api/data");
4206
+ return await response.json();
4207
+ }, {});
4208
+ ```
4209
+
4210
+ ### Examples of HTTP Requests That Do NOT Need Error Handling
4211
+
4212
+ **External API calls (using fetch, axios, etc.):**
4213
+
4214
+ ```typescript
4215
+ // ✅ CORRECT - No error handling needed for external APIs
4216
+ const response = await fetch("https://api.example.com/data");
4217
+ return await response.json();
4218
+
4219
+ // ✅ CORRECT - No error handling needed for axios
4220
+ const response = await axios.get("https://api.example.com/data");
4221
+ return response.data;
4222
+ ```
4223
+
4224
+ **Third-party HTTP libraries:**
4225
+
4226
+ ```typescript
4227
+ // ✅ CORRECT - No error handling needed for third-party HTTP clients
4228
+ const response = await someThirdPartyHttpClient.get("/data");
4229
+ return response.data;
4230
+ ```
4231
+
4232
+ ## Integration with AutoPatterns Error Handling
4233
+
4234
+ The error handling in your custom data source integrates seamlessly with AutoPatterns' built-in error handling:
4235
+
4236
+ 1. **User-Friendly Messages**: Errors are displayed to users in a consistent format
4237
+ 2. **Retry Mechanisms**: Users can retry failed operations
4238
+ 3. **Loading States**: Proper loading states during HTTP requests
4239
+ 4. **Error Boundaries**: Errors are caught and handled gracefully
4240
+
4241
+ ## Validation Checklist
4242
+
4243
+ Before deploying your custom data source, ensure:
4244
+
4245
+ ✅ **httpClient from @wix/essentials** is wrapped with `errorHandler.withErrorHandler`
4246
+ ✅ **Wix APIs (wix/data, wix/stores, etc)** are wrapped with `errorHandler.withErrorHandler`
4247
+ ✅ **httpClient.fetchWithAuth()** calls are wrapped with `errorHandler.withErrorHandler`
4248
+ ✅ **External API calls are NOT wrapped** with errorHandler (e.g., fetch(), axios, third-party HTTP clients)
4249
+ ✅ **SDK actions are used directly** without error handling (e.g., `sdk.getOptimisticActions()`, `sdk.getSchema()`)
4250
+ ✅ **@wix/essentials** is installed as a dependency
4251
+
4252
+ ---