@wix/patterns-cms 1.17.0 → 1.18.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 (37) hide show
  1. package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js +59 -27
  2. package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
  3. package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js +34 -2
  4. package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -1
  5. package/dist/cjs/adapter/createCmsFieldActions.js +35 -3
  6. package/dist/cjs/adapter/createCmsFieldActions.js.map +1 -1
  7. package/dist/cjs/adapter/fieldSettings/CmsFieldSettings.js +359 -0
  8. package/dist/cjs/adapter/fieldSettings/CmsFieldSettings.js.map +1 -0
  9. package/dist/cjs/adapter/fieldSettings/CmsFieldSettingsState.js +144 -0
  10. package/dist/cjs/adapter/fieldSettings/CmsFieldSettingsState.js.map +1 -0
  11. package/dist/cjs/adapter/fieldSettings/createCmsFieldSettings.js +29 -0
  12. package/dist/cjs/adapter/fieldSettings/createCmsFieldSettings.js.map +1 -0
  13. package/dist/cjs/adapter/useCmsSchemaSource.js +70 -56
  14. package/dist/cjs/adapter/useCmsSchemaSource.js.map +1 -1
  15. package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js +50 -23
  16. package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
  17. package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js +24 -2
  18. package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -1
  19. package/dist/esm/adapter/createCmsFieldActions.js +28 -3
  20. package/dist/esm/adapter/createCmsFieldActions.js.map +1 -1
  21. package/dist/esm/adapter/fieldSettings/CmsFieldSettings.js +45 -0
  22. package/dist/esm/adapter/fieldSettings/CmsFieldSettings.js.map +1 -0
  23. package/dist/esm/adapter/fieldSettings/CmsFieldSettingsState.js +136 -0
  24. package/dist/esm/adapter/fieldSettings/CmsFieldSettingsState.js.map +1 -0
  25. package/dist/esm/adapter/fieldSettings/createCmsFieldSettings.js +13 -0
  26. package/dist/esm/adapter/fieldSettings/createCmsFieldSettings.js.map +1 -0
  27. package/dist/esm/adapter/useCmsSchemaSource.js +71 -59
  28. package/dist/esm/adapter/useCmsSchemaSource.js.map +1 -1
  29. package/dist/types/adapter/createCmsFieldActions.d.ts.map +1 -1
  30. package/dist/types/adapter/fieldSettings/CmsFieldSettings.d.ts +12 -0
  31. package/dist/types/adapter/fieldSettings/CmsFieldSettings.d.ts.map +1 -0
  32. package/dist/types/adapter/fieldSettings/CmsFieldSettingsState.d.ts +53 -0
  33. package/dist/types/adapter/fieldSettings/CmsFieldSettingsState.d.ts.map +1 -0
  34. package/dist/types/adapter/fieldSettings/createCmsFieldSettings.d.ts +3 -0
  35. package/dist/types/adapter/fieldSettings/createCmsFieldSettings.d.ts.map +1 -0
  36. package/dist/types/adapter/useCmsSchemaSource.d.ts.map +1 -1
  37. package/package.json +9 -4
