@wix/auto-patterns 1.36.0 → 1.38.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 (172) hide show
  1. package/dist/cjs/components/AutoPatternsApp/AutoPatternsApp.js +1 -1
  2. package/dist/cjs/components/AutoPatternsCollectionComponent/AutoPatternsCollectionComponent.js +1 -1
  3. package/dist/cjs/components/AutoPatternsCollectionPage/AutoPatternsCollectionPage.js +1 -1
  4. package/dist/cjs/components/AutoPatternsCollectionPageContent/AutoPatternsCollectionPageContent.js +1 -1
  5. package/dist/cjs/components/AutoPatternsCollectionPageContent/SkeletonCollection.js +1 -1
  6. package/dist/cjs/components/AutoPatternsCollectionPageFooter/AutoPatternsCollectionPageFooter.js +1 -1
  7. package/dist/cjs/components/AutoPatternsEntityPage/AutoPatternsEntityPage.js +1 -1
  8. package/dist/cjs/components/AutoPatternsEntityPage/EditModeEntityPage.js +13 -9
  9. package/dist/cjs/components/AutoPatternsEntityPage/EditModeEntityPage.js.map +1 -1
  10. package/dist/cjs/components/AutoPatternsEntityPage/Fields/Checkbox.js +1 -1
  11. package/dist/cjs/components/AutoPatternsEntityPage/Fields/DateInput.js +1 -1
  12. package/dist/cjs/components/AutoPatternsEntityPage/Fields/DateTime.js +1 -1
  13. package/dist/cjs/components/AutoPatternsEntityPage/Fields/FormFieldInput.js +1 -1
  14. package/dist/cjs/components/AutoPatternsEntityPage/Fields/ImageInput.js +1 -1
  15. package/dist/cjs/components/AutoPatternsEntityPage/Fields/LongText.js +1 -1
  16. package/dist/cjs/components/AutoPatternsEntityPage/Fields/Number.js +1 -1
  17. package/dist/cjs/components/AutoPatternsEntityPage/Fields/ShortText.js +1 -1
  18. package/dist/cjs/components/AutoPatternsEntityPage/Fields/Url.js +1 -1
  19. package/dist/cjs/components/AutoPatternsEntityPage/RenderLayout/RenderLayoutCard.js +1 -1
  20. package/dist/cjs/components/AutoPatternsEntityPage/RenderLayout/RenderLayoutContent.js +1 -1
  21. package/dist/cjs/components/AutoPatternsEntityPage/RenderLayout/RenderViewField.js +1 -1
  22. package/dist/cjs/components/AutoPatternsEntityPage/SkeletonEntity.js +1 -1
  23. package/dist/cjs/components/AutoPatternsEntityPage/ViewEntityPage/RenderViewLayoutCard.js +1 -1
  24. package/dist/cjs/components/AutoPatternsEntityPage/ViewEntityPage/RenderViewLayoutContent.js +1 -1
  25. package/dist/cjs/components/AutoPatternsEntityPage/ViewModeEntityPage.js +1 -1
  26. package/dist/cjs/components/AutoPatternsGrid/AutoPatternsGrid.js +9 -6
  27. package/dist/cjs/components/AutoPatternsGrid/AutoPatternsGrid.js.map +1 -1
  28. package/dist/cjs/components/AutoPatternsRoute/AutoPatternsPage.js +1 -1
  29. package/dist/cjs/components/AutoPatternsRoute/AutoPatternsRoutes.js +1 -1
  30. package/dist/cjs/components/AutoPatternsTable/AutoPatternsTable.js +11 -6
  31. package/dist/cjs/components/AutoPatternsTable/AutoPatternsTable.js.map +1 -1
  32. package/dist/cjs/components/AutoPatternsTableGridSwitch/AutoPatternsTableGridSwitch.js +1 -1
  33. package/dist/cjs/components/DynamicIcon.js +1 -1
  34. package/dist/cjs/components/ModalRenderer.js +1 -1
  35. package/dist/cjs/components/filters/DynamicCollectionFilter.js +1 -1
  36. package/dist/cjs/components/filters/StaticCollectionFilter.js +1 -1
  37. package/dist/cjs/components/modals/actions/BulkDeleteModal.js +32 -14
  38. package/dist/cjs/components/modals/actions/BulkDeleteModal.js.map +1 -1
  39. package/dist/cjs/components/modals/actions/CreateModal.js +1 -1
  40. package/dist/cjs/components/modals/actions/EditModal.js +1 -1
  41. package/dist/cjs/counter.js +1 -1
  42. package/dist/cjs/dataSourceAdapters/cms/filterUtils.js +3 -2
  43. package/dist/cjs/dataSourceAdapters/cms/filterUtils.js.map +1 -1
  44. package/dist/cjs/dataSourceAdapters/cms/sortUtils.js +2 -1
  45. package/dist/cjs/dataSourceAdapters/cms/sortUtils.js.map +1 -1
  46. package/dist/cjs/hooks/useBaseTableFeatures.js +6 -3
  47. package/dist/cjs/hooks/useBaseTableFeatures.js.map +1 -1
  48. package/dist/cjs/hooks/useBulkActionToolbar.js +1 -1
  49. package/dist/cjs/hooks/useCollectionPageActions.js +1 -1
  50. package/dist/cjs/hooks/useColumns.js +6 -1
  51. package/dist/cjs/hooks/useColumns.js.map +1 -1
  52. package/dist/cjs/hooks/useCommonCollectionFeatures.js +1 -1
  53. package/dist/cjs/hooks/useDataExtensionProps.js +30 -0
  54. package/dist/cjs/hooks/useDataExtensionProps.js.map +1 -0
  55. package/dist/cjs/hooks/useDragAndDropBaseProps.js +30 -0
  56. package/dist/cjs/hooks/useDragAndDropBaseProps.js.map +1 -0
  57. package/dist/cjs/hooks/useEmptyStates.js +1 -1
  58. package/dist/cjs/hooks/useEntityPageActions.js +1 -1
  59. package/dist/cjs/hooks/useFilters.js +1 -1
  60. package/dist/cjs/hooks/useGridDragAndDrop.js +17 -0
  61. package/dist/cjs/hooks/useGridDragAndDrop.js.map +1 -0
  62. package/dist/cjs/hooks/useGridFeatures.js +4 -1
  63. package/dist/cjs/hooks/useGridFeatures.js.map +1 -1
  64. package/dist/cjs/hooks/useTableDragAndDrop.js +17 -0
  65. package/dist/cjs/hooks/useTableDragAndDrop.js.map +1 -0
  66. package/dist/cjs/hooks/useTableFeatures.js +7 -2
  67. package/dist/cjs/hooks/useTableFeatures.js.map +1 -1
  68. package/dist/cjs/hooks/useTableGridSwitchDragAndDrop.js +17 -0
  69. package/dist/cjs/hooks/useTableGridSwitchDragAndDrop.js.map +1 -0
  70. package/dist/cjs/hooks/useTableGridSwitchFeatures.js +7 -2
  71. package/dist/cjs/hooks/useTableGridSwitchFeatures.js.map +1 -1
  72. package/dist/cjs/providers/AppConfigContext.js +1 -1
  73. package/dist/cjs/providers/AppContext.js +1 -1
  74. package/dist/cjs/providers/AppContextData.js +1 -1
  75. package/dist/cjs/providers/AutoPatternsOverridesContext.js +2 -2
  76. package/dist/cjs/providers/AutoPatternsOverridesContext.js.map +1 -1
  77. package/dist/cjs/providers/ErrorContext.js +1 -1
  78. package/dist/cjs/providers/ItemsContext.js +1 -1
  79. package/dist/cjs/providers/ModalContext.js +1 -1
  80. package/dist/cjs/providers/OptimisticActionsContext.js +1 -1
  81. package/dist/cjs/providers/RootAppProvider.js +1 -1
  82. package/dist/cjs/providers/SchemaContext.js +1 -1
  83. package/dist/cjs/providers/SchemaRegistryContext.js +1 -1
  84. package/dist/cjs/types/CollectionPageConfig.js.map +1 -1
  85. package/dist/cjs/types/DeepPartial.js +4 -0
  86. package/dist/cjs/types/DeepPartial.js.map +1 -0
  87. package/dist/cjs/types/actions/base.js.map +1 -1
  88. package/dist/cjs/types/types.js.map +1 -1
  89. package/dist/cjs/utils/actions/bulkDeleteAction.js +1 -1
  90. package/dist/cjs/utils/actions/createAction.js +1 -1
  91. package/dist/cjs/utils/actions/deleteAction.js +1 -1
  92. package/dist/cjs/utils/actions/updateAction.js +1 -1
  93. package/dist/esm/components/AutoPatternsEntityPage/EditModeEntityPage.js +4 -0
  94. package/dist/esm/components/AutoPatternsEntityPage/EditModeEntityPage.js.map +1 -1
  95. package/dist/esm/components/AutoPatternsGrid/AutoPatternsGrid.js +7 -4
  96. package/dist/esm/components/AutoPatternsGrid/AutoPatternsGrid.js.map +1 -1
  97. package/dist/esm/components/AutoPatternsTable/AutoPatternsTable.js +9 -4
  98. package/dist/esm/components/AutoPatternsTable/AutoPatternsTable.js.map +1 -1
  99. package/dist/esm/components/modals/actions/BulkDeleteModal.js +25 -8
  100. package/dist/esm/components/modals/actions/BulkDeleteModal.js.map +1 -1
  101. package/dist/esm/dataSourceAdapters/cms/filterUtils.js +3 -2
  102. package/dist/esm/dataSourceAdapters/cms/filterUtils.js.map +1 -1
  103. package/dist/esm/dataSourceAdapters/cms/sortUtils.js +2 -1
  104. package/dist/esm/dataSourceAdapters/cms/sortUtils.js.map +1 -1
  105. package/dist/esm/hooks/useBaseTableFeatures.js +4 -1
  106. package/dist/esm/hooks/useBaseTableFeatures.js.map +1 -1
  107. package/dist/esm/hooks/useColumns.js +5 -0
  108. package/dist/esm/hooks/useColumns.js.map +1 -1
  109. package/dist/esm/hooks/useDataExtensionProps.js +18 -0
  110. package/dist/esm/hooks/useDataExtensionProps.js.map +1 -0
  111. package/dist/esm/hooks/useDragAndDropBaseProps.js +27 -0
  112. package/dist/esm/hooks/useDragAndDropBaseProps.js.map +1 -0
  113. package/dist/esm/hooks/useGridDragAndDrop.js +13 -0
  114. package/dist/esm/hooks/useGridDragAndDrop.js.map +1 -0
  115. package/dist/esm/hooks/useGridFeatures.js +4 -1
  116. package/dist/esm/hooks/useGridFeatures.js.map +1 -1
  117. package/dist/esm/hooks/useTableDragAndDrop.js +13 -0
  118. package/dist/esm/hooks/useTableDragAndDrop.js.map +1 -0
  119. package/dist/esm/hooks/useTableFeatures.js +7 -2
  120. package/dist/esm/hooks/useTableFeatures.js.map +1 -1
  121. package/dist/esm/hooks/useTableGridSwitchDragAndDrop.js +13 -0
  122. package/dist/esm/hooks/useTableGridSwitchDragAndDrop.js.map +1 -0
  123. package/dist/esm/hooks/useTableGridSwitchFeatures.js +7 -2
  124. package/dist/esm/hooks/useTableGridSwitchFeatures.js.map +1 -1
  125. package/dist/esm/providers/AutoPatternsOverridesContext.js.map +1 -1
  126. package/dist/esm/types/CollectionPageConfig.js.map +1 -1
  127. package/dist/esm/types/DeepPartial.js +2 -0
  128. package/dist/esm/types/DeepPartial.js.map +1 -0
  129. package/dist/esm/types/actions/base.js.map +1 -1
  130. package/dist/esm/types/types.js.map +1 -1
  131. package/dist/types/components/AutoPatternsEntityPage/EditModeEntityPage.d.ts.map +1 -1
  132. package/dist/types/components/AutoPatternsGrid/AutoPatternsGrid.d.ts.map +1 -1
  133. package/dist/types/components/AutoPatternsTable/AutoPatternsTable.d.ts.map +1 -1
  134. package/dist/types/components/modals/actions/BulkDeleteModal.d.ts.map +1 -1
  135. package/dist/types/hooks/useBaseTableFeatures.d.ts +10 -0
  136. package/dist/types/hooks/useBaseTableFeatures.d.ts.map +1 -1
  137. package/dist/types/hooks/useColumns.d.ts.map +1 -1
  138. package/dist/types/hooks/useDataExtensionProps.d.ts +8 -0
  139. package/dist/types/hooks/useDataExtensionProps.d.ts.map +1 -0
  140. package/dist/types/hooks/useDragAndDropBaseProps.d.ts +4 -0
  141. package/dist/types/hooks/useDragAndDropBaseProps.d.ts.map +1 -0
  142. package/dist/types/hooks/useGridDragAndDrop.d.ts +24 -0
  143. package/dist/types/hooks/useGridDragAndDrop.d.ts.map +1 -0
  144. package/dist/types/hooks/useGridFeatures.d.ts +22 -0
  145. package/dist/types/hooks/useGridFeatures.d.ts.map +1 -1
  146. package/dist/types/hooks/useTableDragAndDrop.d.ts +3 -0
  147. package/dist/types/hooks/useTableDragAndDrop.d.ts.map +1 -0
  148. package/dist/types/hooks/useTableFeatures.d.ts +2 -0
  149. package/dist/types/hooks/useTableFeatures.d.ts.map +1 -1
  150. package/dist/types/hooks/useTableGridSwitchDragAndDrop.d.ts +27 -0
  151. package/dist/types/hooks/useTableGridSwitchDragAndDrop.d.ts.map +1 -0
  152. package/dist/types/hooks/useTableGridSwitchFeatures.d.ts +24 -0
  153. package/dist/types/hooks/useTableGridSwitchFeatures.d.ts.map +1 -1
  154. package/dist/types/providers/AutoPatternsOverridesContext.d.ts +6 -0
  155. package/dist/types/providers/AutoPatternsOverridesContext.d.ts.map +1 -1
  156. package/dist/types/types/CollectionPageConfig.d.ts +19 -0
  157. package/dist/types/types/CollectionPageConfig.d.ts.map +1 -1
  158. package/dist/types/types/DeepPartial.d.ts +4 -0
  159. package/dist/types/types/DeepPartial.d.ts.map +1 -0
  160. package/dist/types/types/actions/base.d.ts +5 -0
  161. package/dist/types/types/actions/base.d.ts.map +1 -1
  162. package/dist/types/types/types.d.ts +24 -1
  163. package/dist/types/types/types.d.ts.map +1 -1
  164. package/docs/GETTING_STARTED.md +99 -2
  165. package/mcp-docs/app_config_structure.md +15 -1
  166. package/mcp-docs/auto-patterns-guide.md +317 -80
  167. package/mcp-docs/bulk_actions.md +60 -0
  168. package/mcp-docs/collection_page.md +34 -0
  169. package/mcp-docs/custom_overrides.md +134 -54
  170. package/mcp-docs/schema_config.md +74 -25
  171. package/mcp-docs/wix_fqdn_custom_data_source.md +66 -11
  172. package/package.json +12 -12