@@ -10,6 +10,7 @@ jest.mock('@wix/data', () => {
10
10
  ...actual.collections,
11
11
  createDataCollectionField: jest.fn(),
12
12
  patchDataCollectionField: jest.fn(),
13
+ updateDataCollectionField: jest.fn(),
13
14
  deleteDataCollectionField: jest.fn(),
14
15
  patchDataCollection: jest.fn(),
15
16
  updateDataCollection: jest.fn()
@@ -28,6 +29,7 @@ jest.mock('@wix/data', () => {
28
29
  // Re-typing each mock with the call shape the adapter uses unblocks both.
29
30
  const createDataCollectionField = _data.collections.createDataCollectionField;
30
31
  const patchDataCollectionField = _data.collections.patchDataCollectionField;
32
+ const updateDataCollectionField = _data.collections.updateDataCollectionField;
31
33
  const deleteDataCollectionField = _data.collections.deleteDataCollectionField;
32
34
  const patchDataCollection = _data.collections.patchDataCollection;
33
35
  // updateDataCollection resolves with the updated collection directly (not
@@ -74,6 +76,9 @@ describe('createCmsFieldActions', () => {
74
76
  patchDataCollectionField.mockResolvedValue({
75
77
  dataCollection: makeCollection([])
76
78
  });
79
+ updateDataCollectionField.mockResolvedValue({
80
+ dataCollection: makeCollection([])
81
+ });
77
82
  updateDataCollection.mockImplementation(async dataCollection => dataCollection);
78
83
  });
79
84
  describe('addField', () => {
@@ -246,17 +251,26 @@ describe('createCmsFieldActions', () => {
246
251
  expect(updateDataCollection).not.toHaveBeenCalled();
247
252
  });
248
253
  });
254
+
255
+ // editField sends the whole field definition through updateDataCollectionField,
256
+ // not a patch: patchDataCollectionField rejects `required` and the range props.
257
+ // Every assertion here is on the merged result — the existing field minus its
258
+ // read-only props, with the update applied on top.
249
259
  describe('editField', () => {
250
- it('patches only displayName when only displayName is provided', async () => {
260
+ it('changes displayName and keeps the rest of the field definition', async () => {
251
261
  const actions = (0, _createCmsFieldActions.createCmsFieldActions)(COLLECTION_ID, () => makeCollection([makeField({
252
262
  key: 'name'
253
263
  })]));
254
264
  await actions.editField('name', {
255
265
  displayName: 'Renamed'
256
266
  });
257
- expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
258
- key: 'name',
259
- displayName: 'Renamed'
267
+ expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
268
+ field: {
269
+ key: 'name',
270
+ displayName: 'Renamed',
271
+ type: _data.collections.Type.TEXT,
272
+ encrypted: false
273
+ }
260
274
  });
261
275
  });
262
276
  it('maps isPii to encrypted and helpText to description', async () => {
@@ -267,13 +281,17 @@ describe('createCmsFieldActions', () => {
267
281
  isPii: true,
268
282
  helpText: 'hint'
269
283
  });
270
- expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
271
- key: 'name',
272
- encrypted: true,
273
- description: 'hint'
284
+ expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
285
+ field: {
286
+ key: 'name',
287
+ displayName: 'Source Field',
288
+ type: _data.collections.Type.TEXT,
289
+ encrypted: true,
290
+ description: 'hint'
291
+ }
274
292
  });
275
293
  });
276
- it('includes numberRange in the patch only when the source CMS field is NUMBER', async () => {
294
+ it('includes numberRange only when the source CMS field is NUMBER', async () => {
277
295
  const actions = (0, _createCmsFieldActions.createCmsFieldActions)(COLLECTION_ID, () => makeCollection([makeField({
278
296
  key: 'age',
279
297
  type: _data.collections.Type.NUMBER
@@ -287,12 +305,17 @@ describe('createCmsFieldActions', () => {
287
305
  }
288
306
  }
289
307
  });
290
- expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
291
- key: 'age',
292
- required: true,
293
- numberRange: {
294
- min: 0,
295
- max: 100
308
+ expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
309
+ field: {
310
+ key: 'age',
311
+ displayName: 'Source Field',
312
+ type: _data.collections.Type.NUMBER,
313
+ encrypted: false,
314
+ required: true,
315
+ numberRange: {
316
+ min: 0,
317
+ max: 100
318
+ }
296
319
  }
297
320
  });
298
321
  });
@@ -310,14 +333,16 @@ describe('createCmsFieldActions', () => {
310
333
  }
311
334
  }
312
335
  });
313
- const [, patch] = patchDataCollectionField.mock.calls[0];
314
- expect(patch).not.toHaveProperty('numberRange');
315
- expect(patch).toMatchObject({
336
+ const [, {
337
+ field
338
+ }] = updateDataCollectionField.mock.calls[0];
339
+ expect(field).not.toHaveProperty('numberRange');
340
+ expect(field).toMatchObject({
316
341
  key: 'name',
317
342
  required: true
318
343
  });
319
344
  });
320
- it('includes stringLengthRange in the patch only when the source CMS field is TEXT', async () => {
345
+ it('includes stringLengthRange only when the source CMS field is TEXT', async () => {
321
346
  const actions = (0, _createCmsFieldActions.createCmsFieldActions)(COLLECTION_ID, () => makeCollection([makeField({
322
347
  key: 'name',
323
348
  type: _data.collections.Type.TEXT
@@ -331,12 +356,17 @@ describe('createCmsFieldActions', () => {
331
356
  }
332
357
  }
333
358
  });
334
- expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
335
- key: 'name',
336
- required: false,
337
- stringLengthRange: {
338
- minLength: 1,
339
- maxLength: 30
359
+ expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {
360
+ field: {
361
+ key: 'name',
362
+ displayName: 'Source Field',
363
+ type: _data.collections.Type.TEXT,
364
+ encrypted: false,
365
+ required: false,
366
+ stringLengthRange: {
367
+ minLength: 1,
368
+ maxLength: 30
369
+ }
340
370
  }
341
371
  });
342
372
  });
@@ -354,8 +384,10 @@ describe('createCmsFieldActions', () => {
354
384
  }
355
385
  }
356
386
  });
357
- const [, patch] = patchDataCollectionField.mock.calls[0];
358
- expect(patch).not.toHaveProperty('stringLengthRange');
387
+ const [, {
388
+ field
389
+ }] = updateDataCollectionField.mock.calls[0];
390
+ expect(field).not.toHaveProperty('stringLengthRange');
359
391
  });
360
392
  });
361
393
  describe('renameField', () => {
@@ -1 +1 @@
1
- {"version":3,"names":["_data","require","_createCmsFieldActions","jest","mock","actual","requireActual","collections","createDataCollectionField","fn","patchDataCollectionField","deleteDataCollectionField","patchDataCollection","updateDataCollection","tasks","createTask","getTask","COLLECTION_ID","makeField","overrides","key","displayName","type","Type","TEXT","systemField","encrypted","makeCollection","fields","_id","makePatternsField","base","id","describe","beforeEach","clearAllMocks","mockResolvedValue","dataCollection","mockImplementation","it","actions","createCmsFieldActions","addField","calledCollectionId","payload","calls","expect","toBe","field","toMatchObject","required","toBeTruthy","not","isPii","helpText","description","validation","numberRange","min","max","NUMBER","toEqual","toBeUndefined","stringLengthRange","minLength","maxLength","rejects","toThrow","toHaveBeenCalled","existing","addFields","toHaveBeenCalledTimes","Object","keys","color","editField","toHaveBeenCalledWith","patch","toHaveProperty","renameField","deleteField","fieldKey","makePrimary","displayField","duplicateField","capabilities","sortable","queryOperators","QueryOperator","EQ","_payload$field$typeMe","_payload$field$typeMe2","sourceField","MULTI_REFERENCE","typeMetadata","multiReference","referencingFieldKey","referencedCollectionId","status","duplicateFieldWithContent","targetFieldKey","copyFieldDataOptions","dataCollectionId","sourceFieldKey","failures","code"],"sources":["../../../../src/adapter/__tests__/cmsFieldActions.spec.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field } from '@wix/patterns';\nimport { createCmsFieldActions } from '../createCmsFieldActions';\n\njest.mock('@wix/data', () => {\n const actual = jest.requireActual('@wix/data');\n return {\n ...actual,\n collections: {\n ...actual.collections,\n createDataCollectionField: jest.fn(),\n patchDataCollectionField: jest.fn(),\n deleteDataCollectionField: jest.fn(),\n patchDataCollection: jest.fn(),\n updateDataCollection: jest.fn(),\n },\n tasks: {\n ...actual.tasks,\n createTask: jest.fn(),\n getTask: jest.fn(),\n },\n };\n});\n\n// Typed accessors — the @wix/data SDK exposes overloaded callable types\n// (MaybeContext<...>), and jest.Mocked<typeof collections> resolves to the\n// HttpClient-form overload, which makes mockResolvedValue/mock.calls unusable.\n// Re-typing each mock with the call shape the adapter uses unblocks both.\nconst createDataCollectionField =\n collections.createDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { field: collections.Field }]\n >;\nconst patchDataCollectionField =\n collections.patchDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, field: collections.Field]\n >;\nconst deleteDataCollectionField =\n collections.deleteDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { fieldKey: string }]\n >;\nconst patchDataCollection =\n collections.patchDataCollection as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, dataCollection: collections.PatchDataCollection]\n >;\n// updateDataCollection resolves with the updated collection directly (not\n// wrapped in `{ dataCollection }`, unlike the field mutations).\nconst updateDataCollection =\n collections.updateDataCollection as unknown as jest.Mock<\n Promise<collections.DataCollection>,\n [dataCollection: collections.DataCollection]\n >;\n\ninterface CopyTaskState {\n _id: string;\n status: 'NEW' | 'RUNNING' | 'COMPLETED' | 'FAILED';\n failures?: { code?: string; description?: string }[];\n}\n\nconst createTask = tasks.createTask as unknown as jest.Mock<\n Promise<{ _id: string }>,\n [task: { type: string; copyFieldDataOptions: unknown }]\n>;\nconst getTask = tasks.getTask as unknown as jest.Mock<\n Promise<CopyTaskState>,\n [taskId: string]\n>;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst makeField = (\n overrides: Partial<collections.Field> = {},\n): collections.Field => ({\n key: 'sourceField',\n displayName: 'Source Field',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n ...overrides,\n});\n\nconst makeCollection = (\n fields: collections.Field[],\n): collections.DataCollection => ({ _id: COLLECTION_ID, fields });\n\nconst makePatternsField = (overrides: Partial<Field> = {}): Field => {\n const base: Field = {\n id: 'ignored-by-addField',\n displayName: 'New Field',\n type: 'SHORT_TEXT',\n };\n return { ...base, ...overrides } as Field;\n};\n\ndescribe('createCmsFieldActions', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n createDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n deleteDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollection.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n updateDataCollection.mockImplementation(\n async (dataCollection) => dataCollection,\n );\n });\n\n describe('addField', () => {\n it('maps the patterns field type to the CMS type and derives the key from displayName', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ displayName: 'My New Field' }),\n );\n\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'My New Field',\n type: collections.Type.TEXT,\n required: false,\n });\n expect(payload.field.key).toBeTruthy();\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newField' })]),\n );\n\n await actions.addField!(makePatternsField({ displayName: 'New Field' }));\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('newField');\n });\n\n it('sets encrypted when isPii is true and description from helpText', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ isPii: true, helpText: 'Some hint' }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.encrypted).toBe(true);\n expect(payload.field.description).toBe('Some hint');\n });\n\n it('passes numberRange only when the field type is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'NUMBER',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.type).toBe(collections.Type.NUMBER);\n expect(payload.field.numberRange).toEqual({ min: 0, max: 10 });\n });\n\n it('ignores numberRange when the field type is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.numberRange).toBeUndefined();\n });\n\n it('passes stringLengthRange only when the field type is SHORT_TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 50 },\n },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.stringLengthRange).toEqual({\n minLength: 1,\n maxLength: 50,\n });\n });\n\n it('throws when the patterns type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addField!(makePatternsField({ type: 'IMAGE' })),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('uses validation.required when provided', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ validation: { required: true } }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.required).toBe(true);\n });\n });\n\n describe('addFields', () => {\n it('appends all new fields in one updateDataCollection call, keyed by field.id, preserving existing fields', async () => {\n const existing = makeField({ key: 'name', displayName: 'Name' });\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([existing]),\n );\n\n await actions.addFields!([\n makePatternsField({\n id: 'color',\n displayName: 'Color',\n type: 'SHORT_TEXT',\n }),\n makePatternsField({\n id: 'count',\n displayName: 'Count',\n type: 'NUMBER',\n }),\n ]);\n\n expect(updateDataCollection).toHaveBeenCalledTimes(1);\n const [dataCollection] = updateDataCollection.mock.calls[0];\n expect(dataCollection._id).toBe(COLLECTION_ID);\n // Existing field kept; new fields appended under their given ids as keys.\n expect(dataCollection.fields).toEqual([\n existing,\n {\n key: 'color',\n displayName: 'Color',\n type: collections.Type.TEXT,\n required: false,\n },\n {\n key: 'count',\n displayName: 'Count',\n type: collections.Type.NUMBER,\n required: false,\n },\n ]);\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('resolves with the full updated fields map (existing + added), keyed by field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name', displayName: 'Name' })]),\n );\n\n const fields = await actions.addFields!([\n makePatternsField({\n id: 'color',\n displayName: 'Color',\n type: 'SHORT_TEXT',\n }),\n ]);\n\n expect(Object.keys(fields)).toEqual(['name', 'color']);\n expect(fields.color).toMatchObject({ id: 'color', displayName: 'Color' });\n });\n\n it('throws before any write when a field type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'pic', type: 'IMAGE' })]),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n\n it('throws when the collection cannot be read', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () => null);\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'color' })]),\n ).rejects.toThrow(`Collection ${COLLECTION_ID} not found`);\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n });\n\n describe('editField', () => {\n it('patches only displayName when only displayName is provided', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { displayName: 'Renamed' });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n displayName: 'Renamed',\n });\n });\n\n it('maps isPii to encrypted and helpText to description', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { isPii: true, helpText: 'hint' });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n encrypted: true,\n description: 'hint',\n });\n });\n\n it('includes numberRange in the patch only when the source CMS field is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'age',\n required: true,\n numberRange: { min: 0, max: 100 },\n });\n });\n\n it('omits numberRange when the source CMS field is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n const [, patch] = patchDataCollectionField.mock.calls[0];\n expect(patch).not.toHaveProperty('numberRange');\n expect(patch).toMatchObject({ key: 'name', required: true });\n });\n\n it('includes stringLengthRange in the patch only when the source CMS field is TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n });\n });\n\n it('omits stringLengthRange when the source CMS field is not TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n const [, patch] = patchDataCollectionField.mock.calls[0];\n expect(patch).not.toHaveProperty('stringLengthRange');\n });\n });\n\n describe('renameField', () => {\n it('patches the field displayName with the new name', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.renameField!('name', 'Renamed');\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n displayName: 'Renamed',\n });\n });\n });\n\n describe('deleteField', () => {\n it('calls collections.deleteDataCollectionField with the field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'toDelete' })]),\n );\n\n await actions.deleteField!('toDelete');\n\n expect(deleteDataCollectionField).toHaveBeenCalledTimes(1);\n expect(deleteDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n fieldKey: 'toDelete',\n });\n });\n });\n\n describe('makePrimary', () => {\n it('patches the collection displayField with the given field id', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newPrimary' })]),\n );\n\n await actions.makePrimary!('newPrimary');\n\n expect(patchDataCollection).toHaveBeenCalledTimes(1);\n expect(patchDataCollection).toHaveBeenCalledWith(COLLECTION_ID, {\n displayField: 'newPrimary',\n });\n });\n });\n\n describe('duplicateField', () => {\n it('clones the source field with a \"(Copy)\" suffix and a fresh key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'Source Field (Copy)',\n type: collections.Type.TEXT,\n });\n expect(payload.field.key).not.toBe('sourceField');\n });\n\n it('strips systemField and capabilities from the cloned field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({\n systemField: true,\n capabilities: {\n sortable: true,\n queryOperators: [collections.QueryOperator.EQ],\n },\n }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field).not.toHaveProperty('systemField');\n expect(payload.field).not.toHaveProperty('capabilities');\n });\n\n it('clears typeMetadata.multiReference.referencingFieldKey on clone', async () => {\n const sourceField: collections.Field = makeField({\n key: 'multiRef',\n displayName: 'Multi Ref',\n type: collections.Type.MULTI_REFERENCE,\n typeMetadata: {\n multiReference: {\n referencingFieldKey: 'someExistingKey',\n referencedCollectionId: 'other-collection',\n },\n },\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([sourceField]),\n );\n\n await actions.duplicateField!('multiRef');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(\n payload.field.typeMetadata?.multiReference?.referencingFieldKey,\n ).toBeUndefined();\n expect(\n payload.field.typeMetadata?.multiReference?.referencedCollectionId,\n ).toBe('other-collection');\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n makeField({ key: 'sourceFieldCopy' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('sourceField');\n expect(payload.field.key).not.toBe('sourceFieldCopy');\n });\n\n it('throws when the source field is not found', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(actions.duplicateField!('missing')).rejects.toThrow(\n 'Field missing not found',\n );\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n });\n\n describe('duplicateFieldWithContent', () => {\n it('creates the cloned field, kicks off a COPY_FIELD_DATA task, and waits for completion', async () => {\n createTask.mockResolvedValue({ _id: 'task-1' });\n getTask.mockResolvedValue({ _id: 'task-1', status: 'COMPLETED' });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateFieldWithContent!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [, payload] = createDataCollectionField.mock.calls[0];\n const targetFieldKey = payload.field.key;\n\n expect(createTask).toHaveBeenCalledTimes(1);\n expect(createTask).toHaveBeenCalledWith({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: COLLECTION_ID,\n sourceFieldKey: 'sourceField',\n targetFieldKey,\n },\n });\n expect(getTask).toHaveBeenCalledWith('task-1');\n });\n\n it('throws when the copy task reports FAILED, surfacing the failure code and description', async () => {\n createTask.mockResolvedValue({ _id: 'task-2' });\n getTask.mockResolvedValue({\n _id: 'task-2',\n status: 'FAILED',\n failures: [{ code: 'INTERNAL', description: 'Copy boom' }],\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField()]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('sourceField'),\n ).rejects.toThrow('INTERNAL: Copy boom');\n });\n\n it('throws when the source field is not found and never creates a task', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('missing'),\n ).rejects.toThrow('Field missing not found');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n expect(createTask).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,sBAAA,GAAAD,OAAA;AAEAE,IAAI,CAACC,IAAI,CAAC,WAAW,EAAE,MAAM;EAC3B,MAAMC,MAAM,GAAGF,IAAI,CAACG,aAAa,CAAC,WAAW,CAAC;EAC9C,OAAO;IACL,GAAGD,MAAM;IACTE,WAAW,EAAE;MACX,GAAGF,MAAM,CAACE,WAAW;MACrBC,yBAAyB,EAAEL,IAAI,CAACM,EAAE,CAAC,CAAC;MACpCC,wBAAwB,EAAEP,IAAI,CAACM,EAAE,CAAC,CAAC;MACnCE,yBAAyB,EAAER,IAAI,CAACM,EAAE,CAAC,CAAC;MACpCG,mBAAmB,EAAET,IAAI,CAACM,EAAE,CAAC,CAAC;MAC9BI,oBAAoB,EAAEV,IAAI,CAACM,EAAE,CAAC;IAChC,CAAC;IACDK,KAAK,EAAE;MACL,GAAGT,MAAM,CAACS,KAAK;MACfC,UAAU,EAAEZ,IAAI,CAACM,EAAE,CAAC,CAAC;MACrBO,OAAO,EAAEb,IAAI,CAACM,EAAE,CAAC;IACnB;EACF,CAAC;AACH,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAMD,yBAAyB,GAC7BD,iBAAW,CAACC,yBAGX;AACH,MAAME,wBAAwB,GAC5BH,iBAAW,CAACG,wBAGX;AACH,MAAMC,yBAAyB,GAC7BJ,iBAAW,CAACI,yBAGX;AACH,MAAMC,mBAAmB,GACvBL,iBAAW,CAACK,mBAGX;AACH;AACA;AACA,MAAMC,oBAAoB,GACxBN,iBAAW,CAACM,oBAGX;AAQH,MAAME,UAAU,GAAGD,WAAK,CAACC,UAGxB;AACD,MAAMC,OAAO,GAAGF,WAAK,CAACE,OAGrB;AAED,MAAMC,aAAa,GAAG,cAAc;AAEpC,MAAMC,SAAS,GAAGA,CAChBC,SAAqC,GAAG,CAAC,CAAC,MACnB;EACvBC,GAAG,EAAE,aAAa;EAClBC,WAAW,EAAE,cAAc;EAC3BC,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACC,IAAI;EAC3BC,WAAW,EAAE,KAAK;EAClBC,SAAS,EAAE,KAAK;EAChB,GAAGP;AACL,CAAC,CAAC;AAEF,MAAMQ,cAAc,GAClBC,MAA2B,KACK;EAAEC,GAAG,EAAEZ,aAAa;EAAEW;AAAO,CAAC,CAAC;AAEjE,MAAME,iBAAiB,GAAGA,CAACX,SAAyB,GAAG,CAAC,CAAC,KAAY;EACnE,MAAMY,IAAW,GAAG;IAClBC,EAAE,EAAE,qBAAqB;IACzBX,WAAW,EAAE,WAAW;IACxBC,IAAI,EAAE;EACR,CAAC;EACD,OAAO;IAAE,GAAGS,IAAI;IAAE,GAAGZ;EAAU,CAAC;AAClC,CAAC;AAEDc,QAAQ,CAAC,uBAAuB,EAAE,MAAM;EACtCC,UAAU,CAAC,MAAM;IACf/B,IAAI,CAACgC,aAAa,CAAC,CAAC;IACpB3B,yBAAyB,CAAC4B,iBAAiB,CAAC;MAC1CC,cAAc,EAAEV,cAAc,CAAC,EAAE;IACnC,CAAC,CAAC;IACFhB,yBAAyB,CAACyB,iBAAiB,CAAC;MAC1CC,cAAc,EAAEV,cAAc,CAAC,EAAE;IACnC,CAAC,CAAC;IACFf,mBAAmB,CAACwB,iBAAiB,CAAC;MACpCC,cAAc,EAAEV,cAAc,CAAC,EAAE;IACnC,CAAC,CAAC;IACFjB,wBAAwB,CAAC0B,iBAAiB,CAAC;MACzCC,cAAc,EAAEV,cAAc,CAAC,EAAE;IACnC,CAAC,CAAC;IACFd,oBAAoB,CAACyB,kBAAkB,CACrC,MAAOD,cAAc,IAAKA,cAC5B,CAAC;EACH,CAAC,CAAC;EAEFJ,QAAQ,CAAC,UAAU,EAAE,MAAM;IACzBM,EAAE,CAAC,mFAAmF,EAAE,YAAY;MAClG,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMa,OAAO,CAACE,QAAQ,CACpBZ,iBAAiB,CAAC;QAAET,WAAW,EAAE;MAAe,CAAC,CACnD,CAAC;MAED,MAAM,CAACsB,kBAAkB,EAAEC,OAAO,CAAC,GACjCpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MACzCC,MAAM,CAACH,kBAAkB,CAAC,CAACI,IAAI,CAAC9B,aAAa,CAAC;MAC9C6B,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC,CAACC,aAAa,CAAC;QAClC5B,WAAW,EAAE,cAAc;QAC3BC,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACC,IAAI;QAC3B0B,QAAQ,EAAE;MACZ,CAAC,CAAC;MACFJ,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC5B,GAAG,CAAC,CAAC+B,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;IAEFZ,EAAE,CAAC,iFAAiF,EAAE,YAAY;MAChG,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC;QAAEE,GAAG,EAAE;MAAW,CAAC,CAAC,CAAC,CACjD,CAAC;MAED,MAAMoB,OAAO,CAACE,QAAQ,CAAEZ,iBAAiB,CAAC;QAAET,WAAW,EAAE;MAAY,CAAC,CAAC,CAAC;MAExE,MAAM,GAAGuB,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC5B,GAAG,CAAC,CAACgC,GAAG,CAACL,IAAI,CAAC,UAAU,CAAC;IAChD,CAAC,CAAC;IAEFR,EAAE,CAAC,iEAAiE,EAAE,YAAY;MAChF,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMa,OAAO,CAACE,QAAQ,CACpBZ,iBAAiB,CAAC;QAAEuB,KAAK,EAAE,IAAI;QAAEC,QAAQ,EAAE;MAAY,CAAC,CAC1D,CAAC;MAED,MAAM,GAAGV,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAACtB,SAAS,CAAC,CAACqB,IAAI,CAAC,IAAI,CAAC;MAC1CD,MAAM,CAACF,OAAO,CAACI,KAAK,CAACO,WAAW,CAAC,CAACR,IAAI,CAAC,WAAW,CAAC;IACrD,CAAC,CAAC;IAEFR,EAAE,CAAC,uDAAuD,EAAE,YAAY;MACtE,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMa,OAAO,CAACE,QAAQ,CACpBZ,iBAAiB,CAAC;QAChBR,IAAI,EAAE,QAAQ;QACdkC,UAAU,EAAE;UAAEN,QAAQ,EAAE,KAAK;UAAEO,WAAW,EAAE;YAAEC,GAAG,EAAE,CAAC;YAAEC,GAAG,EAAE;UAAG;QAAE;MAClE,CAAC,CACH,CAAC;MAED,MAAM,GAAGf,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC1B,IAAI,CAAC,CAACyB,IAAI,CAACxC,iBAAW,CAACgB,IAAI,CAACqC,MAAM,CAAC;MACxDd,MAAM,CAACF,OAAO,CAACI,KAAK,CAACS,WAAW,CAAC,CAACI,OAAO,CAAC;QAAEH,GAAG,EAAE,CAAC;QAAEC,GAAG,EAAE;MAAG,CAAC,CAAC;IAChE,CAAC,CAAC;IAEFpB,EAAE,CAAC,uDAAuD,EAAE,YAAY;MACtE,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMa,OAAO,CAACE,QAAQ,CACpBZ,iBAAiB,CAAC;QAChBR,IAAI,EAAE,YAAY;QAClBkC,UAAU,EAAE;UAAEN,QAAQ,EAAE,KAAK;UAAEO,WAAW,EAAE;YAAEC,GAAG,EAAE,CAAC;YAAEC,GAAG,EAAE;UAAG;QAAE;MAClE,CAAC,CACH,CAAC;MAED,MAAM,GAAGf,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAACS,WAAW,CAAC,CAACK,aAAa,CAAC,CAAC;IACnD,CAAC,CAAC;IAEFvB,EAAE,CAAC,iEAAiE,EAAE,YAAY;MAChF,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMa,OAAO,CAACE,QAAQ,CACpBZ,iBAAiB,CAAC;QAChBR,IAAI,EAAE,YAAY;QAClBkC,UAAU,EAAE;UACVN,QAAQ,EAAE,KAAK;UACfa,iBAAiB,EAAE;YAAEC,SAAS,EAAE,CAAC;YAAEC,SAAS,EAAE;UAAG;QACnD;MACF,CAAC,CACH,CAAC;MAED,MAAM,GAAGrB,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAACe,iBAAiB,CAAC,CAACF,OAAO,CAAC;QAC9CG,SAAS,EAAE,CAAC;QACZC,SAAS,EAAE;MACb,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF1B,EAAE,CAAC,kDAAkD,EAAE,YAAY;MACjE,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMmB,MAAM,CACVN,OAAO,CAACE,QAAQ,CAAEZ,iBAAiB,CAAC;QAAER,IAAI,EAAE;MAAQ,CAAC,CAAC,CACxD,CAAC,CAAC4C,OAAO,CAACC,OAAO,CAAC,oCAAoC,CAAC;MACvDrB,MAAM,CAACtC,yBAAyB,CAAC,CAAC4C,GAAG,CAACgB,gBAAgB,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEF7B,EAAE,CAAC,wCAAwC,EAAE,YAAY;MACvD,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMa,OAAO,CAACE,QAAQ,CACpBZ,iBAAiB,CAAC;QAAE0B,UAAU,EAAE;UAAEN,QAAQ,EAAE;QAAK;MAAE,CAAC,CACtD,CAAC;MAED,MAAM,GAAGN,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAACE,QAAQ,CAAC,CAACH,IAAI,CAAC,IAAI,CAAC;IAC3C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFd,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC1BM,EAAE,CAAC,wGAAwG,EAAE,YAAY;MACvH,MAAM8B,QAAQ,GAAGnD,SAAS,CAAC;QAAEE,GAAG,EAAE,MAAM;QAAEC,WAAW,EAAE;MAAO,CAAC,CAAC;MAChE,MAAMmB,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAAC0C,QAAQ,CAAC,CAC3B,CAAC;MAED,MAAM7B,OAAO,CAAC8B,SAAS,CAAE,CACvBxC,iBAAiB,CAAC;QAChBE,EAAE,EAAE,OAAO;QACXX,WAAW,EAAE,OAAO;QACpBC,IAAI,EAAE;MACR,CAAC,CAAC,EACFQ,iBAAiB,CAAC;QAChBE,EAAE,EAAE,OAAO;QACXX,WAAW,EAAE,OAAO;QACpBC,IAAI,EAAE;MACR,CAAC,CAAC,CACH,CAAC;MAEFwB,MAAM,CAACjC,oBAAoB,CAAC,CAAC0D,qBAAqB,CAAC,CAAC,CAAC;MACrD,MAAM,CAAClC,cAAc,CAAC,GAAGxB,oBAAoB,CAACT,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACT,cAAc,CAACR,GAAG,CAAC,CAACkB,IAAI,CAAC9B,aAAa,CAAC;MAC9C;MACA6B,MAAM,CAACT,cAAc,CAACT,MAAM,CAAC,CAACiC,OAAO,CAAC,CACpCQ,QAAQ,EACR;QACEjD,GAAG,EAAE,OAAO;QACZC,WAAW,EAAE,OAAO;QACpBC,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACC,IAAI;QAC3B0B,QAAQ,EAAE;MACZ,CAAC,EACD;QACE9B,GAAG,EAAE,OAAO;QACZC,WAAW,EAAE,OAAO;QACpBC,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACqC,MAAM;QAC7BV,QAAQ,EAAE;MACZ,CAAC,CACF,CAAC;MACFJ,MAAM,CAACtC,yBAAyB,CAAC,CAAC4C,GAAG,CAACgB,gBAAgB,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEF7B,EAAE,CAAC,kFAAkF,EAAE,YAAY;MACjG,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC;QAAEE,GAAG,EAAE,MAAM;QAAEC,WAAW,EAAE;MAAO,CAAC,CAAC,CAAC,CAClE,CAAC;MAED,MAAMO,MAAM,GAAG,MAAMY,OAAO,CAAC8B,SAAS,CAAE,CACtCxC,iBAAiB,CAAC;QAChBE,EAAE,EAAE,OAAO;QACXX,WAAW,EAAE,OAAO;QACpBC,IAAI,EAAE;MACR,CAAC,CAAC,CACH,CAAC;MAEFwB,MAAM,CAAC0B,MAAM,CAACC,IAAI,CAAC7C,MAAM,CAAC,CAAC,CAACiC,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;MACtDf,MAAM,CAAClB,MAAM,CAAC8C,KAAK,CAAC,CAACzB,aAAa,CAAC;QAAEjB,EAAE,EAAE,OAAO;QAAEX,WAAW,EAAE;MAAQ,CAAC,CAAC;IAC3E,CAAC,CAAC;IAEFkB,EAAE,CAAC,8DAA8D,EAAE,YAAY;MAC7E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMmB,MAAM,CACVN,OAAO,CAAC8B,SAAS,CAAE,CAACxC,iBAAiB,CAAC;QAAEE,EAAE,EAAE,KAAK;QAAEV,IAAI,EAAE;MAAQ,CAAC,CAAC,CAAC,CACtE,CAAC,CAAC4C,OAAO,CAACC,OAAO,CAAC,oCAAoC,CAAC;MACvDrB,MAAM,CAACjC,oBAAoB,CAAC,CAACuC,GAAG,CAACgB,gBAAgB,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF7B,EAAE,CAAC,2CAA2C,EAAE,YAAY;MAC1D,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MAAM,IAAI,CAAC;MAEhE,MAAM6B,MAAM,CACVN,OAAO,CAAC8B,SAAS,CAAE,CAACxC,iBAAiB,CAAC;QAAEE,EAAE,EAAE;MAAQ,CAAC,CAAC,CAAC,CACzD,CAAC,CAACkC,OAAO,CAACC,OAAO,CAAC,cAAclD,aAAa,YAAY,CAAC;MAC1D6B,MAAM,CAACjC,oBAAoB,CAAC,CAACuC,GAAG,CAACgB,gBAAgB,CAAC,CAAC;IACrD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC1BM,EAAE,CAAC,4DAA4D,EAAE,YAAY;MAC3E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC;QAAEE,GAAG,EAAE;MAAO,CAAC,CAAC,CAAC,CAC7C,CAAC;MAED,MAAMoB,OAAO,CAACmC,SAAS,CAAE,MAAM,EAAE;QAAEtD,WAAW,EAAE;MAAU,CAAC,CAAC;MAE5DyB,MAAM,CAACpC,wBAAwB,CAAC,CAACkE,oBAAoB,CAAC3D,aAAa,EAAE;QACnEG,GAAG,EAAE,MAAM;QACXC,WAAW,EAAE;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFkB,EAAE,CAAC,qDAAqD,EAAE,YAAY;MACpE,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC;QAAEE,GAAG,EAAE;MAAO,CAAC,CAAC,CAAC,CAC7C,CAAC;MAED,MAAMoB,OAAO,CAACmC,SAAS,CAAE,MAAM,EAAE;QAAEtB,KAAK,EAAE,IAAI;QAAEC,QAAQ,EAAE;MAAO,CAAC,CAAC;MAEnER,MAAM,CAACpC,wBAAwB,CAAC,CAACkE,oBAAoB,CAAC3D,aAAa,EAAE;QACnEG,GAAG,EAAE,MAAM;QACXM,SAAS,EAAE,IAAI;QACf6B,WAAW,EAAE;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFhB,EAAE,CAAC,4EAA4E,EAAE,YAAY;MAC3F,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QAAEE,GAAG,EAAE,KAAK;QAAEE,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACqC;MAAO,CAAC,CAAC,CACzD,CACH,CAAC;MAED,MAAMpB,OAAO,CAACmC,SAAS,CAAE,KAAK,EAAE;QAC9BnB,UAAU,EAAE;UAAEN,QAAQ,EAAE,IAAI;UAAEO,WAAW,EAAE;YAAEC,GAAG,EAAE,CAAC;YAAEC,GAAG,EAAE;UAAI;QAAE;MAClE,CAAC,CAAC;MAEFb,MAAM,CAACpC,wBAAwB,CAAC,CAACkE,oBAAoB,CAAC3D,aAAa,EAAE;QACnEG,GAAG,EAAE,KAAK;QACV8B,QAAQ,EAAE,IAAI;QACdO,WAAW,EAAE;UAAEC,GAAG,EAAE,CAAC;UAAEC,GAAG,EAAE;QAAI;MAClC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFpB,EAAE,CAAC,2DAA2D,EAAE,YAAY;MAC1E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QAAEE,GAAG,EAAE,MAAM;QAAEE,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACC;MAAK,CAAC,CAAC,CACxD,CACH,CAAC;MAED,MAAMgB,OAAO,CAACmC,SAAS,CAAE,MAAM,EAAE;QAC/BnB,UAAU,EAAE;UAAEN,QAAQ,EAAE,IAAI;UAAEO,WAAW,EAAE;YAAEC,GAAG,EAAE,CAAC;YAAEC,GAAG,EAAE;UAAI;QAAE;MAClE,CAAC,CAAC;MAEF,MAAM,GAAGkB,KAAK,CAAC,GAAGnE,wBAAwB,CAACN,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MACxDC,MAAM,CAAC+B,KAAK,CAAC,CAACzB,GAAG,CAAC0B,cAAc,CAAC,aAAa,CAAC;MAC/ChC,MAAM,CAAC+B,KAAK,CAAC,CAAC5B,aAAa,CAAC;QAAE7B,GAAG,EAAE,MAAM;QAAE8B,QAAQ,EAAE;MAAK,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEFX,EAAE,CAAC,gFAAgF,EAAE,YAAY;MAC/F,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QAAEE,GAAG,EAAE,MAAM;QAAEE,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACC;MAAK,CAAC,CAAC,CACxD,CACH,CAAC;MAED,MAAMgB,OAAO,CAACmC,SAAS,CAAE,MAAM,EAAE;QAC/BnB,UAAU,EAAE;UACVN,QAAQ,EAAE,KAAK;UACfa,iBAAiB,EAAE;YAAEC,SAAS,EAAE,CAAC;YAAEC,SAAS,EAAE;UAAG;QACnD;MACF,CAAC,CAAC;MAEFnB,MAAM,CAACpC,wBAAwB,CAAC,CAACkE,oBAAoB,CAAC3D,aAAa,EAAE;QACnEG,GAAG,EAAE,MAAM;QACX8B,QAAQ,EAAE,KAAK;QACfa,iBAAiB,EAAE;UAAEC,SAAS,EAAE,CAAC;UAAEC,SAAS,EAAE;QAAG;MACnD,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF1B,EAAE,CAAC,+DAA+D,EAAE,YAAY;MAC9E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QAAEE,GAAG,EAAE,KAAK;QAAEE,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACqC;MAAO,CAAC,CAAC,CACzD,CACH,CAAC;MAED,MAAMpB,OAAO,CAACmC,SAAS,CAAE,KAAK,EAAE;QAC9BnB,UAAU,EAAE;UACVN,QAAQ,EAAE,KAAK;UACfa,iBAAiB,EAAE;YAAEC,SAAS,EAAE,CAAC;YAAEC,SAAS,EAAE;UAAG;QACnD;MACF,CAAC,CAAC;MAEF,MAAM,GAAGY,KAAK,CAAC,GAAGnE,wBAAwB,CAACN,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MACxDC,MAAM,CAAC+B,KAAK,CAAC,CAACzB,GAAG,CAAC0B,cAAc,CAAC,mBAAmB,CAAC;IACvD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF7C,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC5BM,EAAE,CAAC,iDAAiD,EAAE,YAAY;MAChE,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC;QAAEE,GAAG,EAAE;MAAO,CAAC,CAAC,CAAC,CAC7C,CAAC;MAED,MAAMoB,OAAO,CAACuC,WAAW,CAAE,MAAM,EAAE,SAAS,CAAC;MAE7CjC,MAAM,CAACpC,wBAAwB,CAAC,CAACkE,oBAAoB,CAAC3D,aAAa,EAAE;QACnEG,GAAG,EAAE,MAAM;QACXC,WAAW,EAAE;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFY,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC5BM,EAAE,CAAC,gEAAgE,EAAE,YAAY;MAC/E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC;QAAEE,GAAG,EAAE;MAAW,CAAC,CAAC,CAAC,CACjD,CAAC;MAED,MAAMoB,OAAO,CAACwC,WAAW,CAAE,UAAU,CAAC;MAEtClC,MAAM,CAACnC,yBAAyB,CAAC,CAAC4D,qBAAqB,CAAC,CAAC,CAAC;MAC1DzB,MAAM,CAACnC,yBAAyB,CAAC,CAACiE,oBAAoB,CAAC3D,aAAa,EAAE;QACpEgE,QAAQ,EAAE;MACZ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFhD,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC5BM,EAAE,CAAC,6DAA6D,EAAE,YAAY;MAC5E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC;QAAEE,GAAG,EAAE;MAAa,CAAC,CAAC,CAAC,CACnD,CAAC;MAED,MAAMoB,OAAO,CAAC0C,WAAW,CAAE,YAAY,CAAC;MAExCpC,MAAM,CAAClC,mBAAmB,CAAC,CAAC2D,qBAAqB,CAAC,CAAC,CAAC;MACpDzB,MAAM,CAAClC,mBAAmB,CAAC,CAACgE,oBAAoB,CAAC3D,aAAa,EAAE;QAC9DkE,YAAY,EAAE;MAChB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFlD,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IAC/BM,EAAE,CAAC,gEAAgE,EAAE,YAAY;MAC/E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QAAEE,GAAG,EAAE,aAAa;QAAEC,WAAW,EAAE;MAAe,CAAC,CAAC,CAC/D,CACH,CAAC;MAED,MAAMmB,OAAO,CAAC4C,cAAc,CAAE,aAAa,CAAC;MAE5CtC,MAAM,CAACtC,yBAAyB,CAAC,CAAC+D,qBAAqB,CAAC,CAAC,CAAC;MAC1D,MAAM,CAAC5B,kBAAkB,EAAEC,OAAO,CAAC,GACjCpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MACzCC,MAAM,CAACH,kBAAkB,CAAC,CAACI,IAAI,CAAC9B,aAAa,CAAC;MAC9C6B,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC,CAACC,aAAa,CAAC;QAClC5B,WAAW,EAAE,qBAAqB;QAClCC,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACC;MACzB,CAAC,CAAC;MACFsB,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC5B,GAAG,CAAC,CAACgC,GAAG,CAACL,IAAI,CAAC,aAAa,CAAC;IACnD,CAAC,CAAC;IAEFR,EAAE,CAAC,2DAA2D,EAAE,YAAY;MAC1E,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QACRO,WAAW,EAAE,IAAI;QACjB4D,YAAY,EAAE;UACZC,QAAQ,EAAE,IAAI;UACdC,cAAc,EAAE,CAAChF,iBAAW,CAACiF,aAAa,CAACC,EAAE;QAC/C;MACF,CAAC,CAAC,CACH,CACH,CAAC;MAED,MAAMjD,OAAO,CAAC4C,cAAc,CAAE,aAAa,CAAC;MAE5C,MAAM,GAAGxC,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC,CAACI,GAAG,CAAC0B,cAAc,CAAC,aAAa,CAAC;MACvDhC,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC,CAACI,GAAG,CAAC0B,cAAc,CAAC,cAAc,CAAC;IAC1D,CAAC,CAAC;IAEFvC,EAAE,CAAC,iEAAiE,EAAE,YAAY;MAAA,IAAAmD,qBAAA,EAAAC,sBAAA;MAChF,MAAMC,WAA8B,GAAG1E,SAAS,CAAC;QAC/CE,GAAG,EAAE,UAAU;QACfC,WAAW,EAAE,WAAW;QACxBC,IAAI,EAAEf,iBAAW,CAACgB,IAAI,CAACsE,eAAe;QACtCC,YAAY,EAAE;UACZC,cAAc,EAAE;YACdC,mBAAmB,EAAE,iBAAiB;YACtCC,sBAAsB,EAAE;UAC1B;QACF;MACF,CAAC,CAAC;MAEF,MAAMzD,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACiE,WAAW,CAAC,CAC9B,CAAC;MAED,MAAMpD,OAAO,CAAC4C,cAAc,CAAE,UAAU,CAAC;MAEzC,MAAM,GAAGxC,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,EAAA4C,qBAAA,GACJ9C,OAAO,CAACI,KAAK,CAAC8C,YAAY,cAAAJ,qBAAA,GAA1BA,qBAAA,CAA4BK,cAAc,qBAA1CL,qBAAA,CAA4CM,mBAC9C,CAAC,CAAClC,aAAa,CAAC,CAAC;MACjBhB,MAAM,EAAA6C,sBAAA,GACJ/C,OAAO,CAACI,KAAK,CAAC8C,YAAY,cAAAH,sBAAA,GAA1BA,sBAAA,CAA4BI,cAAc,qBAA1CJ,sBAAA,CAA4CM,sBAC9C,CAAC,CAAClD,IAAI,CAAC,kBAAkB,CAAC;IAC5B,CAAC,CAAC;IAEFR,EAAE,CAAC,iFAAiF,EAAE,YAAY;MAChG,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QAAEE,GAAG,EAAE,aAAa;QAAEC,WAAW,EAAE;MAAe,CAAC,CAAC,EAC9DH,SAAS,CAAC;QAAEE,GAAG,EAAE;MAAkB,CAAC,CAAC,CACtC,CACH,CAAC;MAED,MAAMoB,OAAO,CAAC4C,cAAc,CAAE,aAAa,CAAC;MAE5C,MAAM,GAAGxC,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3DC,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC5B,GAAG,CAAC,CAACgC,GAAG,CAACL,IAAI,CAAC,aAAa,CAAC;MACjDD,MAAM,CAACF,OAAO,CAACI,KAAK,CAAC5B,GAAG,CAAC,CAACgC,GAAG,CAACL,IAAI,CAAC,iBAAiB,CAAC;IACvD,CAAC,CAAC;IAEFR,EAAE,CAAC,2CAA2C,EAAE,YAAY;MAC1D,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMmB,MAAM,CAACN,OAAO,CAAC4C,cAAc,CAAE,SAAS,CAAC,CAAC,CAAClB,OAAO,CAACC,OAAO,CAC9D,yBACF,CAAC;MACDrB,MAAM,CAACtC,yBAAyB,CAAC,CAAC4C,GAAG,CAACgB,gBAAgB,CAAC,CAAC;IAC1D,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnC,QAAQ,CAAC,2BAA2B,EAAE,MAAM;IAC1CM,EAAE,CAAC,sFAAsF,EAAE,YAAY;MACrGxB,UAAU,CAACqB,iBAAiB,CAAC;QAAEP,GAAG,EAAE;MAAS,CAAC,CAAC;MAC/Cb,OAAO,CAACoB,iBAAiB,CAAC;QAAEP,GAAG,EAAE,QAAQ;QAAEqE,MAAM,EAAE;MAAY,CAAC,CAAC;MAEjE,MAAM1D,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CACbT,SAAS,CAAC;QAAEE,GAAG,EAAE,aAAa;QAAEC,WAAW,EAAE;MAAe,CAAC,CAAC,CAC/D,CACH,CAAC;MAED,MAAMmB,OAAO,CAAC2D,yBAAyB,CAAE,aAAa,CAAC;MAEvDrD,MAAM,CAACtC,yBAAyB,CAAC,CAAC+D,qBAAqB,CAAC,CAAC,CAAC;MAC1D,MAAM,GAAG3B,OAAO,CAAC,GAAGpC,yBAAyB,CAACJ,IAAI,CAACyC,KAAK,CAAC,CAAC,CAAC;MAC3D,MAAMuD,cAAc,GAAGxD,OAAO,CAACI,KAAK,CAAC5B,GAAG;MAExC0B,MAAM,CAAC/B,UAAU,CAAC,CAACwD,qBAAqB,CAAC,CAAC,CAAC;MAC3CzB,MAAM,CAAC/B,UAAU,CAAC,CAAC6D,oBAAoB,CAAC;QACtCtD,IAAI,EAAE,iBAAiB;QACvB+E,oBAAoB,EAAE;UACpBC,gBAAgB,EAAErF,aAAa;UAC/BsF,cAAc,EAAE,aAAa;UAC7BH;QACF;MACF,CAAC,CAAC;MACFtD,MAAM,CAAC9B,OAAO,CAAC,CAAC4D,oBAAoB,CAAC,QAAQ,CAAC;IAChD,CAAC,CAAC;IAEFrC,EAAE,CAAC,sFAAsF,EAAE,YAAY;MACrGxB,UAAU,CAACqB,iBAAiB,CAAC;QAAEP,GAAG,EAAE;MAAS,CAAC,CAAC;MAC/Cb,OAAO,CAACoB,iBAAiB,CAAC;QACxBP,GAAG,EAAE,QAAQ;QACbqE,MAAM,EAAE,QAAQ;QAChBM,QAAQ,EAAE,CAAC;UAAEC,IAAI,EAAE,UAAU;UAAElD,WAAW,EAAE;QAAY,CAAC;MAC3D,CAAC,CAAC;MAEF,MAAMf,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,CAACT,SAAS,CAAC,CAAC,CAAC,CAC9B,CAAC;MAED,MAAM4B,MAAM,CACVN,OAAO,CAAC2D,yBAAyB,CAAE,aAAa,CAClD,CAAC,CAACjC,OAAO,CAACC,OAAO,CAAC,qBAAqB,CAAC;IAC1C,CAAC,CAAC;IAEF5B,EAAE,CAAC,oEAAoE,EAAE,YAAY;MACnF,MAAMC,OAAO,GAAG,IAAAC,4CAAqB,EAACxB,aAAa,EAAE,MACnDU,cAAc,CAAC,EAAE,CACnB,CAAC;MAED,MAAMmB,MAAM,CACVN,OAAO,CAAC2D,yBAAyB,CAAE,SAAS,CAC9C,CAAC,CAACjC,OAAO,CAACC,OAAO,CAAC,yBAAyB,CAAC;MAC5CrB,MAAM,CAACtC,yBAAyB,CAAC,CAAC4C,GAAG,CAACgB,gBAAgB,CAAC,CAAC;MACxDtB,MAAM,CAAC/B,UAAU,CAAC,CAACqC,GAAG,CAACgB,gBAAgB,CAAC,CAAC;IAC3C,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_data","require","_createCmsFieldActions","jest","mock","actual","requireActual","collections","createDataCollectionField","fn","patchDataCollectionField","updateDataCollectionField","deleteDataCollectionField","patchDataCollection","updateDataCollection","tasks","createTask","getTask","COLLECTION_ID","makeField","overrides","key","displayName","type","Type","TEXT","systemField","encrypted","makeCollection","fields","_id","makePatternsField","base","id","describe","beforeEach","clearAllMocks","mockResolvedValue","dataCollection","mockImplementation","it","actions","createCmsFieldActions","addField","calledCollectionId","payload","calls","expect","toBe","field","toMatchObject","required","toBeTruthy","not","isPii","helpText","description","validation","numberRange","min","max","NUMBER","toEqual","toBeUndefined","stringLengthRange","minLength","maxLength","rejects","toThrow","toHaveBeenCalled","existing","addFields","toHaveBeenCalledTimes","Object","keys","color","editField","toHaveBeenCalledWith","toHaveProperty","renameField","deleteField","fieldKey","makePrimary","displayField","duplicateField","capabilities","sortable","queryOperators","QueryOperator","EQ","_payload$field$typeMe","_payload$field$typeMe2","sourceField","MULTI_REFERENCE","typeMetadata","multiReference","referencingFieldKey","referencedCollectionId","status","duplicateFieldWithContent","targetFieldKey","copyFieldDataOptions","dataCollectionId","sourceFieldKey","failures","code"],"sources":["../../../../src/adapter/__tests__/cmsFieldActions.spec.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field } from '@wix/patterns';\nimport { createCmsFieldActions } from '../createCmsFieldActions';\n\njest.mock('@wix/data', () => {\n const actual = jest.requireActual('@wix/data');\n return {\n ...actual,\n collections: {\n ...actual.collections,\n createDataCollectionField: jest.fn(),\n patchDataCollectionField: jest.fn(),\n updateDataCollectionField: jest.fn(),\n deleteDataCollectionField: jest.fn(),\n patchDataCollection: jest.fn(),\n updateDataCollection: jest.fn(),\n },\n tasks: {\n ...actual.tasks,\n createTask: jest.fn(),\n getTask: jest.fn(),\n },\n };\n});\n\n// Typed accessors — the @wix/data SDK exposes overloaded callable types\n// (MaybeContext<...>), and jest.Mocked<typeof collections> resolves to the\n// HttpClient-form overload, which makes mockResolvedValue/mock.calls unusable.\n// Re-typing each mock with the call shape the adapter uses unblocks both.\nconst createDataCollectionField =\n collections.createDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { field: collections.Field }]\n >;\nconst patchDataCollectionField =\n collections.patchDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, field: collections.Field]\n >;\nconst updateDataCollectionField =\n collections.updateDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { field: collections.Field }]\n >;\nconst deleteDataCollectionField =\n collections.deleteDataCollectionField as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, options: { fieldKey: string }]\n >;\nconst patchDataCollection =\n collections.patchDataCollection as unknown as jest.Mock<\n Promise<{ dataCollection: collections.DataCollection }>,\n [collectionId: string, dataCollection: collections.PatchDataCollection]\n >;\n// updateDataCollection resolves with the updated collection directly (not\n// wrapped in `{ dataCollection }`, unlike the field mutations).\nconst updateDataCollection =\n collections.updateDataCollection as unknown as jest.Mock<\n Promise<collections.DataCollection>,\n [dataCollection: collections.DataCollection]\n >;\n\ninterface CopyTaskState {\n _id: string;\n status: 'NEW' | 'RUNNING' | 'COMPLETED' | 'FAILED';\n failures?: { code?: string; description?: string }[];\n}\n\nconst createTask = tasks.createTask as unknown as jest.Mock<\n Promise<{ _id: string }>,\n [task: { type: string; copyFieldDataOptions: unknown }]\n>;\nconst getTask = tasks.getTask as unknown as jest.Mock<\n Promise<CopyTaskState>,\n [taskId: string]\n>;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst makeField = (\n overrides: Partial<collections.Field> = {},\n): collections.Field => ({\n key: 'sourceField',\n displayName: 'Source Field',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n ...overrides,\n});\n\nconst makeCollection = (\n fields: collections.Field[],\n): collections.DataCollection => ({ _id: COLLECTION_ID, fields });\n\nconst makePatternsField = (overrides: Partial<Field> = {}): Field => {\n const base: Field = {\n id: 'ignored-by-addField',\n displayName: 'New Field',\n type: 'SHORT_TEXT',\n };\n return { ...base, ...overrides } as Field;\n};\n\ndescribe('createCmsFieldActions', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n createDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n deleteDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollection.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n patchDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n updateDataCollectionField.mockResolvedValue({\n dataCollection: makeCollection([]),\n });\n updateDataCollection.mockImplementation(\n async (dataCollection) => dataCollection,\n );\n });\n\n describe('addField', () => {\n it('maps the patterns field type to the CMS type and derives the key from displayName', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ displayName: 'My New Field' }),\n );\n\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'My New Field',\n type: collections.Type.TEXT,\n required: false,\n });\n expect(payload.field.key).toBeTruthy();\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newField' })]),\n );\n\n await actions.addField!(makePatternsField({ displayName: 'New Field' }));\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('newField');\n });\n\n it('sets encrypted when isPii is true and description from helpText', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ isPii: true, helpText: 'Some hint' }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.encrypted).toBe(true);\n expect(payload.field.description).toBe('Some hint');\n });\n\n it('passes numberRange only when the field type is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'NUMBER',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.type).toBe(collections.Type.NUMBER);\n expect(payload.field.numberRange).toEqual({ min: 0, max: 10 });\n });\n\n it('ignores numberRange when the field type is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: { required: false, numberRange: { min: 0, max: 10 } },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.numberRange).toBeUndefined();\n });\n\n it('passes stringLengthRange only when the field type is SHORT_TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({\n type: 'SHORT_TEXT',\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 50 },\n },\n }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.stringLengthRange).toEqual({\n minLength: 1,\n maxLength: 50,\n });\n });\n\n it('throws when the patterns type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addField!(makePatternsField({ type: 'IMAGE' })),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('uses validation.required when provided', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await actions.addField!(\n makePatternsField({ validation: { required: true } }),\n );\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.required).toBe(true);\n });\n });\n\n describe('addFields', () => {\n it('appends all new fields in one updateDataCollection call, keyed by field.id, preserving existing fields', async () => {\n const existing = makeField({ key: 'name', displayName: 'Name' });\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([existing]),\n );\n\n await actions.addFields!([\n makePatternsField({\n id: 'color',\n displayName: 'Color',\n type: 'SHORT_TEXT',\n }),\n makePatternsField({\n id: 'count',\n displayName: 'Count',\n type: 'NUMBER',\n }),\n ]);\n\n expect(updateDataCollection).toHaveBeenCalledTimes(1);\n const [dataCollection] = updateDataCollection.mock.calls[0];\n expect(dataCollection._id).toBe(COLLECTION_ID);\n // Existing field kept; new fields appended under their given ids as keys.\n expect(dataCollection.fields).toEqual([\n existing,\n {\n key: 'color',\n displayName: 'Color',\n type: collections.Type.TEXT,\n required: false,\n },\n {\n key: 'count',\n displayName: 'Count',\n type: collections.Type.NUMBER,\n required: false,\n },\n ]);\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n\n it('resolves with the full updated fields map (existing + added), keyed by field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name', displayName: 'Name' })]),\n );\n\n const fields = await actions.addFields!([\n makePatternsField({\n id: 'color',\n displayName: 'Color',\n type: 'SHORT_TEXT',\n }),\n ]);\n\n expect(Object.keys(fields)).toEqual(['name', 'color']);\n expect(fields.color).toMatchObject({ id: 'color', displayName: 'Color' });\n });\n\n it('throws before any write when a field type has no CMS mapping', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'pic', type: 'IMAGE' })]),\n ).rejects.toThrow('Field type IMAGE not supported yet');\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n\n it('throws when the collection cannot be read', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () => null);\n\n await expect(\n actions.addFields!([makePatternsField({ id: 'color' })]),\n ).rejects.toThrow(`Collection ${COLLECTION_ID} not found`);\n expect(updateDataCollection).not.toHaveBeenCalled();\n });\n });\n\n // editField sends the whole field definition through updateDataCollectionField,\n // not a patch: patchDataCollectionField rejects `required` and the range props.\n // Every assertion here is on the merged result — the existing field minus its\n // read-only props, with the update applied on top.\n describe('editField', () => {\n it('changes displayName and keeps the rest of the field definition', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { displayName: 'Renamed' });\n\n expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n field: {\n key: 'name',\n displayName: 'Renamed',\n type: collections.Type.TEXT,\n encrypted: false,\n },\n });\n });\n\n it('maps isPii to encrypted and helpText to description', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.editField!('name', { isPii: true, helpText: 'hint' });\n\n expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n field: {\n key: 'name',\n displayName: 'Source Field',\n type: collections.Type.TEXT,\n encrypted: true,\n description: 'hint',\n },\n });\n });\n\n it('includes numberRange only when the source CMS field is NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n field: {\n key: 'age',\n displayName: 'Source Field',\n type: collections.Type.NUMBER,\n encrypted: false,\n required: true,\n numberRange: { min: 0, max: 100 },\n },\n });\n });\n\n it('omits numberRange when the source CMS field is not NUMBER', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: { required: true, numberRange: { min: 0, max: 100 } },\n });\n\n const [, { field }] = updateDataCollectionField.mock.calls[0];\n expect(field).not.toHaveProperty('numberRange');\n expect(field).toMatchObject({ key: 'name', required: true });\n });\n\n it('includes stringLengthRange only when the source CMS field is TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'name', type: collections.Type.TEXT }),\n ]),\n );\n\n await actions.editField!('name', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n expect(updateDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n field: {\n key: 'name',\n displayName: 'Source Field',\n type: collections.Type.TEXT,\n encrypted: false,\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n });\n\n it('omits stringLengthRange when the source CMS field is not TEXT', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'age', type: collections.Type.NUMBER }),\n ]),\n );\n\n await actions.editField!('age', {\n validation: {\n required: false,\n stringLengthRange: { minLength: 1, maxLength: 30 },\n },\n });\n\n const [, { field }] = updateDataCollectionField.mock.calls[0];\n expect(field).not.toHaveProperty('stringLengthRange');\n });\n });\n\n describe('renameField', () => {\n it('patches the field displayName with the new name', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'name' })]),\n );\n\n await actions.renameField!('name', 'Renamed');\n\n expect(patchDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n key: 'name',\n displayName: 'Renamed',\n });\n });\n });\n\n describe('deleteField', () => {\n it('calls collections.deleteDataCollectionField with the field key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'toDelete' })]),\n );\n\n await actions.deleteField!('toDelete');\n\n expect(deleteDataCollectionField).toHaveBeenCalledTimes(1);\n expect(deleteDataCollectionField).toHaveBeenCalledWith(COLLECTION_ID, {\n fieldKey: 'toDelete',\n });\n });\n });\n\n describe('makePrimary', () => {\n it('patches the collection displayField with the given field id', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField({ key: 'newPrimary' })]),\n );\n\n await actions.makePrimary!('newPrimary');\n\n expect(patchDataCollection).toHaveBeenCalledTimes(1);\n expect(patchDataCollection).toHaveBeenCalledWith(COLLECTION_ID, {\n displayField: 'newPrimary',\n });\n });\n });\n\n describe('duplicateField', () => {\n it('clones the source field with a \"(Copy)\" suffix and a fresh key', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [calledCollectionId, payload] =\n createDataCollectionField.mock.calls[0];\n expect(calledCollectionId).toBe(COLLECTION_ID);\n expect(payload.field).toMatchObject({\n displayName: 'Source Field (Copy)',\n type: collections.Type.TEXT,\n });\n expect(payload.field.key).not.toBe('sourceField');\n });\n\n it('strips systemField and capabilities from the cloned field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({\n systemField: true,\n capabilities: {\n sortable: true,\n queryOperators: [collections.QueryOperator.EQ],\n },\n }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field).not.toHaveProperty('systemField');\n expect(payload.field).not.toHaveProperty('capabilities');\n });\n\n it('clears typeMetadata.multiReference.referencingFieldKey on clone', async () => {\n const sourceField: collections.Field = makeField({\n key: 'multiRef',\n displayName: 'Multi Ref',\n type: collections.Type.MULTI_REFERENCE,\n typeMetadata: {\n multiReference: {\n referencingFieldKey: 'someExistingKey',\n referencedCollectionId: 'other-collection',\n },\n },\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([sourceField]),\n );\n\n await actions.duplicateField!('multiRef');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(\n payload.field.typeMetadata?.multiReference?.referencingFieldKey,\n ).toBeUndefined();\n expect(\n payload.field.typeMetadata?.multiReference?.referencedCollectionId,\n ).toBe('other-collection');\n });\n\n it('appends a numeric suffix when the generated key collides with an existing field', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n makeField({ key: 'sourceFieldCopy' }),\n ]),\n );\n\n await actions.duplicateField!('sourceField');\n\n const [, payload] = createDataCollectionField.mock.calls[0];\n expect(payload.field.key).not.toBe('sourceField');\n expect(payload.field.key).not.toBe('sourceFieldCopy');\n });\n\n it('throws when the source field is not found', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(actions.duplicateField!('missing')).rejects.toThrow(\n 'Field missing not found',\n );\n expect(createDataCollectionField).not.toHaveBeenCalled();\n });\n });\n\n describe('duplicateFieldWithContent', () => {\n it('creates the cloned field, kicks off a COPY_FIELD_DATA task, and waits for completion', async () => {\n createTask.mockResolvedValue({ _id: 'task-1' });\n getTask.mockResolvedValue({ _id: 'task-1', status: 'COMPLETED' });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([\n makeField({ key: 'sourceField', displayName: 'Source Field' }),\n ]),\n );\n\n await actions.duplicateFieldWithContent!('sourceField');\n\n expect(createDataCollectionField).toHaveBeenCalledTimes(1);\n const [, payload] = createDataCollectionField.mock.calls[0];\n const targetFieldKey = payload.field.key;\n\n expect(createTask).toHaveBeenCalledTimes(1);\n expect(createTask).toHaveBeenCalledWith({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: COLLECTION_ID,\n sourceFieldKey: 'sourceField',\n targetFieldKey,\n },\n });\n expect(getTask).toHaveBeenCalledWith('task-1');\n });\n\n it('throws when the copy task reports FAILED, surfacing the failure code and description', async () => {\n createTask.mockResolvedValue({ _id: 'task-2' });\n getTask.mockResolvedValue({\n _id: 'task-2',\n status: 'FAILED',\n failures: [{ code: 'INTERNAL', description: 'Copy boom' }],\n });\n\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([makeField()]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('sourceField'),\n ).rejects.toThrow('INTERNAL: Copy boom');\n });\n\n it('throws when the source field is not found and never creates a task', async () => {\n const actions = createCmsFieldActions(COLLECTION_ID, () =>\n makeCollection([]),\n );\n\n await expect(\n actions.duplicateFieldWithContent!('missing'),\n ).rejects.toThrow('Field missing not found');\n expect(createDataCollectionField).not.toHaveBeenCalled();\n expect(createTask).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -89,14 +89,29 @@ describe('useCmsSchemaSource', () => {
89
89
  fetchUserPermissionsMock.mockResolvedValue([]);
90
90
  fetchExternalDbConnectionsMock.mockResolvedValue([]);
91
91
  });
92
- it('declares the creatable types in display order, with CMS labels, subtitles and groups', () => {
92
+ it('declares the field type options in display order, with CMS labels, subtitles and groups', () => {
93
93
  const source = (0, _schema.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
94
94
  collectionId: 'Pokemon',
95
95
  httpClient
96
96
  }));
97
97
  const essentials = 'Essentials';
98
98
  const timeAndLocation = 'Time and location';
99
- expect(source.creatableFieldTypes).toEqual([{
99
+ // Only the copy each type shows in the picker; the settings section and the
100
+ // PII warning they also carry have their own tests.
101
+ const display = source.fieldModal.types.map(({
102
+ patternsType,
103
+ label,
104
+ subtitle,
105
+ group,
106
+ supportsPii
107
+ }) => ({
108
+ patternsType,
109
+ label,
110
+ subtitle,
111
+ group,
112
+ supportsPii
113
+ }));
114
+ expect(display).toEqual([{
100
115
  patternsType: 'SHORT_TEXT',
101
116
  label: 'Text',
102
117
  subtitle: 'Titles, paragraph',
@@ -121,6 +136,23 @@ describe('useCmsSchemaSource', () => {
121
136
  supportsPii: false
122
137
  }]);
123
138
  });
139
+ it('gives every type the same settings section, so the modal keeps one set of inputs', () => {
140
+ const source = (0, _schema.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
141
+ collectionId: 'Pokemon',
142
+ httpClient
143
+ }));
144
+ const sections = source.fieldModal.types.map(t => t.settingsSection);
145
+ expect(sections.every(section => section === sections[0])).toBe(true);
146
+ expect(sections[0]).toBeDefined();
147
+ });
148
+ it('warns about PII only on the type that can be marked PII', () => {
149
+ const source = (0, _schema.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
150
+ collectionId: 'Pokemon',
151
+ httpClient
152
+ }));
153
+ const withWarning = source.fieldModal.types.filter(t => t.piiWarning).map(t => t.patternsType);
154
+ expect(withWarning).toEqual(['SHORT_TEXT']);
155
+ });
124
156
  it('builds an offset source keyed by the collectionId', () => {
125
157
  const source = (0, _schema.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
126
158
  collectionId: 'Pokemon',
@@ -1 +1 @@
1
- {"version":3,"names":["_patterns","require","_schema","_data","_useCmsSchemaSource","_fetchUserPermissions","_fetchExternalDbConnections","jest","mock","errorHandler","withErrorHandler","fn","actual","requireActual","collections","getDataCollection","fetchUserPermissions","fetchExternalDbConnections","fetchUserPermissionsMock","fetchExternalDbConnectionsMock","httpClient","collectionWithReference","_id","collectionType","displayField","capabilities","dataOperations","permissions","read","insert","update","remove","plugins","fields","key","type","Type","TEXT","systemField","encrypted","displayName","queryOperators","sortable","REFERENCE","typeMetadata","reference","referencedCollectionId","describe","beforeEach","clearAllMocks","mockResolvedValue","it","source","defineSchemaSource","cmsSchemaSourceInput","collectionId","essentials","timeAndLocation","expect","creatableFieldTypes","toEqual","patternsType","label","subtitle","group","supportsPii","toBe","paginationMode","rating","defineFieldType","display","icons","Small","Medium","filter","filterable","fieldTypes","references","loadSchema","Camels","toBeDefined","seeded"],"sources":["../../../../src/adapter/__tests__/useCmsSchemaSource.spec.ts"],"sourcesContent":["import { defineFieldType } from '@wix/patterns';\nimport { defineSchemaSource } from '@wix/patterns/schema';\nimport { collections } from '@wix/data';\nimport { cmsSchemaSourceInput } from '../useCmsSchemaSource';\nimport { fetchUserPermissions } from '../fetchUserPermissions';\nimport { fetchExternalDbConnections } from '../fetchExternalDbConnections';\n\n// loadCmsSchema imports errorHandler at evaluation time; stub it so importing\n// the source builder is side-effect free.\njest.mock('@wix/essentials', () => ({\n errorHandler: {\n withErrorHandler: (fn: () => unknown) => fn(),\n },\n}));\n\n// Keep @wix/data real (cmsFieldTypeMap reads `collections.Type` at evaluation\n// time) and stub only the collection fetch, so loadSchema runs the real\n// loader + transform against a fixed collection.\njest.mock('@wix/data', () => {\n const actual = jest.requireActual('@wix/data');\n return {\n ...actual,\n collections: {\n ...actual.collections,\n getDataCollection: jest.fn(),\n },\n };\n});\njest.mock('../fetchUserPermissions', () => ({\n fetchUserPermissions: jest.fn(),\n}));\njest.mock('../fetchExternalDbConnections', () => ({\n fetchExternalDbConnections: jest.fn(),\n}));\n\nconst getDataCollection = collections.getDataCollection as unknown as jest.Mock;\nconst fetchUserPermissionsMock = fetchUserPermissions as unknown as jest.Mock;\nconst fetchExternalDbConnectionsMock =\n fetchExternalDbConnections as unknown as jest.Mock;\n\nconst httpClient = {} as unknown as Parameters<\n typeof cmsSchemaSourceInput\n>[0]['httpClient'];\n\n// A collection with one reference field pointing at \"Camels\".\nconst collectionWithReference = (): collections.DataCollection => ({\n _id: 'Products',\n collectionType: 'NATIVE',\n displayField: 'title',\n capabilities: { dataOperations: ['SAVE', 'UPDATE', 'REMOVE'] },\n permissions: {\n read: 'ANYONE',\n insert: 'SITE_MEMBER',\n update: 'SITE_MEMBER',\n remove: 'SITE_MEMBER',\n },\n plugins: [],\n fields: [\n {\n key: 'title',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Title',\n capabilities: { queryOperators: [], sortable: true },\n },\n {\n key: 'supplier',\n type: collections.Type.REFERENCE,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Supplier',\n capabilities: { queryOperators: [], sortable: false },\n typeMetadata: { reference: { referencedCollectionId: 'Camels' } },\n },\n ],\n});\n\ndescribe('useCmsSchemaSource', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n getDataCollection.mockResolvedValue(collectionWithReference());\n fetchUserPermissionsMock.mockResolvedValue([]);\n fetchExternalDbConnectionsMock.mockResolvedValue([]);\n });\n\n it('declares the creatable types in display order, with CMS labels, subtitles and groups', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n }),\n );\n\n const essentials = 'Essentials';\n const timeAndLocation = 'Time and location';\n expect(source.creatableFieldTypes).toEqual([\n {\n patternsType: 'SHORT_TEXT',\n label: 'Text',\n subtitle: 'Titles, paragraph',\n group: essentials,\n },\n {\n patternsType: 'NUMBER',\n label: 'Number',\n subtitle: 'ID, rating, order number',\n group: essentials,\n supportsPii: false,\n },\n {\n patternsType: 'BOOLEAN',\n label: 'Boolean',\n subtitle: 'Yes or no, true or false',\n group: essentials,\n supportsPii: false,\n },\n {\n patternsType: 'DATE',\n label: 'Date',\n subtitle: 'Date of event, date added',\n group: timeAndLocation,\n supportsPii: false,\n },\n ]);\n });\n\n it('builds an offset source keyed by the collectionId', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n }),\n );\n\n expect(source.collectionId).toBe('Pokemon');\n expect(source.paginationMode).toBe('offset');\n });\n\n it('carries consumer-defined field types through to the source', () => {\n const rating = defineFieldType<number>({\n type: 'app.rating',\n display: {\n label: 'Rating',\n icons: { Small: () => null, Medium: () => null },\n },\n filter: { filterable: false },\n });\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n fieldTypes: [rating],\n }),\n );\n\n expect(source.fieldTypes).toEqual([rating]);\n });\n\n it('auto-builds a reference source per reference field once the schema loads', async () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Products', httpClient }),\n );\n\n // Nothing is wired until the schema (and its reference fields) is known.\n expect(source.references).toEqual({});\n\n await source.loadSchema();\n\n expect(source.references.Camels).toBeDefined();\n expect(source.references.Camels.collectionId).toBe('Camels');\n });\n\n it('keeps a seeded reference source instead of auto-building it', async () => {\n const seeded = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Camels', httpClient }),\n );\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Products',\n httpClient,\n references: { Camels: seeded },\n }),\n );\n\n await source.loadSchema();\n\n expect(source.references.Camels).toBe(seeded);\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_patterns","require","_schema","_data","_useCmsSchemaSource","_fetchUserPermissions","_fetchExternalDbConnections","jest","mock","errorHandler","withErrorHandler","fn","actual","requireActual","collections","getDataCollection","fetchUserPermissions","fetchExternalDbConnections","fetchUserPermissionsMock","fetchExternalDbConnectionsMock","httpClient","collectionWithReference","_id","collectionType","displayField","capabilities","dataOperations","permissions","read","insert","update","remove","plugins","fields","key","type","Type","TEXT","systemField","encrypted","displayName","queryOperators","sortable","REFERENCE","typeMetadata","reference","referencedCollectionId","describe","beforeEach","clearAllMocks","mockResolvedValue","it","source","defineSchemaSource","cmsSchemaSourceInput","collectionId","essentials","timeAndLocation","display","fieldModal","types","map","patternsType","label","subtitle","group","supportsPii","expect","toEqual","sections","t","settingsSection","every","section","toBe","toBeDefined","withWarning","filter","piiWarning","paginationMode","rating","defineFieldType","icons","Small","Medium","filterable","fieldTypes","references","loadSchema","Camels","seeded"],"sources":["../../../../src/adapter/__tests__/useCmsSchemaSource.spec.ts"],"sourcesContent":["import { defineFieldType } from '@wix/patterns';\nimport { defineSchemaSource } from '@wix/patterns/schema';\nimport { collections } from '@wix/data';\nimport { cmsSchemaSourceInput } from '../useCmsSchemaSource';\nimport { fetchUserPermissions } from '../fetchUserPermissions';\nimport { fetchExternalDbConnections } from '../fetchExternalDbConnections';\n\n// loadCmsSchema imports errorHandler at evaluation time; stub it so importing\n// the source builder is side-effect free.\njest.mock('@wix/essentials', () => ({\n errorHandler: {\n withErrorHandler: (fn: () => unknown) => fn(),\n },\n}));\n\n// Keep @wix/data real (cmsFieldTypeMap reads `collections.Type` at evaluation\n// time) and stub only the collection fetch, so loadSchema runs the real\n// loader + transform against a fixed collection.\njest.mock('@wix/data', () => {\n const actual = jest.requireActual('@wix/data');\n return {\n ...actual,\n collections: {\n ...actual.collections,\n getDataCollection: jest.fn(),\n },\n };\n});\njest.mock('../fetchUserPermissions', () => ({\n fetchUserPermissions: jest.fn(),\n}));\njest.mock('../fetchExternalDbConnections', () => ({\n fetchExternalDbConnections: jest.fn(),\n}));\n\nconst getDataCollection = collections.getDataCollection as unknown as jest.Mock;\nconst fetchUserPermissionsMock = fetchUserPermissions as unknown as jest.Mock;\nconst fetchExternalDbConnectionsMock =\n fetchExternalDbConnections as unknown as jest.Mock;\n\nconst httpClient = {} as unknown as Parameters<\n typeof cmsSchemaSourceInput\n>[0]['httpClient'];\n\n// A collection with one reference field pointing at \"Camels\".\nconst collectionWithReference = (): collections.DataCollection => ({\n _id: 'Products',\n collectionType: 'NATIVE',\n displayField: 'title',\n capabilities: { dataOperations: ['SAVE', 'UPDATE', 'REMOVE'] },\n permissions: {\n read: 'ANYONE',\n insert: 'SITE_MEMBER',\n update: 'SITE_MEMBER',\n remove: 'SITE_MEMBER',\n },\n plugins: [],\n fields: [\n {\n key: 'title',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Title',\n capabilities: { queryOperators: [], sortable: true },\n },\n {\n key: 'supplier',\n type: collections.Type.REFERENCE,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Supplier',\n capabilities: { queryOperators: [], sortable: false },\n typeMetadata: { reference: { referencedCollectionId: 'Camels' } },\n },\n ],\n});\n\ndescribe('useCmsSchemaSource', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n getDataCollection.mockResolvedValue(collectionWithReference());\n fetchUserPermissionsMock.mockResolvedValue([]);\n fetchExternalDbConnectionsMock.mockResolvedValue([]);\n });\n\n it('declares the field type options in display order, with CMS labels, subtitles and groups', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n }),\n );\n\n const essentials = 'Essentials';\n const timeAndLocation = 'Time and location';\n // Only the copy each type shows in the picker; the settings section and the\n // PII warning they also carry have their own tests.\n const display = source.fieldModal.types.map(\n ({ patternsType, label, subtitle, group, supportsPii }) => ({\n patternsType,\n label,\n subtitle,\n group,\n supportsPii,\n }),\n );\n expect(display).toEqual([\n {\n patternsType: 'SHORT_TEXT',\n label: 'Text',\n subtitle: 'Titles, paragraph',\n group: essentials,\n },\n {\n patternsType: 'NUMBER',\n label: 'Number',\n subtitle: 'ID, rating, order number',\n group: essentials,\n supportsPii: false,\n },\n {\n patternsType: 'BOOLEAN',\n label: 'Boolean',\n subtitle: 'Yes or no, true or false',\n group: essentials,\n supportsPii: false,\n },\n {\n patternsType: 'DATE',\n label: 'Date',\n subtitle: 'Date of event, date added',\n group: timeAndLocation,\n supportsPii: false,\n },\n ]);\n });\n\n it('gives every type the same settings section, so the modal keeps one set of inputs', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Pokemon', httpClient }),\n );\n\n const sections = source.fieldModal.types.map((t) => t.settingsSection);\n expect(sections.every((section) => section === sections[0])).toBe(true);\n expect(sections[0]).toBeDefined();\n });\n\n it('warns about PII only on the type that can be marked PII', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Pokemon', httpClient }),\n );\n\n const withWarning = source.fieldModal.types\n .filter((t) => t.piiWarning)\n .map((t) => t.patternsType);\n expect(withWarning).toEqual(['SHORT_TEXT']);\n });\n\n it('builds an offset source keyed by the collectionId', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n }),\n );\n\n expect(source.collectionId).toBe('Pokemon');\n expect(source.paginationMode).toBe('offset');\n });\n\n it('carries consumer-defined field types through to the source', () => {\n const rating = defineFieldType<number>({\n type: 'app.rating',\n display: {\n label: 'Rating',\n icons: { Small: () => null, Medium: () => null },\n },\n filter: { filterable: false },\n });\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n fieldTypes: [rating],\n }),\n );\n\n expect(source.fieldTypes).toEqual([rating]);\n });\n\n it('auto-builds a reference source per reference field once the schema loads', async () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Products', httpClient }),\n );\n\n // Nothing is wired until the schema (and its reference fields) is known.\n expect(source.references).toEqual({});\n\n await source.loadSchema();\n\n expect(source.references.Camels).toBeDefined();\n expect(source.references.Camels.collectionId).toBe('Camels');\n });\n\n it('keeps a seeded reference source instead of auto-building it', async () => {\n const seeded = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Camels', httpClient }),\n );\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Products',\n httpClient,\n references: { Camels: seeded },\n }),\n );\n\n await source.loadSchema();\n\n expect(source.references.Camels).toBe(seeded);\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -32,6 +32,15 @@ const waitForCopyTask = async taskId => {
32
32
  throw err;
33
33
  }
34
34
  };
35
+ const applyCmsFieldSettings = (cmsField, settings) => {
36
+ if (!settings) {
37
+ return;
38
+ }
39
+ cmsField.description = settings.helpText || undefined;
40
+ cmsField.required = settings.required;
41
+ cmsField.stringLengthRange = settings.characters;
42
+ cmsField.numberRange = settings.values;
43
+ };
35
44
 
36
45
  /**
37
46
  * Builds the `FieldActions` for a CMS collection over `@wix/data`. `getCollection`
@@ -107,6 +116,15 @@ function createCmsFieldActions(collectionId, getCollection) {
107
116
  }
108
117
  return patch;
109
118
  };
119
+ const writableFieldProps = source => {
120
+ const {
121
+ systemField,
122
+ capabilities,
123
+ condition,
124
+ ...writable
125
+ } = source;
126
+ return writable;
127
+ };
110
128
 
111
129
  /**
112
130
  * Clones a CMS field for duplication: drops `systemField`/`capabilities` and clears
@@ -136,8 +154,9 @@ function createCmsFieldActions(collectionId, getCollection) {
136
154
  return cloned;
137
155
  };
138
156
  return {
139
- addField: async field => {
157
+ addField: async (field, settings) => {
140
158
  const cmsField = toCmsField(field, (0, _getFieldKey.getFieldKey)(existingFieldKeys(), field.displayName));
159
+ applyCmsFieldSettings(cmsField, settings);
141
160
  const {
142
161
  dataCollection
143
162
  } = await _data.collections.createDataCollectionField(collectionId, {
@@ -165,10 +184,23 @@ function createCmsFieldActions(collectionId, getCollection) {
165
184
  });
166
185
  return fieldsAfterMutation(dataCollection);
167
186
  },
168
- editField: async (fieldId, updates) => {
187
+ editField: async (fieldId, updates, settings) => {
188
+ const existingField = findCmsField(fieldId);
189
+ if (!(existingField != null && existingField.type)) {
190
+ throw new Error(`Field ${fieldId} not found`);
191
+ }
192
+ const field = {
193
+ ...writableFieldProps(existingField),
194
+ ...buildFieldPatch(fieldId, updates),
195
+ key: fieldId,
196
+ type: existingField.type
197
+ };
198
+ applyCmsFieldSettings(field, settings);
169
199
  const {
170
200
  dataCollection
171
- } = await _data.collections.patchDataCollectionField(collectionId, buildFieldPatch(fieldId, updates));
201
+ } = await _data.collections.updateDataCollectionField(collectionId, {
202
+ field
203
+ });
172
204
  return fieldsAfterMutation(dataCollection);
173
205
  },
174
206
  deleteField: async fieldId => {