@@ -29,19 +29,47 @@ export interface SchemaConfig {
29
29
  | { items: any[]; cursor?: string | null; total?: number | null }
30
30
  | { items: any[]; hasNext?: boolean; total?: number | null }
31
31
  >;
32
+ /**
33
+ * Reorder an entity within the collection.
34
+ * @param id The ID of the entity to move.
35
+ * @param params.moveAfterId The ID of the entity that should precede the moved entity, or null/undefined to move to start.
36
+ */
37
+ move?: (
38
+ id: string,
39
+ params: {
40
+ moveAfterId: string | null | undefined;
41
+ },
42
+ ) => Promise<void>;
32
43
  };
44
+ /**
45
+ * Whether the entity supports data extensions
46
+ * Maps to `info.extensible` in the collection schema - map only properties that are relevant or `null` if not extensible
47
+ */
48
+ extensible: {
49
+ /**
50
+ * Whether the entity supports filtering on data extensions
51
+ * Maps to `info.extensible.filterable` in the collection schema
52
+ */
53
+ filterable?: boolean;
54
+ } | null;
55
+ /**
56
+ * Whether the schema contains personally identifiable information (PII).
57
+ * Maps to `info.containsPii` in the collection schema
58
+ */
59
+ containsPii: boolean;
33
60
  }
34
61
 
35
62
  export interface Query {
36
- limit: number; // Maximum number of items to return per request (controls page size)
37
- offset?: number; // Number of items to skip from the beginning (for pagination)
38
- page: number; // Current page number (1-based, works with limit for pagination)
39
- search?: string; // Text search query applied to searchable fields
40
- cursor?: string | null; // Cursor-based pagination token (alternative to offset-based pagination)
41
- filters: Record<string, any>; // Field-specific filter conditions (keys = field IDs, values = filter criteria)
42
- sort?: { // Sorting configuration for result ordering
43
- fieldName: string; // Field ID to sort by (must be sortable per field capabilities)
44
- order: 'asc' | 'desc'; // Sort direction
63
+ limit: number; // Maximum number of items to return per request (controls page size)
64
+ offset?: number; // Number of items to skip from the beginning (for pagination)
65
+ page: number; // Current page number (1-based, works with limit for pagination)
66
+ search?: string; // Text search query applied to searchable fields
67
+ cursor?: string | null; // Cursor-based pagination token (alternative to offset-based pagination)
68
+ filters: Record<string, any>; // Field-specific filter conditions (keys = field IDs, values = filter criteria)
69
+ sort?: {
70
+ // Sorting configuration for result ordering
71
+ fieldName: string; // Field ID to sort by (must be sortable per field capabilities)
72
+ order: 'asc' | 'desc'; // Sort direction
45
73
  }[];
46
74
  }
47
75
  ```
@@ -92,43 +120,63 @@ export type Field = ReferenceField | NonReferenceField;
92
120
  ### Key Properties
93
121
 
94
122
  • **id** - `string`
95
- - Collection identifier (e.g., "WixPets")
96
- - Example: `schema.id === "WixPets"`
123
+
124
+ - Collection identifier (e.g., "WixPets")
125
+ - Example: `schema.id === "WixPets"`
97
126
 
98
127
  • **idField** - `string`
99
- - Primary key field name (usually "_id")
100
- - Required for all update/delete operations
101
- - Example: `const id = item[schema.idField]`
128
+
129
+ - Primary key field name (usually "\_id")
130
+ - Required for all update/delete operations
131
+ - Example: `const id = item[schema.idField]`
102
132
 
103
133
  • **displayField** - `string`
104
- - Main field for displaying items (name, title, etc.)
105
- - Used in UI components for item identification
106
- - Example: `const label = item[schema.displayField]`
134
+
135
+ - Main field for displaying items (name, title, etc.)
136
+ - Used in UI components for item identification
137
+ - Example: `const label = item[schema.displayField]`
107
138
 
108
139
  • **fields** - `Record<string, Field | undefined>`
109
- - Complete field definitions with types and metadata
110
- - Useful for dynamic form generation or validation
111
- - Each field contains type information, validation rules, and capabilities
112
- - Example: `schema.fields.name.type === 'SHORT_TEXT'`
140
+
141
+ - Complete field definitions with types and metadata
142
+ - Useful for dynamic form generation or validation
143
+ - Each field contains type information, validation rules, and capabilities
144
+ - Example: `schema.fields.name.type === 'SHORT_TEXT'`
113
145
 
114
146
  • **actions** - Server operation functions
115
- - Pre-configured API calls for CRUD operations
116
- - Use with optimistic actions for best UX
117
- - All actions return Promises and handle server communication
118
- - Example: `await schema.actions.update(item)`
147
+
148
+ - Pre-configured API calls for CRUD operations
149
+ - Use with optimistic actions for best UX
150
+ - All actions return Promises and handle server communication
151
+ - Example: `await schema.actions.update(item)`
152
+
153
+ • **extensible** - `object | null`
154
+
155
+ - Indicates if the entity supports data extensions
156
+
157
+ • **extensible.filterable** - `boolean | undefined`
158
+
159
+ - Indicates if filtering on data extensions is supported
160
+
161
+ • **containsPii** - `boolean`
162
+
163
+ - Indicates if the schema contains personally identifiable information (PII)
119
164
 
120
165
  ### Available Schema Actions
121
166
 
122
167
  #### Individual Entity Operations
168
+
123
169
  - **schema.actions.get(entityId)** - Retrieve a single entity by ID
124
170
  - **schema.actions.create(newEntity)** - Create a new entity
125
171
  - **schema.actions.update(updatedEntity)** - Update an existing entity
126
172
  - **schema.actions.delete(entityId)** - Delete a single entity by ID
127
173
 
128
174
  #### Bulk Operations
175
+
129
176
  - **schema.actions.bulkDelete(entityIds)** - Delete multiple entities by their IDs
130
177
 
131
178
  #### Query Operations
179
+
132
180
  - **schema.actions.find(query, options)** - Search and filter entities
133
181
  - `query`: Query object with pagination, filtering, sorting, and search criteria (see Query Interface section)
134
182
  - `options.searchableFieldIds`: Array of field IDs that support text search
@@ -155,6 +203,7 @@ Each field in the `fields` record contains:
155
203
  ### Reference Fields
156
204
 
157
205
  Reference fields have additional metadata:
206
+
158
207
  - **referenceMetadata.referencedCollectionId**: ID of the collection being referenced
159
208
  - Used for establishing relationships between different collections
160
209
 
@@ -3,6 +3,7 @@
3
3
  **🛑 CRITICAL PREREQUISITE**: This guide explains a specialized feature that exists within the broader auto-patterns framework. You **CANNOT** implement this guide without first having the complete content of the WixAutoPatternsGuide.
4
4
 
5
5
  **📋 MANDATORY FIRST STEP**: Before proceeding with this FQDN-specific implementation:
6
+
6
7
  1. **You MUST call the `WixAutoPatternsGuide` tool first** to get the foundational auto-patterns knowledge
7
8
  2. **This document is NOT standalone** - it's an advanced feature guide that builds upon the core auto-patterns concepts
8
9
  3. **Without the WixAutoPatternsGuide content**, you will not understand the basic concepts, component structure, or implementation patterns required for this FQDN implementation
@@ -16,12 +17,14 @@ When implementing a custom data source based on a Wix Business API FQDN, you'll
16
17
  ## Prerequisites: Required Tools and Knowledge
17
18
 
18
19
  **🛑 ABSOLUTE REQUIREMENT - WixAutoPatternsGuide Content**:
20
+
19
21
  - **You MUST have the complete WixAutoPatternsGuide content** before starting this implementation
20
22
  - **This FQDN guide is NOT self-contained** - it's a specialized extension of the main auto-patterns guide
21
23
  - **If you haven't called the `WixAutoPatternsGuide` tool yet**, stop now and call it first
22
24
  - **This guide will reference concepts, components, and patterns** that are only explained in the main guide
23
25
 
24
26
  **🛑 CRITICAL**: Before proceeding with this guide, you must have the following tools available:
27
+
25
28
  - `WixAutoPatternsGuide` tool for understanding auto-patterns fundamentals and implementation patterns (**MANDATORY FIRST STEP**)
26
29
  - `fqdn_schema` tool for extracting schema information from FQDNs
27
30
  - `client_lib` tool for determining the correct client library package
@@ -30,6 +33,7 @@ When implementing a custom data source based on a Wix Business API FQDN, you'll
30
33
 
31
34
  **Auto-Patterns Context Requirement:**
32
35
  If you haven't already used the `WixAutoPatternsGuide` tool in this conversation, you MUST call it first to understand:
36
+
33
37
  - How AutoPatternsApp works
34
38
  - AppConfig structure and requirements
35
39
  - Custom data source implementation patterns
@@ -42,6 +46,7 @@ If you haven't already used the `WixAutoPatternsGuide` tool in this conversation
42
46
  To add these tools, you need to install the **business-schema-mcp** server:
43
47
 
44
48
  **Installation Instructions:**
49
+
45
50
  1. Follow the setup instructions at: https://github.com/wix-private/mcp-servers/tree/master/packages/business-schema-mcp
46
51
  2. Configure the MCP server according to the documentation
47
52
  3. Restart your development environment to load the new tools
@@ -49,6 +54,7 @@ To add these tools, you need to install the **business-schema-mcp** server:
49
54
 
50
55
  **Tool Verification:**
51
56
  Before continuing, verify that you have access to:
57
+
52
58
  - `fqdn_schema` tool - for extracting entity schema from FQDNs
53
59
  - `client_lib` tool - for determining the correct SDK package to use
54
60
 
@@ -61,6 +67,7 @@ Use fqdn_schema tool with your FQDN (e.g., "wix.bookings.v1.sessions")
61
67
  ```
62
68
 
63
69
  This will provide you with:
70
+
64
71
  - Entity field definitions
65
72
  - Available actions/operations
66
73
  - Field types and constraints
@@ -81,6 +88,7 @@ This will tell you which library to import for your custom data source implement
81
88
  Transform the FQDN schema from Step 1 into a AutoPatterns-compatible SchemaConfig by mapping the FQDN field types to AutoPatterns field types. Identify appropriate fields for `displayField` and `idField` based on your FQDN schema.
82
89
 
83
90
  **🛑 MANDATORY - Query Operators Must Be Empty Array**: When implementing a custom data source, you **MUST** set `supportedQueryOperators: []` (empty array) for all fields. This is required because:
91
+
84
92
  - Custom data sources handle all query operations directly through your implementation
85
93
  - You don't need to specify individual operators for each field
86
94
  - The custom data source `find` action will receive all queries regardless of declared operators
@@ -94,12 +102,14 @@ Transform the FQDN schema from Step 1 into a AutoPatterns-compatible SchemaConfi
94
102
  - **In API calls**: Use the original snake_case field names (e.g., `primary_info.email`, `created_date`, `last_activity.activity_date`)
95
103
 
96
104
  **Field Path Conversion Examples:**
105
+
97
106
  - `primary_info.email` → `primaryInfo.email` (NOT `primaryEmail`)
98
107
  - `last_activity.activity_date` → `lastActivity.activityDate` (NOT `lastActivityDate`)
99
108
  - `job_title` → `jobTitle`
100
109
  - `created_date` → `createdDate`
101
110
 
102
111
  This conversion ensures:
112
+
103
113
  - **Consistent JavaScript naming conventions** in your AutoPatterns configuration
104
114
  - **Preserved field path structure** for nested object access
105
115
  - **Proper field mapping** between configuration and data source
@@ -123,10 +133,14 @@ Follow the complete custom data source implementation guide in the "Custom Overr
123
133
  Create your custom data source with the hook pattern:
124
134
 
125
135
  In `components/customDataSources/myCustomDataSource.ts`:
136
+
126
137
  ```typescript
127
- import { errorHandler } from '@wix/essentials';
138
+ import { SchemaConfig } from '@wix/auto-patterns/types';
128
139
 
129
- export const myCustomDataSource = async (collectionId: string, context: any) => {
140
+ export const myCustomDataSource = async (
141
+ collectionId: string,
142
+ context: any,
143
+ ): Promise<SchemaConfig> => {
130
144
  return {
131
145
  id: 'myCustomCollection',
132
146
  fields: {
@@ -145,7 +159,9 @@ export const myCustomDataSource = async (collectionId: string, context: any) =>
145
159
  // {}
146
160
  // );
147
161
  // Remember to map the response fields from snake_case to camelCase
148
- throw new Error('get action not implemented - user must implement this method');
162
+ throw new Error(
163
+ 'get action not implemented - user must implement this method',
164
+ );
149
165
  },
150
166
  create: async (newEntity: any) => {
151
167
  // TODO: Implement using your FQDN client library
@@ -157,7 +173,9 @@ export const myCustomDataSource = async (collectionId: string, context: any) =>
157
173
  // {}
158
174
  // );
159
175
  // Remember to map the request fields from camelCase to snake_case
160
- throw new Error('create action not implemented - user must implement this method');
176
+ throw new Error(
177
+ 'create action not implemented - user must implement this method',
178
+ );
161
179
  },
162
180
  update: async (updatedEntity: any) => {
163
181
  // TODO: Implement using your FQDN client library
@@ -169,7 +187,9 @@ export const myCustomDataSource = async (collectionId: string, context: any) =>
169
187
  // {}
170
188
  // );
171
189
  // Remember to map the request fields from camelCase to snake_case
172
- throw new Error('update action not implemented - user must implement this method');
190
+ throw new Error(
191
+ 'update action not implemented - user must implement this method',
192
+ );
173
193
  },
174
194
  delete: async (entityId: string) => {
175
195
  // TODO: Implement using your FQDN client library
@@ -180,7 +200,9 @@ export const myCustomDataSource = async (collectionId: string, context: any) =>
180
200
  // },
181
201
  // {}
182
202
  // );
183
- throw new Error('delete action not implemented - user must implement this method');
203
+ throw new Error(
204
+ 'delete action not implemented - user must implement this method',
205
+ );
184
206
  },
185
207
  bulkDelete: async (entityIds: string[]) => {
186
208
  // TODO: Implement using your FQDN client library
@@ -191,7 +213,9 @@ export const myCustomDataSource = async (collectionId: string, context: any) =>
191
213
  // },
192
214
  // {}
193
215
  // );
194
- throw new Error('bulkDelete action not implemented - user must implement this method');
216
+ throw new Error(
217
+ 'bulkDelete action not implemented - user must implement this method',
218
+ );
195
219
  },
196
220
  find: async (query: Query, options?: any) => {
197
221
  // TODO: Implement using your FQDN client library
@@ -207,21 +231,47 @@ export const myCustomDataSource = async (collectionId: string, context: any) =>
207
231
  // Detect by presence of query.cursor (cursor mode) vs. query.offset/page (offset mode):
208
232
  // - Cursor mode: return { items, cursor, total? }
209
233
  // - Offset mode (default): return { items, hasNext, total? }
210
- throw new Error('find action not implemented - user must implement this method');
211
- }
212
- }
234
+ throw new Error(
235
+ 'find action not implemented - user must implement this method',
236
+ );
237
+ },
238
+ move: async (
239
+ id,
240
+ {
241
+ moveAfterId,
242
+ }: {
243
+ moveAfterId: string | null | undefined;
244
+ },
245
+ ) => {
246
+ // TODO: Implement using your FQDN client library if it supports ordering/moving entities
247
+ // Example:
248
+ // return errorHandler.withErrorHandler(
249
+ // async () => {
250
+ // return yourFQDNClient.mvoeEntity(id, {
251
+ // moveAfterCategoryId: moveAfterId,
252
+ // position: moveAfterId ? 'AFTER' : 'FIRST',
253
+ // })
254
+ // },
255
+ // {}
256
+ // );
257
+ throw new Error(
258
+ 'move action not implemented - user must implement this method',
259
+ );
260
+ },
261
+ },
213
262
  };
214
263
  };
215
264
  ```
216
265
 
217
266
  In `components/customDataSources/index.tsx`:
267
+
218
268
  ```typescript
219
269
  import { myCustomDataSource } from './myCustomDataSource';
220
270
 
221
271
  export const useCustomDataSources = () => {
222
272
  // You can access React context and other hooks here
223
273
  return {
224
- myCustomDataSource
274
+ myCustomDataSource,
225
275
  };
226
276
  };
227
277
  ```
@@ -236,6 +286,7 @@ Configure your AppConfig to use the custom data source by setting:
236
286
  - `custom.id` matching your custom data source identifier from Step 4
237
287
 
238
288
  **Key FQDN-specific configuration:**
289
+
239
290
  ```json
240
291
  "collection": {
241
292
  "collectionId": "yourCustomCollectionId",
@@ -275,9 +326,11 @@ If the user specifically requests custom actions for your FQDN-based data source
275
326
  ## FQDN-Specific Implementation Checklist
276
327
 
277
328
  ### Core Requirements (Always Required)
329
+
278
330
  ✅ **Schema Extraction**: Used fqdn_schema tool to understand entity structure
279
331
  ✅ **Client Library**: Used client_lib tool to identify correct SDK package
280
332
  ✅ **Field Mapping**: Mapped FQDN field types to AutoPatterns field types
333
+ ✅ **Entity Info Mapping**: Mapped FQDN entity info to SchemaConfig properties (containsPii, extensible)
281
334
  ✅ **🛑 MANDATORY: Empty Query Operators**: Set `supportedQueryOperators: []` for ALL fields to avoid TypeScript errors
282
335
  ✅ **⚠️ CRITICAL: Field ID Conversion**: Converted individual field segments from snake_case to camelCase while preserving field path structure in SchemaConfig and AppConfig
283
336
  ✅ **AppConfig Update**: Set `entityTypeSource: "custom"` and provided custom.id
@@ -286,6 +339,7 @@ If the user specifically requests custom actions for your FQDN-based data source
286
339
  ✅ **⚠️ CRITICAL: Unimplemented Actions**: All schema actions contain helpful comments but throw unimplemented exceptions - **user must implement these actions themselves**
287
340
 
288
341
  ### Optional Enhancements (Only When Explicitly Requested)
342
+
289
343
  ⚠️ **Custom Actions**: Only implement if user specifically requests custom actions beyond standard CRUD
290
344
  ⚠️ **Column Overrides**: Only implement if user requests custom column rendering
291
345
  ⚠️ **Custom Components**: Only implement if user requests custom entity page components
@@ -311,6 +365,7 @@ For general implementation pitfalls, refer to the "Custom Overrides" section.
311
365
  **⚠️ IMPORTANT**: The following customizations should only be implemented when the user explicitly requests them. A basic dashboard page does not require these advanced features.
312
366
 
313
367
  For advanced customization options when specifically requested, refer to these sections:
368
+
314
369
  - "Collection Page Actions" - For custom collection-level actions
315
370
  - "Action Cell" - For custom row-level actions
316
371
  - "Bulk Actions" - For custom bulk operations
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/auto-patterns",
3
- "version": "1.36.0",
3
+ "version": "1.38.0",
4
4
  "license": "UNLICENSED",
5
5
  "author": {
6
6
  "name": "Matvey Oklander",
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@babel/runtime": "^7.28.4",
39
- "@wix/data": "^1.0.290",
39
+ "@wix/data": "^1.0.294",
40
40
  "@wix/wix-ui-icons-common": "^3.87.3",
41
41
  "lodash": "^4.17.21"
42
42
  },
@@ -51,18 +51,18 @@
51
51
  "@types/node": "^16.18.126",
52
52
  "@types/node-fetch": "^2.6.13",
53
53
  "@types/react": "^16.14.66",
54
- "@wix/crm": "^1.0.1022",
54
+ "@wix/crm": "^1.0.1045",
55
55
  "@wix/design-system": "^1.214.3",
56
- "@wix/eslint-config-yoshi": "^6.158.0",
56
+ "@wix/eslint-config-yoshi": "^6.159.0",
57
57
  "@wix/fe-essentials-standalone": "^1.1380.0",
58
- "@wix/jest-yoshi-preset": "^6.158.0",
58
+ "@wix/jest-yoshi-preset": "^6.159.0",
59
59
  "@wix/patterns": "^1.279.0",
60
- "@wix/sdk": "^1.16.0",
61
- "@wix/sdk-testkit": ">=0.1.8",
62
- "@wix/wix-data-items-common": "^1.0.235",
63
- "@wix/wix-data-items-sdk": "^1.0.428",
64
- "@wix/yoshi-flow-library": "^6.158.0",
65
- "@wix/yoshi-style-dependencies": "^6.158.0",
60
+ "@wix/sdk": "^1.17.1",
61
+ "@wix/sdk-testkit": ">=0.1.9",
62
+ "@wix/wix-data-items-common": "^1.0.242",
63
+ "@wix/wix-data-items-sdk": "^1.0.436",
64
+ "@wix/yoshi-flow-library": "^6.159.0",
65
+ "@wix/yoshi-style-dependencies": "^6.159.0",
66
66
  "chance": "^1.1.13",
67
67
  "date-fns": "^2.30.0",
68
68
  "express": "^4.21.2",
@@ -125,5 +125,5 @@
125
125
  "wallaby": {
126
126
  "autoDetect": true
127
127
  },
128
- "falconPackageHash": "c61a8e7f9dc94713cb45b18fb6a83ac04a1418c6992bdb349e7a1dec"
128
+ "falconPackageHash": "a96a6c3b1913c3c54f13a26af4926aa889f4274aa141f24fc483dcd0"
129
129
  }