@wix/patterns-cms 1.7.0 → 1.8.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.
- package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js +12 -4
- package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js +2 -14
- package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js +38 -0
- package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/filterUtils.spec.js +10 -109
- package/dist/cjs/adapter/__tests__/filterUtils.spec.js.map +1 -1
- package/dist/cjs/adapter/createCmsBackend.js +1 -3
- package/dist/cjs/adapter/createCmsBackend.js.map +1 -1
- package/dist/cjs/adapter/createCmsFieldActions.js +30 -6
- package/dist/cjs/adapter/createCmsFieldActions.js.map +1 -1
- package/dist/cjs/adapter/createCmsSchemaSource.js +43 -0
- package/dist/cjs/adapter/createCmsSchemaSource.js.map +1 -0
- package/dist/cjs/adapter/filterUtils.js +6 -10
- package/dist/cjs/adapter/filterUtils.js.map +1 -1
- package/dist/cjs/adapter/index.js +3 -1
- package/dist/cjs/adapter/index.js.map +1 -1
- package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js +12 -4
- package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/createCmsBackend.spec.js +2 -2
- package/dist/esm/adapter/__tests__/createCmsBackend.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js +41 -0
- package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/filterUtils.spec.js +0 -33
- package/dist/esm/adapter/__tests__/filterUtils.spec.js.map +1 -1
- package/dist/esm/adapter/createCmsBackend.js +0 -2
- package/dist/esm/adapter/createCmsBackend.js.map +1 -1
- package/dist/esm/adapter/createCmsFieldActions.js +17 -16
- package/dist/esm/adapter/createCmsFieldActions.js.map +1 -1
- package/dist/esm/adapter/createCmsSchemaSource.js +41 -0
- package/dist/esm/adapter/createCmsSchemaSource.js.map +1 -0
- package/dist/esm/adapter/filterUtils.js +6 -9
- package/dist/esm/adapter/filterUtils.js.map +1 -1
- package/dist/esm/adapter/index.js +1 -0
- package/dist/esm/adapter/index.js.map +1 -1
- package/dist/types/adapter/__tests__/createCmsSchemaSource.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/createCmsSchemaSource.spec.d.ts.map +1 -0
- package/dist/types/adapter/createCmsBackend.d.ts.map +1 -1
- package/dist/types/adapter/createCmsFieldActions.d.ts.map +1 -1
- package/dist/types/adapter/createCmsSchemaSource.d.ts +12 -0
- package/dist/types/adapter/createCmsSchemaSource.d.ts.map +1 -0
- package/dist/types/adapter/filterUtils.d.ts +1 -4
- package/dist/types/adapter/filterUtils.d.ts.map +1 -1
- package/dist/types/adapter/index.d.ts +1 -0
- package/dist/types/adapter/index.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_bexCore","_filterUtils","_constants","_wixDataQueryRecorder","jest","mock","recorder","items","query","fn","createQueryRecorder","filter","makeQuery","filters","describe","beforeEach","clearAllMocks","numberFields","numberField","id","type","displayName","capabilities","supportedQueryOperators","sortable","it","dataQuery","addFiltersToDataQuery","from","to","fields","filterFieldMapping","fieldId","expect","firstCallArgs","toEqual","wasCalled","toBe","calls","toHaveLength","booleanFields","booleanField","BooleanFilters","checked","unchecked","andArgs","toBeDefined","falseFilter","eqValues","c","method","map","args","toContain","richContentFields","richField","HasValueFilters","hasValue","noValue","tagsField","textFields","textField","operator","FilterOperator","CONTAINS","value","IS_EMPTY","EXISTS","NOT_CONTAINS","notArgs","innerFilter","addressField"],"sources":["../../../../src/adapter/__tests__/filterUtils.spec.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport { FilterOperator } from '@wix/bex-core';\nimport type { OffsetQuery, Schema } from '@wix/bex-core';\nimport { addFiltersToDataQuery } from '../filterUtils';\nimport { BooleanFilters, HasValueFilters } from '../constants';\nimport {\n firstCallArgs,\n wasCalled,\n type QueryRecorder,\n} from './wixDataQueryRecorder';\n\n// Replace the `@wix/data` `items` builders with chainable recorders so we can\n// assert which WQL operator methods the util produced.\njest.mock('@wix/data', () => {\n const recorder = require('./wixDataQueryRecorder');\n return {\n items: {\n query: jest.fn(() => recorder.createQueryRecorder()),\n filter: jest.fn(() => recorder.createQueryRecorder()),\n },\n };\n});\n\ntype SchemaFields = Schema['fields'];\n\nconst makeQuery = (filters: Record<string, unknown>): OffsetQuery =>\n ({ filters } as unknown as OffsetQuery);\n\ndescribe('addFiltersToDataQuery', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n const numberFields: SchemaFields = {\n numberField: {\n id: 'numberField',\n type: 'NUMBER',\n displayName: 'Number Field',\n capabilities: { supportedQueryOperators: ['GTE', 'LTE'], sortable: true },\n },\n };\n\n it('applies a number range filter as ge (from) and le (to)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ numberField: { from: 5, to: 10 } }),\n fields: numberFields,\n filterFieldMapping: { numberField: { fieldId: 'numberField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'ge')).toEqual(['numberField', 5]);\n expect(firstCallArgs(dataQuery, 'le')).toEqual(['numberField', 10]);\n });\n\n it('ignores range props whose operator is not supported by the field', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ numberField: { from: 5, to: 10 } }),\n fields: {\n numberField: {\n id: 'numberField',\n type: 'NUMBER',\n displayName: 'Number Field',\n // Only EQ supported → GTE/LTE range props are dropped.\n capabilities: { supportedQueryOperators: ['EQ'], sortable: true },\n },\n },\n filterFieldMapping: { numberField: { fieldId: 'numberField' } },\n });\n\n expect(wasCalled(dataQuery, 'ge')).toBe(false);\n expect(wasCalled(dataQuery, 'le')).toBe(false);\n });\n\n it('returns the query untouched when filterFieldMapping is absent', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ numberField: { from: 5, to: 10 } }),\n fields: numberFields,\n });\n\n expect(dataQuery.calls).toHaveLength(0);\n });\n\n describe('BOOLEAN array filter', () => {\n const booleanFields: SchemaFields = {\n booleanField: {\n id: 'booleanField',\n type: 'BOOLEAN',\n displayName: 'Boolean Field',\n capabilities: { supportedQueryOperators: ['EQ'], sortable: true },\n },\n };\n\n it('applies eq(field, true) when \"checked\" is selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ booleanField: [{ id: BooleanFilters.checked }] }),\n fields: booleanFields,\n filterFieldMapping: { booleanField: { fieldId: 'booleanField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'eq')).toEqual(['booleanField', true]);\n });\n\n it('applies and(eq false OR eq undefined) when \"checked\" is not selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ booleanField: [{ id: BooleanFilters.unchecked }] }),\n fields: booleanFields,\n filterFieldMapping: { booleanField: { fieldId: 'booleanField' } },\n });\n\n // No direct eq(true) on the data query — the false-or-undefined branch wraps in .and().\n expect(wasCalled(dataQuery, 'eq')).toBe(false);\n const andArgs = firstCallArgs(dataQuery, 'and');\n expect(andArgs).toBeDefined();\n\n // The argument is the `falseFilter.or(undefinedFilter)` recorder.\n const falseFilter = andArgs![0] as QueryRecorder;\n const eqValues = falseFilter.calls\n .filter((c) => c.method === 'eq')\n .map((c) => c.args[1]);\n expect(eqValues).toContain(false);\n expect(wasCalled(falseFilter, 'or')).toBe(true);\n });\n });\n\n describe('HAS_VALUE array filter', () => {\n const richContentFields: SchemaFields = {\n richField: {\n id: 'richField',\n type: 'RICH_CONTENT',\n displayName: 'Rich Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n };\n\n it('applies isNotEmpty when only \"hasValue\" is selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ richField: [{ id: HasValueFilters.hasValue }] }),\n fields: richContentFields,\n filterFieldMapping: { richField: { fieldId: 'richField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'isNotEmpty')).toEqual(['richField']);\n expect(wasCalled(dataQuery, 'isEmpty')).toBe(false);\n });\n\n it('applies isEmpty when only \"noValue\" is selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ richField: [{ id: HasValueFilters.noValue }] }),\n fields: richContentFields,\n filterFieldMapping: { richField: { fieldId: 'richField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'isEmpty')).toEqual(['richField']);\n expect(wasCalled(dataQuery, 'isNotEmpty')).toBe(false);\n });\n\n it('applies neither when both hasValue and noValue are selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n richField: [\n { id: HasValueFilters.hasValue },\n { id: HasValueFilters.noValue },\n ],\n }),\n fields: richContentFields,\n filterFieldMapping: { richField: { fieldId: 'richField' } },\n });\n\n expect(wasCalled(dataQuery, 'isEmpty')).toBe(false);\n expect(wasCalled(dataQuery, 'isNotEmpty')).toBe(false);\n });\n });\n\n it('applies hasSome for a generic (non-boolean, non-has-value) array filter', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n tagsField: [{ id: 'a' }, { id: 'b' }],\n }),\n fields: {\n tagsField: {\n id: 'tagsField',\n type: 'SHORT_TEXT',\n displayName: 'Tags Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n },\n filterFieldMapping: { tagsField: { fieldId: 'tagsField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'hasSome')).toEqual([\n 'tagsField',\n ['a', 'b'],\n ]);\n });\n\n describe('operator object filter', () => {\n const textFields: SchemaFields = {\n textField: {\n id: 'textField',\n type: 'SHORT_TEXT',\n displayName: 'Text Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n };\n\n it('maps CONTAINS to .contains', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.CONTAINS, value: 'foo' },\n }),\n fields: textFields,\n filterFieldMapping: { textField: { fieldId: 'textField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'contains')).toEqual([\n 'textField',\n 'foo',\n ]);\n });\n\n it('maps IS_EMPTY to .isEmpty(field) (no value argument)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.IS_EMPTY },\n }),\n fields: textFields,\n filterFieldMapping: { textField: { fieldId: 'textField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'isEmpty')).toEqual(['textField']);\n });\n\n it('maps EXISTS to .isNotEmpty(field)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.EXISTS },\n }),\n fields: textFields,\n filterFieldMapping: { textField: { fieldId: 'textField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'isNotEmpty')).toEqual(['textField']);\n });\n\n it('maps NOT_CONTAINS to .not(filter().contains(...))', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.NOT_CONTAINS, value: 'bar' },\n }),\n fields: textFields,\n filterFieldMapping: { textField: { fieldId: 'textField' } },\n });\n\n const notArgs = firstCallArgs(dataQuery, 'not');\n expect(notArgs).toBeDefined();\n const innerFilter = notArgs![0] as QueryRecorder;\n expect(firstCallArgs(innerFilter, 'contains')).toEqual([\n 'textField',\n 'bar',\n ]);\n });\n\n it('queries the .formatted nested property for ADDRESS text operators', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n addressField: { operator: FilterOperator.CONTAINS, value: 'NYC' },\n }),\n fields: {\n addressField: {\n id: 'addressField',\n type: 'ADDRESS',\n displayName: 'Address Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n },\n filterFieldMapping: { addressField: { fieldId: 'addressField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'contains')).toEqual([\n 'addressField.formatted',\n 'NYC',\n ]);\n });\n\n it('queries the ADDRESS field directly for existence operators (no .formatted)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n addressField: { operator: FilterOperator.IS_EMPTY },\n }),\n fields: {\n addressField: {\n id: 'addressField',\n type: 'ADDRESS',\n displayName: 'Address Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n },\n filterFieldMapping: { addressField: { fieldId: 'addressField' } },\n });\n\n expect(firstCallArgs(dataQuery, 'isEmpty')).toEqual(['addressField']);\n });\n });\n\n it('skips filters for fields not present in filterFieldMapping', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ numberField: { from: 5, to: 10 } }),\n fields: numberFields,\n filterFieldMapping: {},\n });\n\n expect(dataQuery.calls).toHaveLength(0);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_bexCore","_filterUtils","_constants","_wixDataQueryRecorder","jest","mock","recorder","items","query","fn","createQueryRecorder","filter","makeQuery","filters","describe","beforeEach","clearAllMocks","numberFields","numberField","id","type","displayName","capabilities","supportedQueryOperators","sortable","it","dataQuery","addFiltersToDataQuery","from","to","fields","expect","firstCallArgs","toEqual","wasCalled","toBe","booleanFields","booleanField","BooleanFilters","checked","unchecked","andArgs","toBeDefined","falseFilter","eqValues","calls","c","method","map","args","toContain","richContentFields","richField","HasValueFilters","hasValue","noValue","tagsField","textFields","textField","operator","FilterOperator","CONTAINS","value","IS_EMPTY","EXISTS","NOT_CONTAINS","notArgs","innerFilter","addressField"],"sources":["../../../../src/adapter/__tests__/filterUtils.spec.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport { FilterOperator } from '@wix/bex-core';\nimport type { OffsetQuery, Schema } from '@wix/bex-core';\nimport { addFiltersToDataQuery } from '../filterUtils';\nimport { BooleanFilters, HasValueFilters } from '../constants';\nimport {\n firstCallArgs,\n wasCalled,\n type QueryRecorder,\n} from './wixDataQueryRecorder';\n\n// Replace the `@wix/data` `items` builders with chainable recorders so we can\n// assert which WQL operator methods the util produced.\njest.mock('@wix/data', () => {\n const recorder = require('./wixDataQueryRecorder');\n return {\n items: {\n query: jest.fn(() => recorder.createQueryRecorder()),\n filter: jest.fn(() => recorder.createQueryRecorder()),\n },\n };\n});\n\ntype SchemaFields = Schema['fields'];\n\nconst makeQuery = (filters: Record<string, unknown>): OffsetQuery =>\n ({ filters } as unknown as OffsetQuery);\n\ndescribe('addFiltersToDataQuery', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n const numberFields: SchemaFields = {\n numberField: {\n id: 'numberField',\n type: 'NUMBER',\n displayName: 'Number Field',\n capabilities: { supportedQueryOperators: ['GTE', 'LTE'], sortable: true },\n },\n };\n\n it('applies a number range filter as ge (from) and le (to)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ numberField: { from: 5, to: 10 } }),\n fields: numberFields,\n });\n\n expect(firstCallArgs(dataQuery, 'ge')).toEqual(['numberField', 5]);\n expect(firstCallArgs(dataQuery, 'le')).toEqual(['numberField', 10]);\n });\n\n it('ignores range props whose operator is not supported by the field', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ numberField: { from: 5, to: 10 } }),\n fields: {\n numberField: {\n id: 'numberField',\n type: 'NUMBER',\n displayName: 'Number Field',\n // Only EQ supported → GTE/LTE range props are dropped.\n capabilities: { supportedQueryOperators: ['EQ'], sortable: true },\n },\n },\n });\n\n expect(wasCalled(dataQuery, 'ge')).toBe(false);\n expect(wasCalled(dataQuery, 'le')).toBe(false);\n });\n\n describe('BOOLEAN array filter', () => {\n const booleanFields: SchemaFields = {\n booleanField: {\n id: 'booleanField',\n type: 'BOOLEAN',\n displayName: 'Boolean Field',\n capabilities: { supportedQueryOperators: ['EQ'], sortable: true },\n },\n };\n\n it('applies eq(field, true) when \"checked\" is selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ booleanField: [{ id: BooleanFilters.checked }] }),\n fields: booleanFields,\n });\n\n expect(firstCallArgs(dataQuery, 'eq')).toEqual(['booleanField', true]);\n });\n\n it('applies and(eq false OR eq undefined) when \"checked\" is not selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ booleanField: [{ id: BooleanFilters.unchecked }] }),\n fields: booleanFields,\n });\n\n // No direct eq(true) on the data query — the false-or-undefined branch wraps in .and().\n expect(wasCalled(dataQuery, 'eq')).toBe(false);\n const andArgs = firstCallArgs(dataQuery, 'and');\n expect(andArgs).toBeDefined();\n\n // The argument is the `falseFilter.or(undefinedFilter)` recorder.\n const falseFilter = andArgs![0] as QueryRecorder;\n const eqValues = falseFilter.calls\n .filter((c) => c.method === 'eq')\n .map((c) => c.args[1]);\n expect(eqValues).toContain(false);\n expect(wasCalled(falseFilter, 'or')).toBe(true);\n });\n });\n\n describe('HAS_VALUE array filter', () => {\n const richContentFields: SchemaFields = {\n richField: {\n id: 'richField',\n type: 'RICH_CONTENT',\n displayName: 'Rich Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n };\n\n it('applies isNotEmpty when only \"hasValue\" is selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ richField: [{ id: HasValueFilters.hasValue }] }),\n fields: richContentFields,\n });\n\n expect(firstCallArgs(dataQuery, 'isNotEmpty')).toEqual(['richField']);\n expect(wasCalled(dataQuery, 'isEmpty')).toBe(false);\n });\n\n it('applies isEmpty when only \"noValue\" is selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({ richField: [{ id: HasValueFilters.noValue }] }),\n fields: richContentFields,\n });\n\n expect(firstCallArgs(dataQuery, 'isEmpty')).toEqual(['richField']);\n expect(wasCalled(dataQuery, 'isNotEmpty')).toBe(false);\n });\n\n it('applies neither when both hasValue and noValue are selected', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n richField: [\n { id: HasValueFilters.hasValue },\n { id: HasValueFilters.noValue },\n ],\n }),\n fields: richContentFields,\n });\n\n expect(wasCalled(dataQuery, 'isEmpty')).toBe(false);\n expect(wasCalled(dataQuery, 'isNotEmpty')).toBe(false);\n });\n });\n\n it('applies hasSome for a generic (non-boolean, non-has-value) array filter', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n tagsField: [{ id: 'a' }, { id: 'b' }],\n }),\n fields: {\n tagsField: {\n id: 'tagsField',\n type: 'SHORT_TEXT',\n displayName: 'Tags Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n },\n });\n\n expect(firstCallArgs(dataQuery, 'hasSome')).toEqual([\n 'tagsField',\n ['a', 'b'],\n ]);\n });\n\n describe('operator object filter', () => {\n const textFields: SchemaFields = {\n textField: {\n id: 'textField',\n type: 'SHORT_TEXT',\n displayName: 'Text Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n };\n\n it('maps CONTAINS to .contains', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.CONTAINS, value: 'foo' },\n }),\n fields: textFields,\n });\n\n expect(firstCallArgs(dataQuery, 'contains')).toEqual([\n 'textField',\n 'foo',\n ]);\n });\n\n it('maps IS_EMPTY to .isEmpty(field) (no value argument)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.IS_EMPTY },\n }),\n fields: textFields,\n });\n\n expect(firstCallArgs(dataQuery, 'isEmpty')).toEqual(['textField']);\n });\n\n it('maps EXISTS to .isNotEmpty(field)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.EXISTS },\n }),\n fields: textFields,\n });\n\n expect(firstCallArgs(dataQuery, 'isNotEmpty')).toEqual(['textField']);\n });\n\n it('maps NOT_CONTAINS to .not(filter().contains(...))', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n textField: { operator: FilterOperator.NOT_CONTAINS, value: 'bar' },\n }),\n fields: textFields,\n });\n\n const notArgs = firstCallArgs(dataQuery, 'not');\n expect(notArgs).toBeDefined();\n const innerFilter = notArgs![0] as QueryRecorder;\n expect(firstCallArgs(innerFilter, 'contains')).toEqual([\n 'textField',\n 'bar',\n ]);\n });\n\n it('queries the .formatted nested property for ADDRESS text operators', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n addressField: { operator: FilterOperator.CONTAINS, value: 'NYC' },\n }),\n fields: {\n addressField: {\n id: 'addressField',\n type: 'ADDRESS',\n displayName: 'Address Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n },\n });\n\n expect(firstCallArgs(dataQuery, 'contains')).toEqual([\n 'addressField.formatted',\n 'NYC',\n ]);\n });\n\n it('queries the ADDRESS field directly for existence operators (no .formatted)', () => {\n const dataQuery = items.query('collectionId') as unknown as QueryRecorder;\n\n addFiltersToDataQuery({\n dataQuery: dataQuery as never,\n query: makeQuery({\n addressField: { operator: FilterOperator.IS_EMPTY },\n }),\n fields: {\n addressField: {\n id: 'addressField',\n type: 'ADDRESS',\n displayName: 'Address Field',\n capabilities: { supportedQueryOperators: [], sortable: false },\n },\n },\n });\n\n expect(firstCallArgs(dataQuery, 'isEmpty')).toEqual(['addressField']);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -75,7 +75,6 @@ function createCmsBackend(collectionId, fields) {
|
|
|
75
75
|
// auto-patterns). The options arg is not on the `CollectionBackend.find`
|
|
76
76
|
// contract type — how a consumer supplies it is still open.
|
|
77
77
|
const searchableFieldIds = options.searchableFieldIds ?? [];
|
|
78
|
-
const filterFieldMapping = options.filterFieldMapping ?? {};
|
|
79
78
|
let dataQuery = _data.items.query(collectionId);
|
|
80
79
|
dataQuery = (0, _searchUtils.addSearchToDataQuery)({
|
|
81
80
|
dataQuery,
|
|
@@ -86,8 +85,7 @@ function createCmsBackend(collectionId, fields) {
|
|
|
86
85
|
dataQuery = (0, _filterUtils.addFiltersToDataQuery)({
|
|
87
86
|
dataQuery,
|
|
88
87
|
query,
|
|
89
|
-
fields
|
|
90
|
-
filterFieldMapping
|
|
88
|
+
fields
|
|
91
89
|
});
|
|
92
90
|
dataQuery = (0, _sortUtils.addSortToDataQuery)({
|
|
93
91
|
dataQuery,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_essentials","_filterUtils","_searchUtils","_sortUtils","_cmsBackup","getReferenceFields","fields","Object","values","filter","f","type","getMultiReferenceFields","updateMultiReferences","collectionId","entityId","entity","multiReferenceFields","Promise","all","map","field","rawValue","id","Array","isArray","referenceIds","value","_id","items","replaceReferences","createCmsBackend","allReferenceFieldIds","get","dataQuery","query","eq","length","include","res","find","returnTotalCount","Error","create","created","insert","createdId","update","delete","remove","bulkDelete","entityIds","bulkRemove","options","searchableFieldIds","filterFieldMapping","addSearchToDataQuery","addFiltersToDataQuery","addSortToDataQuery","includeFieldIds","includes","offset","skip","limit","total","totalCount","hasNext","bulkInsert","entities","errorHandler","withErrorHandler","inserted","updated","errors","succeeded","failed","e","rowIndex","originalIndex","message","code","backup","createCmsBackupConfig"],"sources":["../../../src/adapter/createCmsBackend.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport { errorHandler } from '@wix/essentials';\nimport type {\n BulkInsertResult,\n CollectionBackend,\n Field,\n OffsetQuery,\n OffsetQueryResult,\n Schema,\n} from '@wix/bex-core';\nimport { addFiltersToDataQuery } from './filterUtils';\nimport { addSearchToDataQuery } from './searchUtils';\nimport { addSortToDataQuery } from './sortUtils';\nimport { createCmsBackupConfig } from './cmsBackup';\n\ntype SchemaFields = Schema['fields'];\n\nconst getReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'REFERENCE' || f?.type === 'MULTI_REFERENCE',\n );\n\nconst getMultiReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'MULTI_REFERENCE',\n );\n\n/** MULTI_REFERENCE values aren't stored inline — sync them via the reference endpoint. */\nconst updateMultiReferences = async (\n collectionId: string,\n entityId: string,\n entity: Record<string, unknown>,\n multiReferenceFields: Field[],\n) => {\n await Promise.all(\n multiReferenceFields.map(async (field) => {\n const rawValue = entity[field.id];\n if (!Array.isArray(rawValue)) {\n return;\n }\n const referenceIds = (rawValue as Record<string, unknown>[]).map(\n (value) => value._id as string,\n );\n\n await items.replaceReferences(\n collectionId,\n field.id,\n entityId,\n referenceIds,\n );\n }),\n );\n};\n\n/**\n * Builds the `CollectionBackend` for a CMS collection over `@wix/data`. Reference\n * fields are expanded via `.include(...)` on `get`/`find`.\n */\nexport function createCmsBackend<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(collectionId: string, fields: SchemaFields): CollectionBackend<T> {\n const multiReferenceFields = getMultiReferenceFields(fields);\n const allReferenceFieldIds = getReferenceFields(fields).map((f) => f.id);\n\n return {\n get: async (entityId: string): Promise<T> => {\n let dataQuery = items.query(collectionId).eq('_id', entityId);\n if (allReferenceFieldIds.length > 0) {\n dataQuery = dataQuery.include(...allReferenceFieldIds);\n }\n const res = await dataQuery.find({ returnTotalCount: false });\n const entity = res.items[0];\n if (!entity) {\n throw new Error(`Entity not found: ${entityId}`);\n }\n return entity as unknown as T;\n },\n\n create: async (entity: Partial<T>): Promise<T> => {\n const created = (await items.insert(\n collectionId,\n entity as Record<string, unknown>,\n )) as Record<string, unknown>;\n const createdId = created._id as string;\n if (createdId) {\n await updateMultiReferences(\n collectionId,\n createdId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return { ...entity, _id: createdId } as unknown as T;\n },\n\n update: async (entity: T): Promise<T> => {\n await items.update(\n collectionId,\n entity as Record<string, unknown> & { _id: string },\n );\n const entityId = (entity as Record<string, unknown>)._id as string;\n if (entityId) {\n await updateMultiReferences(\n collectionId,\n entityId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return entity;\n },\n\n delete: async (entityId: string): Promise<void> => {\n await items.remove(collectionId, entityId);\n },\n\n bulkDelete: async (entityIds: string[]): Promise<void> => {\n await items.bulkRemove(collectionId, entityIds);\n },\n\n find: async (\n query: OffsetQuery,\n options: {\n searchableFieldIds?: string[];\n filterFieldMapping?: Record<string, { fieldId: string }>;\n } = {},\n ): Promise<OffsetQueryResult<T>> => {\n // Without options, search and reference-includes are skipped (matches\n // auto-patterns). The options arg is not on the `CollectionBackend.find`\n // contract type — how a consumer supplies it is still open.\n const searchableFieldIds: string[] = options.searchableFieldIds ?? [];\n const filterFieldMapping: Record<string, { fieldId: string }> =\n options.filterFieldMapping ?? {};\n\n let dataQuery = items.query(collectionId);\n dataQuery = addSearchToDataQuery({\n dataQuery,\n query,\n fields,\n searchableFieldIds,\n });\n dataQuery = addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n filterFieldMapping,\n });\n dataQuery = addSortToDataQuery({ dataQuery, query, fields });\n\n const includeFieldIds = allReferenceFieldIds.filter((id) =>\n searchableFieldIds.includes(id),\n );\n if (includeFieldIds.length > 0) {\n dataQuery = dataQuery.include(...includeFieldIds);\n }\n\n const offset = query.offset ?? 0;\n const res = await dataQuery\n .skip(offset)\n .limit(query.limit)\n .find({ returnTotalCount: true });\n\n const total = res.totalCount ?? 0;\n return {\n items: res.items as unknown as T[],\n total,\n hasNext: offset + res.items.length < total,\n };\n },\n\n bulkInsert: (entities: Partial<T>[]): Promise<BulkInsertResult> =>\n errorHandler.withErrorHandler(async () => {\n const { inserted, updated, errors } = await items.bulkInsert(\n collectionId,\n entities as Record<string, unknown>[],\n );\n return {\n succeeded: inserted + updated,\n failed: errors.length,\n errors: errors.map((e) => ({\n rowIndex: e.originalIndex,\n message: e.message,\n code: e.code,\n })),\n };\n }, {}),\n\n backup: createCmsBackupConfig(),\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_essentials","_filterUtils","_searchUtils","_sortUtils","_cmsBackup","getReferenceFields","fields","Object","values","filter","f","type","getMultiReferenceFields","updateMultiReferences","collectionId","entityId","entity","multiReferenceFields","Promise","all","map","field","rawValue","id","Array","isArray","referenceIds","value","_id","items","replaceReferences","createCmsBackend","allReferenceFieldIds","get","dataQuery","query","eq","length","include","res","find","returnTotalCount","Error","create","created","insert","createdId","update","delete","remove","bulkDelete","entityIds","bulkRemove","options","searchableFieldIds","addSearchToDataQuery","addFiltersToDataQuery","addSortToDataQuery","includeFieldIds","includes","offset","skip","limit","total","totalCount","hasNext","bulkInsert","entities","errorHandler","withErrorHandler","inserted","updated","errors","succeeded","failed","e","rowIndex","originalIndex","message","code","backup","createCmsBackupConfig"],"sources":["../../../src/adapter/createCmsBackend.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport { errorHandler } from '@wix/essentials';\nimport type {\n BulkInsertResult,\n CollectionBackend,\n Field,\n OffsetQuery,\n OffsetQueryResult,\n Schema,\n} from '@wix/bex-core';\nimport { addFiltersToDataQuery } from './filterUtils';\nimport { addSearchToDataQuery } from './searchUtils';\nimport { addSortToDataQuery } from './sortUtils';\nimport { createCmsBackupConfig } from './cmsBackup';\n\ntype SchemaFields = Schema['fields'];\n\nconst getReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'REFERENCE' || f?.type === 'MULTI_REFERENCE',\n );\n\nconst getMultiReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'MULTI_REFERENCE',\n );\n\n/** MULTI_REFERENCE values aren't stored inline — sync them via the reference endpoint. */\nconst updateMultiReferences = async (\n collectionId: string,\n entityId: string,\n entity: Record<string, unknown>,\n multiReferenceFields: Field[],\n) => {\n await Promise.all(\n multiReferenceFields.map(async (field) => {\n const rawValue = entity[field.id];\n if (!Array.isArray(rawValue)) {\n return;\n }\n const referenceIds = (rawValue as Record<string, unknown>[]).map(\n (value) => value._id as string,\n );\n\n await items.replaceReferences(\n collectionId,\n field.id,\n entityId,\n referenceIds,\n );\n }),\n );\n};\n\n/**\n * Builds the `CollectionBackend` for a CMS collection over `@wix/data`. Reference\n * fields are expanded via `.include(...)` on `get`/`find`.\n */\nexport function createCmsBackend<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(collectionId: string, fields: SchemaFields): CollectionBackend<T> {\n const multiReferenceFields = getMultiReferenceFields(fields);\n const allReferenceFieldIds = getReferenceFields(fields).map((f) => f.id);\n\n return {\n get: async (entityId: string): Promise<T> => {\n let dataQuery = items.query(collectionId).eq('_id', entityId);\n if (allReferenceFieldIds.length > 0) {\n dataQuery = dataQuery.include(...allReferenceFieldIds);\n }\n const res = await dataQuery.find({ returnTotalCount: false });\n const entity = res.items[0];\n if (!entity) {\n throw new Error(`Entity not found: ${entityId}`);\n }\n return entity as unknown as T;\n },\n\n create: async (entity: Partial<T>): Promise<T> => {\n const created = (await items.insert(\n collectionId,\n entity as Record<string, unknown>,\n )) as Record<string, unknown>;\n const createdId = created._id as string;\n if (createdId) {\n await updateMultiReferences(\n collectionId,\n createdId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return { ...entity, _id: createdId } as unknown as T;\n },\n\n update: async (entity: T): Promise<T> => {\n await items.update(\n collectionId,\n entity as Record<string, unknown> & { _id: string },\n );\n const entityId = (entity as Record<string, unknown>)._id as string;\n if (entityId) {\n await updateMultiReferences(\n collectionId,\n entityId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return entity;\n },\n\n delete: async (entityId: string): Promise<void> => {\n await items.remove(collectionId, entityId);\n },\n\n bulkDelete: async (entityIds: string[]): Promise<void> => {\n await items.bulkRemove(collectionId, entityIds);\n },\n\n find: async (\n query: OffsetQuery,\n options: {\n searchableFieldIds?: string[];\n } = {},\n ): Promise<OffsetQueryResult<T>> => {\n // Without options, search and reference-includes are skipped (matches\n // auto-patterns). The options arg is not on the `CollectionBackend.find`\n // contract type — how a consumer supplies it is still open.\n const searchableFieldIds: string[] = options.searchableFieldIds ?? [];\n\n let dataQuery = items.query(collectionId);\n dataQuery = addSearchToDataQuery({\n dataQuery,\n query,\n fields,\n searchableFieldIds,\n });\n dataQuery = addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n });\n dataQuery = addSortToDataQuery({ dataQuery, query, fields });\n\n const includeFieldIds = allReferenceFieldIds.filter((id) =>\n searchableFieldIds.includes(id),\n );\n if (includeFieldIds.length > 0) {\n dataQuery = dataQuery.include(...includeFieldIds);\n }\n\n const offset = query.offset ?? 0;\n const res = await dataQuery\n .skip(offset)\n .limit(query.limit)\n .find({ returnTotalCount: true });\n\n const total = res.totalCount ?? 0;\n return {\n items: res.items as unknown as T[],\n total,\n hasNext: offset + res.items.length < total,\n };\n },\n\n bulkInsert: (entities: Partial<T>[]): Promise<BulkInsertResult> =>\n errorHandler.withErrorHandler(async () => {\n const { inserted, updated, errors } = await items.bulkInsert(\n collectionId,\n entities as Record<string, unknown>[],\n );\n return {\n succeeded: inserted + updated,\n failed: errors.length,\n errors: errors.map((e) => ({\n rowIndex: e.originalIndex,\n message: e.message,\n code: e.code,\n })),\n };\n }, {}),\n\n backup: createCmsBackupConfig(),\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ exports.__esModule = true;
|
|
|
4
4
|
exports.createCmsFieldActions = createCmsFieldActions;
|
|
5
5
|
var _data = require("@wix/data");
|
|
6
6
|
var _cmsFieldTypeMap = require("./cmsFieldTypeMap");
|
|
7
|
+
var _transformCmsSchema = require("./transformCmsSchema");
|
|
7
8
|
var _getFieldKey = require("./getFieldKey");
|
|
8
9
|
var _pollUntilReady = require("./pollUntilReady");
|
|
9
10
|
const COPY_TASK_POLL_INTERVAL_MS = 1000;
|
|
@@ -45,6 +46,11 @@ function createCmsFieldActions(collectionId, getCollection) {
|
|
|
45
46
|
var _getCollection2;
|
|
46
47
|
return (_getCollection2 = getCollection()) == null || (_getCollection2 = _getCollection2.fields) == null ? void 0 : _getCollection2.find(f => f.key === fieldKey);
|
|
47
48
|
};
|
|
49
|
+
|
|
50
|
+
// A field mutation returns the updated collection; turn it into the new fields
|
|
51
|
+
// map. The SDK guarantees `dataCollection` on a successful mutation, so there is
|
|
52
|
+
// no missing-collection case to handle here.
|
|
53
|
+
const fieldsAfterMutation = dataCollection => (0, _transformCmsSchema.transformCmsSchema)(dataCollection).fields;
|
|
48
54
|
const buildFieldPatch = (fieldId, updates) => {
|
|
49
55
|
var _findCmsField, _updates$validation, _updates$validation2, _updates$validation3;
|
|
50
56
|
const sourceCmsType = (_findCmsField = findCmsField(fieldId)) == null ? void 0 : _findCmsField.type;
|
|
@@ -124,17 +130,26 @@ function createCmsFieldActions(collectionId, getCollection) {
|
|
|
124
130
|
if (field.type === 'SHORT_TEXT' && (_field$validation3 = field.validation) != null && _field$validation3.stringLengthRange) {
|
|
125
131
|
cmsField.stringLengthRange = field.validation.stringLengthRange;
|
|
126
132
|
}
|
|
127
|
-
|
|
133
|
+
const {
|
|
134
|
+
dataCollection
|
|
135
|
+
} = await _data.collections.createDataCollectionField(collectionId, {
|
|
128
136
|
field: cmsField
|
|
129
137
|
});
|
|
138
|
+
return fieldsAfterMutation(dataCollection);
|
|
130
139
|
},
|
|
131
140
|
editField: async (fieldId, updates) => {
|
|
132
|
-
|
|
141
|
+
const {
|
|
142
|
+
dataCollection
|
|
143
|
+
} = await _data.collections.patchDataCollectionField(collectionId, buildFieldPatch(fieldId, updates));
|
|
144
|
+
return fieldsAfterMutation(dataCollection);
|
|
133
145
|
},
|
|
134
146
|
deleteField: async fieldId => {
|
|
135
|
-
|
|
147
|
+
const {
|
|
148
|
+
dataCollection
|
|
149
|
+
} = await _data.collections.deleteDataCollectionField(collectionId, {
|
|
136
150
|
fieldKey: fieldId
|
|
137
151
|
});
|
|
152
|
+
return fieldsAfterMutation(dataCollection);
|
|
138
153
|
},
|
|
139
154
|
renameField: async (fieldId, newName) => {
|
|
140
155
|
await _data.collections.patchDataCollectionField(collectionId, buildFieldPatch(fieldId, {
|
|
@@ -142,9 +157,12 @@ function createCmsFieldActions(collectionId, getCollection) {
|
|
|
142
157
|
}));
|
|
143
158
|
},
|
|
144
159
|
makePrimary: async fieldId => {
|
|
145
|
-
|
|
160
|
+
const {
|
|
161
|
+
dataCollection
|
|
162
|
+
} = await _data.collections.patchDataCollection(collectionId, {
|
|
146
163
|
displayField: fieldId
|
|
147
164
|
});
|
|
165
|
+
return fieldsAfterMutation(dataCollection);
|
|
148
166
|
},
|
|
149
167
|
duplicateField: async fieldId => {
|
|
150
168
|
const sourceField = findCmsField(fieldId);
|
|
@@ -153,9 +171,12 @@ function createCmsFieldActions(collectionId, getCollection) {
|
|
|
153
171
|
}
|
|
154
172
|
const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;
|
|
155
173
|
const newKey = (0, _getFieldKey.getFieldKey)(existingFieldKeys(), newDisplayName);
|
|
156
|
-
|
|
174
|
+
const {
|
|
175
|
+
dataCollection
|
|
176
|
+
} = await _data.collections.createDataCollectionField(collectionId, {
|
|
157
177
|
field: cloneFieldDefinition(sourceField, newKey, newDisplayName)
|
|
158
178
|
});
|
|
179
|
+
return fieldsAfterMutation(dataCollection);
|
|
159
180
|
},
|
|
160
181
|
duplicateFieldWithContent: async fieldId => {
|
|
161
182
|
const sourceField = findCmsField(fieldId);
|
|
@@ -164,7 +185,9 @@ function createCmsFieldActions(collectionId, getCollection) {
|
|
|
164
185
|
}
|
|
165
186
|
const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;
|
|
166
187
|
const newKey = (0, _getFieldKey.getFieldKey)(existingFieldKeys(), newDisplayName);
|
|
167
|
-
|
|
188
|
+
const {
|
|
189
|
+
dataCollection
|
|
190
|
+
} = await _data.collections.createDataCollectionField(collectionId, {
|
|
168
191
|
field: cloneFieldDefinition(sourceField, newKey, newDisplayName)
|
|
169
192
|
});
|
|
170
193
|
const createdTask = await _data.tasks.createTask({
|
|
@@ -176,6 +199,7 @@ function createCmsFieldActions(collectionId, getCollection) {
|
|
|
176
199
|
}
|
|
177
200
|
});
|
|
178
201
|
await waitForCopyTask(createdTask._id);
|
|
202
|
+
return fieldsAfterMutation(dataCollection);
|
|
179
203
|
}
|
|
180
204
|
};
|
|
181
205
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_cmsFieldTypeMap","_getFieldKey","_pollUntilReady","COPY_TASK_POLL_INTERVAL_MS","COPY_TASK_MAX_ATTEMPTS","waitForCopyTask","taskId","pollUntilReady","task","tasks","getTask","status","_task$failures","failure","failures","Error","code","description","filter","Boolean","join","interval","maxAttempts","err","message","createCmsFieldActions","collectionId","getCollection","existingFieldKeys","_getCollection","fields","flatMap","f","key","findCmsField","fieldKey","_getCollection2","find","buildFieldPatch","fieldId","updates","_findCmsField","_updates$validation","_updates$validation2","_updates$validation3","sourceCmsType","type","patch","displayName","undefined","isPii","encrypted","helpText","validation","required","numberRange","stringLengthRange","cloneFieldDefinition","source","newKey","newDisplayName","_cloned$typeMetadata","systemField","capabilities","rest","cloned","typeMetadata","multiReference","referencingFieldKey","addField","field","_field$validation","_field$validation2","_field$validation3","cmsType","PatternsFieldTypeToCmsFieldType","cmsField","getFieldKey","collections","createDataCollectionField","editField","patchDataCollectionField","deleteField","deleteDataCollectionField","renameField","newName","makePrimary","patchDataCollection","displayField","duplicateField","sourceField","duplicateFieldWithContent","createdTask","createTask","copyFieldDataOptions","dataCollectionId","sourceFieldKey","targetFieldKey","_id"],"sources":["../../../src/adapter/createCmsFieldActions.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field, FieldActions } from '@wix/bex-core';\nimport { PatternsFieldTypeToCmsFieldType } from './cmsFieldTypeMap';\nimport { getFieldKey } from './getFieldKey';\nimport { pollUntilReady } from './pollUntilReady';\n\nconst COPY_TASK_POLL_INTERVAL_MS = 1000;\nconst COPY_TASK_MAX_ATTEMPTS = 300;\n\n/** Polls a COPY_FIELD_DATA task to completion, mapping the generic poll-timeout error. */\nconst waitForCopyTask = async (taskId: string): Promise<void> => {\n try {\n await pollUntilReady(\n async () => {\n const task = await tasks.getTask(taskId);\n if (task.status === 'FAILED') {\n const failure = task.failures?.[0];\n throw new Error(\n [failure?.code, failure?.description].filter(Boolean).join(': ') ||\n 'Copy field data task failed',\n );\n }\n return task.status === 'COMPLETED';\n },\n {\n interval: COPY_TASK_POLL_INTERVAL_MS,\n maxAttempts: COPY_TASK_MAX_ATTEMPTS,\n },\n );\n } catch (err) {\n if (err instanceof Error && err.message === 'Backup polling timed out') {\n throw new Error('Copy field data task timed out');\n }\n throw err;\n }\n};\n\n/**\n * Builds the `FieldActions` for a CMS collection over `@wix/data`. `getCollection`\n * returns the current raw collection snapshot (for existing keys + source field types).\n */\nexport function createCmsFieldActions(\n collectionId: string,\n getCollection: () => collections.DataCollection | null,\n): FieldActions {\n const existingFieldKeys = (): string[] =>\n getCollection()?.fields?.flatMap((f) => (f.key ? [f.key] : [])) ?? [];\n\n const findCmsField = (fieldKey: string): collections.Field | undefined =>\n getCollection()?.fields?.find((f) => f.key === fieldKey);\n\n const buildFieldPatch = (\n fieldId: string,\n updates: Partial<Field>,\n ): collections.Field => {\n const sourceCmsType = findCmsField(fieldId)?.type;\n const patch: collections.Field = { key: fieldId };\n if (updates.displayName !== undefined) {\n patch.displayName = updates.displayName;\n }\n if (updates.isPii !== undefined) {\n patch.encrypted = updates.isPii;\n }\n if (updates.helpText !== undefined) {\n patch.description = updates.helpText;\n }\n if (updates.validation?.required !== undefined) {\n patch.required = updates.validation.required;\n }\n if (updates.validation?.numberRange && sourceCmsType === 'NUMBER') {\n patch.numberRange = updates.validation.numberRange;\n }\n if (updates.validation?.stringLengthRange && sourceCmsType === 'TEXT') {\n patch.stringLengthRange = updates.validation.stringLengthRange;\n }\n return patch;\n };\n\n /**\n * Clones a CMS field for duplication: drops `systemField`/`capabilities` and clears\n * `referencingFieldKey` so the duplicate gets its own backing reference field.\n */\n const cloneFieldDefinition = (\n source: collections.Field,\n newKey: string,\n newDisplayName: string,\n ): collections.Field => {\n const { systemField, capabilities, ...rest } = source;\n const cloned: collections.Field = {\n ...rest,\n key: newKey,\n displayName: newDisplayName,\n };\n if (cloned.typeMetadata?.multiReference?.referencingFieldKey) {\n cloned.typeMetadata = {\n ...cloned.typeMetadata,\n multiReference: {\n ...cloned.typeMetadata.multiReference,\n referencingFieldKey: undefined,\n },\n };\n }\n return cloned;\n };\n\n return {\n addField: async (field: Field) => {\n const cmsType = PatternsFieldTypeToCmsFieldType[field.type];\n if (!cmsType) {\n throw new Error(`Field type ${field.type} not supported yet`);\n }\n\n const cmsField: collections.Field = {\n key: getFieldKey(existingFieldKeys(), field.displayName),\n displayName: field.displayName,\n type: cmsType,\n required: field.validation?.required ?? false,\n };\n\n if (field.isPii) {\n cmsField.encrypted = true;\n }\n if (field.helpText) {\n cmsField.description = field.helpText;\n }\n if (field.type === 'NUMBER' && field.validation?.numberRange) {\n cmsField.numberRange = field.validation.numberRange;\n }\n if (field.type === 'SHORT_TEXT' && field.validation?.stringLengthRange) {\n cmsField.stringLengthRange = field.validation.stringLengthRange;\n }\n\n await collections.createDataCollectionField(collectionId, {\n field: cmsField,\n });\n },\n\n editField: async (fieldId, updates) => {\n await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, updates),\n );\n },\n\n deleteField: async (fieldId) => {\n await collections.deleteDataCollectionField(collectionId, {\n fieldKey: fieldId,\n });\n },\n\n renameField: async (fieldId, newName) => {\n await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, { displayName: newName }),\n );\n },\n\n makePrimary: async (fieldId) => {\n await collections.patchDataCollection(collectionId, {\n displayField: fieldId,\n });\n },\n\n duplicateField: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n await collections.createDataCollectionField(collectionId, {\n field: cloneFieldDefinition(sourceField, newKey, newDisplayName),\n });\n },\n\n duplicateFieldWithContent: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n await collections.createDataCollectionField(collectionId, {\n field: cloneFieldDefinition(sourceField, newKey, newDisplayName),\n });\n const createdTask = await tasks.createTask({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: collectionId,\n sourceFieldKey: fieldId,\n targetFieldKey: newKey,\n },\n });\n await waitForCopyTask(createdTask._id!);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_cmsFieldTypeMap","_transformCmsSchema","_getFieldKey","_pollUntilReady","COPY_TASK_POLL_INTERVAL_MS","COPY_TASK_MAX_ATTEMPTS","waitForCopyTask","taskId","pollUntilReady","task","tasks","getTask","status","_task$failures","failure","failures","Error","code","description","filter","Boolean","join","interval","maxAttempts","err","message","createCmsFieldActions","collectionId","getCollection","existingFieldKeys","_getCollection","fields","flatMap","f","key","findCmsField","fieldKey","_getCollection2","find","fieldsAfterMutation","dataCollection","transformCmsSchema","buildFieldPatch","fieldId","updates","_findCmsField","_updates$validation","_updates$validation2","_updates$validation3","sourceCmsType","type","patch","displayName","undefined","isPii","encrypted","helpText","validation","required","numberRange","stringLengthRange","cloneFieldDefinition","source","newKey","newDisplayName","_cloned$typeMetadata","systemField","capabilities","rest","cloned","typeMetadata","multiReference","referencingFieldKey","addField","field","_field$validation","_field$validation2","_field$validation3","cmsType","PatternsFieldTypeToCmsFieldType","cmsField","getFieldKey","collections","createDataCollectionField","editField","patchDataCollectionField","deleteField","deleteDataCollectionField","renameField","newName","makePrimary","patchDataCollection","displayField","duplicateField","sourceField","duplicateFieldWithContent","createdTask","createTask","copyFieldDataOptions","dataCollectionId","sourceFieldKey","targetFieldKey","_id"],"sources":["../../../src/adapter/createCmsFieldActions.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field, FieldActions, Schema } from '@wix/bex-core';\nimport { PatternsFieldTypeToCmsFieldType } from './cmsFieldTypeMap';\nimport { transformCmsSchema } from './transformCmsSchema';\nimport { getFieldKey } from './getFieldKey';\nimport { pollUntilReady } from './pollUntilReady';\n\nconst COPY_TASK_POLL_INTERVAL_MS = 1000;\nconst COPY_TASK_MAX_ATTEMPTS = 300;\n\n/** Polls a COPY_FIELD_DATA task to completion, mapping the generic poll-timeout error. */\nconst waitForCopyTask = async (taskId: string): Promise<void> => {\n try {\n await pollUntilReady(\n async () => {\n const task = await tasks.getTask(taskId);\n if (task.status === 'FAILED') {\n const failure = task.failures?.[0];\n throw new Error(\n [failure?.code, failure?.description].filter(Boolean).join(': ') ||\n 'Copy field data task failed',\n );\n }\n return task.status === 'COMPLETED';\n },\n {\n interval: COPY_TASK_POLL_INTERVAL_MS,\n maxAttempts: COPY_TASK_MAX_ATTEMPTS,\n },\n );\n } catch (err) {\n if (err instanceof Error && err.message === 'Backup polling timed out') {\n throw new Error('Copy field data task timed out');\n }\n throw err;\n }\n};\n\n/**\n * Builds the `FieldActions` for a CMS collection over `@wix/data`. `getCollection`\n * returns the current raw collection snapshot (for existing keys + source field types).\n */\nexport function createCmsFieldActions(\n collectionId: string,\n getCollection: () => collections.DataCollection | null,\n): FieldActions {\n const existingFieldKeys = (): string[] =>\n getCollection()?.fields?.flatMap((f) => (f.key ? [f.key] : [])) ?? [];\n\n const findCmsField = (fieldKey: string): collections.Field | undefined =>\n getCollection()?.fields?.find((f) => f.key === fieldKey);\n\n // A field mutation returns the updated collection; turn it into the new fields\n // map. The SDK guarantees `dataCollection` on a successful mutation, so there is\n // no missing-collection case to handle here.\n const fieldsAfterMutation = (\n dataCollection: collections.DataCollection,\n ): Schema['fields'] => transformCmsSchema(dataCollection).fields;\n\n const buildFieldPatch = (\n fieldId: string,\n updates: Partial<Field>,\n ): collections.Field => {\n const sourceCmsType = findCmsField(fieldId)?.type;\n const patch: collections.Field = { key: fieldId };\n if (updates.displayName !== undefined) {\n patch.displayName = updates.displayName;\n }\n if (updates.isPii !== undefined) {\n patch.encrypted = updates.isPii;\n }\n if (updates.helpText !== undefined) {\n patch.description = updates.helpText;\n }\n if (updates.validation?.required !== undefined) {\n patch.required = updates.validation.required;\n }\n if (updates.validation?.numberRange && sourceCmsType === 'NUMBER') {\n patch.numberRange = updates.validation.numberRange;\n }\n if (updates.validation?.stringLengthRange && sourceCmsType === 'TEXT') {\n patch.stringLengthRange = updates.validation.stringLengthRange;\n }\n return patch;\n };\n\n /**\n * Clones a CMS field for duplication: drops `systemField`/`capabilities` and clears\n * `referencingFieldKey` so the duplicate gets its own backing reference field.\n */\n const cloneFieldDefinition = (\n source: collections.Field,\n newKey: string,\n newDisplayName: string,\n ): collections.Field => {\n const { systemField, capabilities, ...rest } = source;\n const cloned: collections.Field = {\n ...rest,\n key: newKey,\n displayName: newDisplayName,\n };\n if (cloned.typeMetadata?.multiReference?.referencingFieldKey) {\n cloned.typeMetadata = {\n ...cloned.typeMetadata,\n multiReference: {\n ...cloned.typeMetadata.multiReference,\n referencingFieldKey: undefined,\n },\n };\n }\n return cloned;\n };\n\n return {\n addField: async (field: Field) => {\n const cmsType = PatternsFieldTypeToCmsFieldType[field.type];\n if (!cmsType) {\n throw new Error(`Field type ${field.type} not supported yet`);\n }\n\n const cmsField: collections.Field = {\n key: getFieldKey(existingFieldKeys(), field.displayName),\n displayName: field.displayName,\n type: cmsType,\n required: field.validation?.required ?? false,\n };\n\n if (field.isPii) {\n cmsField.encrypted = true;\n }\n if (field.helpText) {\n cmsField.description = field.helpText;\n }\n if (field.type === 'NUMBER' && field.validation?.numberRange) {\n cmsField.numberRange = field.validation.numberRange;\n }\n if (field.type === 'SHORT_TEXT' && field.validation?.stringLengthRange) {\n cmsField.stringLengthRange = field.validation.stringLengthRange;\n }\n\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cmsField },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n editField: async (fieldId, updates) => {\n const { dataCollection } = await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, updates),\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n deleteField: async (fieldId) => {\n const { dataCollection } = await collections.deleteDataCollectionField(\n collectionId,\n { fieldKey: fieldId },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n renameField: async (fieldId, newName) => {\n await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, { displayName: newName }),\n );\n },\n\n makePrimary: async (fieldId) => {\n const { dataCollection } = await collections.patchDataCollection(\n collectionId,\n { displayField: fieldId },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n duplicateField: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cloneFieldDefinition(sourceField, newKey, newDisplayName) },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n duplicateFieldWithContent: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cloneFieldDefinition(sourceField, newKey, newDisplayName) },\n );\n const createdTask = await tasks.createTask({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: collectionId,\n sourceFieldKey: fieldId,\n targetFieldKey: newKey,\n },\n });\n await waitForCopyTask(createdTask._id!);\n return fieldsAfterMutation(dataCollection!);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.createCmsSchemaSource = createCmsSchemaSource;
|
|
5
|
+
var _bexCore = require("@wix/bex-core");
|
|
6
|
+
var _loadCmsSchema = require("./loadCmsSchema");
|
|
7
|
+
// The field types the add/edit modal offers, in display order. These are the
|
|
8
|
+
// only types @wix/data can create (see PatternsFieldTypeToCmsFieldType).
|
|
9
|
+
const CMS_CREATABLE_TYPES = [{
|
|
10
|
+
patternsType: 'SHORT_TEXT',
|
|
11
|
+
labelKey: 'cairo.customFields.fieldType.shortText',
|
|
12
|
+
namePlaceholderKey: 'cairo.customFields.fieldType.shortText.Name.placeholder'
|
|
13
|
+
}, {
|
|
14
|
+
patternsType: 'NUMBER',
|
|
15
|
+
labelKey: 'cairo.customFields.fieldType.numberInteger',
|
|
16
|
+
namePlaceholderKey: 'cairo.customFields.fieldType.numberInteger.Name.placeholder'
|
|
17
|
+
}, {
|
|
18
|
+
patternsType: 'BOOLEAN',
|
|
19
|
+
labelKey: 'cairo.customFields.fieldType.checkbox',
|
|
20
|
+
namePlaceholderKey: 'cairo.customFields.fieldType.checkbox.Name.placeholder'
|
|
21
|
+
}, {
|
|
22
|
+
patternsType: 'DATE',
|
|
23
|
+
labelKey: 'cairo.customFields.fieldType.date',
|
|
24
|
+
namePlaceholderKey: 'cairo.customFields.fieldType.date.Name.placeholder'
|
|
25
|
+
}];
|
|
26
|
+
/**
|
|
27
|
+
* Builds a ready-to-use `SchemaSource` for a CMS collection: wraps the CMS
|
|
28
|
+
* schema loader and supplies the CMS field types. Pass it to `<Table>` and spread
|
|
29
|
+
* its `collectionConfig` into the collection hook.
|
|
30
|
+
*/
|
|
31
|
+
function createCmsSchemaSource(deps) {
|
|
32
|
+
const {
|
|
33
|
+
collectionId,
|
|
34
|
+
...loaderDeps
|
|
35
|
+
} = deps;
|
|
36
|
+
const loader = (0, _loadCmsSchema.createCmsSchemaLoader)(loaderDeps);
|
|
37
|
+
return (0, _bexCore.defineSchemaSource)({
|
|
38
|
+
collectionId,
|
|
39
|
+
loadSchema: () => loader(collectionId),
|
|
40
|
+
creatableFieldTypes: CMS_CREATABLE_TYPES
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=createCmsSchemaSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_bexCore","require","_loadCmsSchema","CMS_CREATABLE_TYPES","patternsType","labelKey","namePlaceholderKey","createCmsSchemaSource","deps","collectionId","loaderDeps","loader","createCmsSchemaLoader","defineSchemaSource","loadSchema","creatableFieldTypes"],"sources":["../../../src/adapter/createCmsSchemaSource.ts"],"sourcesContent":["import { defineSchemaSource } from '@wix/bex-core';\nimport type { CreatableFieldType, SchemaSource } from '@wix/bex-core';\nimport {\n createCmsSchemaLoader,\n type CreateCmsSchemaLoaderDeps,\n} from './loadCmsSchema';\n\n// The field types the add/edit modal offers, in display order. These are the\n// only types @wix/data can create (see PatternsFieldTypeToCmsFieldType).\nconst CMS_CREATABLE_TYPES: CreatableFieldType[] = [\n {\n patternsType: 'SHORT_TEXT',\n labelKey: 'cairo.customFields.fieldType.shortText',\n namePlaceholderKey:\n 'cairo.customFields.fieldType.shortText.Name.placeholder',\n },\n {\n patternsType: 'NUMBER',\n labelKey: 'cairo.customFields.fieldType.numberInteger',\n namePlaceholderKey:\n 'cairo.customFields.fieldType.numberInteger.Name.placeholder',\n },\n {\n patternsType: 'BOOLEAN',\n labelKey: 'cairo.customFields.fieldType.checkbox',\n namePlaceholderKey:\n 'cairo.customFields.fieldType.checkbox.Name.placeholder',\n },\n {\n patternsType: 'DATE',\n labelKey: 'cairo.customFields.fieldType.date',\n namePlaceholderKey: 'cairo.customFields.fieldType.date.Name.placeholder',\n },\n];\n\nexport interface CreateCmsSchemaSourceDeps extends CreateCmsSchemaLoaderDeps {\n collectionId: string;\n}\n\n/**\n * Builds a ready-to-use `SchemaSource` for a CMS collection: wraps the CMS\n * schema loader and supplies the CMS field types. Pass it to `<Table>` and spread\n * its `collectionConfig` into the collection hook.\n */\nexport function createCmsSchemaSource<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(deps: CreateCmsSchemaSourceDeps): SchemaSource<T> {\n const { collectionId, ...loaderDeps } = deps;\n const loader = createCmsSchemaLoader<T>(loaderDeps);\n return defineSchemaSource<T>({\n collectionId,\n loadSchema: () => loader(collectionId),\n creatableFieldTypes: CMS_CREATABLE_TYPES,\n });\n}\n"],"mappings":";;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AAKA;AACA;AACA,MAAME,mBAAyC,GAAG,CAChD;EACEC,YAAY,EAAE,YAAY;EAC1BC,QAAQ,EAAE,wCAAwC;EAClDC,kBAAkB,EAChB;AACJ,CAAC,EACD;EACEF,YAAY,EAAE,QAAQ;EACtBC,QAAQ,EAAE,4CAA4C;EACtDC,kBAAkB,EAChB;AACJ,CAAC,EACD;EACEF,YAAY,EAAE,SAAS;EACvBC,QAAQ,EAAE,uCAAuC;EACjDC,kBAAkB,EAChB;AACJ,CAAC,EACD;EACEF,YAAY,EAAE,MAAM;EACpBC,QAAQ,EAAE,mCAAmC;EAC7CC,kBAAkB,EAAE;AACtB,CAAC,CACF;AAMD;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAEnCC,IAA+B,EAAmB;EAClD,MAAM;IAAEC,YAAY;IAAE,GAAGC;EAAW,CAAC,GAAGF,IAAI;EAC5C,MAAMG,MAAM,GAAG,IAAAC,oCAAqB,EAAIF,UAAU,CAAC;EACnD,OAAO,IAAAG,2BAAkB,EAAI;IAC3BJ,YAAY;IACZK,UAAU,EAAEA,CAAA,KAAMH,MAAM,CAACF,YAAY,CAAC;IACtCM,mBAAmB,EAAEZ;EACvB,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -49,23 +49,19 @@ const getQueryFieldId = (fieldId, fieldType, operator) => {
|
|
|
49
49
|
function addFiltersToDataQuery({
|
|
50
50
|
dataQuery,
|
|
51
51
|
query,
|
|
52
|
-
fields
|
|
53
|
-
filterFieldMapping
|
|
52
|
+
fields
|
|
54
53
|
}) {
|
|
55
|
-
if (!filterFieldMapping) {
|
|
56
|
-
return dataQuery;
|
|
57
|
-
}
|
|
58
54
|
let dataQueryWithFilters = dataQuery;
|
|
59
55
|
const {
|
|
60
56
|
filters
|
|
61
57
|
} = query;
|
|
62
|
-
for (const
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
for (const fieldId in filters) {
|
|
59
|
+
// Skip filters for keys that aren't fields in the loaded schema (stale URL
|
|
60
|
+
// state, a deleted field) — otherwise the query hits an unknown field.
|
|
61
|
+
if (!fields[fieldId]) {
|
|
65
62
|
continue;
|
|
66
63
|
}
|
|
67
|
-
const
|
|
68
|
-
const filter = filters[fieldKey];
|
|
64
|
+
const filter = filters[fieldId];
|
|
69
65
|
if (!filter) {
|
|
70
66
|
continue;
|
|
71
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_bexCore","_constants","FilterPropToMethod","from","to","FilterOperator","CONTAINS","IS_EMPTY","EXISTS","isValidFilterProp","prop","getOperatorForFilter","undefined","isSupportedOperator","fields","filterProp","filterKey","_field$capabilities","field","operator","FilterPropToOperator","supportedOperators","capabilities","supportedQueryOperators","includes","getQueryFieldId","fieldId","fieldType","isAddressField","isExistenceOperator","addFiltersToDataQuery","dataQuery","query","filterFieldMapping","dataQueryWithFilters","filters","fieldKey","mapping","filter","Array","isArray","_fields$fieldId","_fields$fieldId2","filterArray","type","some","item","id","BooleanFilters","checked","eq","falseFilter","items","undefinedFilter","and","or","HAS_VALUE_FILTER_TYPES","wantsHasValue","HasValueFilters","hasValue","wantsNoValue","noValue","isNotEmpty","isEmpty","hasSome","map","operatorFilter","_fields$fieldId3","queryFieldId","NOT_CONTAINS","containsFilter","contains","value","not","filterObj"],"sources":["../../../src/adapter/filterUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\n// FilterOperator is a real runtime enum exported from @wix/bex-core (not cairo).\nimport { FilterOperator } from '@wix/bex-core';\nimport type { OffsetQuery, Schema } from '@wix/bex-core';\nimport {\n BooleanFilters,\n FilterProp,\n FilterPropToOperator,\n HasValueFilters,\n HAS_VALUE_FILTER_TYPES,\n} from './constants';\n\ntype SchemaFields = Schema['fields'];\n\nexport type CmsOperatorMethod =\n | 'ge'\n | 'le'\n | 'contains'\n | 'isEmpty'\n | 'isNotEmpty';\n\nconst FilterPropToMethod: Partial<\n Record<FilterProp | FilterOperator, CmsOperatorMethod>\n> = {\n from: 'ge',\n to: 'le',\n [FilterOperator.CONTAINS]: 'contains',\n [FilterOperator.IS_EMPTY]: 'isEmpty',\n [FilterOperator.EXISTS]: 'isNotEmpty',\n};\n\nfunction isValidFilterProp(prop: string): prop is FilterProp {\n return prop in FilterPropToMethod;\n}\n\nfunction getOperatorForFilter(prop: string): CmsOperatorMethod | undefined {\n if (isValidFilterProp(prop)) {\n return FilterPropToMethod[prop];\n }\n return undefined;\n}\n\nconst isSupportedOperator = (\n fields: SchemaFields,\n filterProp: string,\n filterKey: string,\n) => {\n const field = fields[filterKey];\n if (!field) {\n return false;\n }\n\n if (!isValidFilterProp(filterProp)) {\n return false;\n }\n\n const operator = FilterPropToOperator[filterProp];\n const supportedOperators = field.capabilities?.supportedQueryOperators;\n return supportedOperators?.includes(operator);\n};\n\n/**\n * ADDRESS text operators query the `.formatted` nested property; existence operators\n * (IS_EMPTY/EXISTS) query the field directly.\n */\nconst getQueryFieldId = (\n fieldId: string,\n fieldType: string | undefined,\n operator: FilterOperator,\n): string => {\n const isAddressField = fieldType === 'ADDRESS';\n const isExistenceOperator =\n operator === FilterOperator.IS_EMPTY || operator === FilterOperator.EXISTS;\n\n return isAddressField && !isExistenceOperator\n ? `${fieldId}.formatted`\n : fieldId;\n};\n\nexport function addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n filterFieldMapping,\n}: {\n dataQuery: items.WixDataQuery;\n query: OffsetQuery;\n fields: SchemaFields;\n filterFieldMapping?: Record<string, { fieldId: string }>;\n}) {\n if (!filterFieldMapping) {\n return dataQuery;\n }\n\n let dataQueryWithFilters = dataQuery;\n const { filters } = query;\n for (const fieldKey in filters) {\n const mapping: { fieldId: string } | undefined =\n filterFieldMapping[fieldKey];\n if (!mapping) {\n continue;\n }\n const fieldId = mapping.fieldId;\n const filter = filters[fieldKey];\n if (!filter) {\n continue;\n }\n\n if (Array.isArray(filter)) {\n const filterArray = filter as { id?: unknown }[];\n if (fields[fieldId]?.type === 'BOOLEAN') {\n if (filterArray.some((item) => item.id === BooleanFilters.checked)) {\n dataQueryWithFilters = dataQueryWithFilters.eq(fieldId, true);\n } else {\n const falseFilter = items.filter().eq(fieldId, false);\n const undefinedFilter = items.filter().eq(fieldId, undefined);\n dataQueryWithFilters = dataQueryWithFilters.and(\n falseFilter.or(undefinedFilter),\n );\n }\n } else if (\n fields[fieldId]?.type &&\n HAS_VALUE_FILTER_TYPES.includes(fields[fieldId]!.type)\n ) {\n const wantsHasValue = filterArray.some(\n (item) => item.id === HasValueFilters.hasValue,\n );\n const wantsNoValue = filterArray.some(\n (item) => item.id === HasValueFilters.noValue,\n );\n // Apply only when exactly one option is selected.\n if (wantsHasValue && !wantsNoValue) {\n dataQueryWithFilters = dataQueryWithFilters.isNotEmpty(fieldId);\n } else if (wantsNoValue && !wantsHasValue) {\n dataQueryWithFilters = dataQueryWithFilters.isEmpty(fieldId);\n }\n } else {\n dataQueryWithFilters = dataQueryWithFilters.hasSome(\n fieldId,\n filterArray.map((item) => item.id) as string[],\n );\n }\n } else if (typeof filter === 'object') {\n const operatorFilter = filter as {\n operator?: FilterOperator;\n value?: unknown;\n };\n if (operatorFilter.operator) {\n const queryFieldId = getQueryFieldId(\n fieldId,\n fields[fieldId]?.type,\n operatorFilter.operator,\n );\n\n if (operatorFilter.operator === FilterOperator.NOT_CONTAINS) {\n const containsFilter = items\n .filter()\n .contains(queryFieldId, operatorFilter.value as string);\n dataQueryWithFilters = dataQueryWithFilters.not(containsFilter);\n } else {\n const operator = getOperatorForFilter(operatorFilter.operator);\n if (operator) {\n if (operator === 'isEmpty' || operator === 'isNotEmpty') {\n dataQueryWithFilters = dataQueryWithFilters[operator](fieldId);\n } else {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n queryFieldId,\n operatorFilter.value as string,\n );\n }\n }\n }\n }\n const filterObj = filter as Record<string, unknown>;\n for (const filterProp in filterObj) {\n const operator = getOperatorForFilter(filterProp);\n if (\n operator &&\n typeof dataQuery[operator] === 'function' &&\n isSupportedOperator(fields, filterProp, fieldId)\n ) {\n const value = filterObj[filterProp];\n if (value !== undefined && value !== null) {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n fieldId,\n value as string,\n );\n }\n }\n }\n }\n }\n\n return dataQueryWithFilters;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_bexCore","_constants","FilterPropToMethod","from","to","FilterOperator","CONTAINS","IS_EMPTY","EXISTS","isValidFilterProp","prop","getOperatorForFilter","undefined","isSupportedOperator","fields","filterProp","filterKey","_field$capabilities","field","operator","FilterPropToOperator","supportedOperators","capabilities","supportedQueryOperators","includes","getQueryFieldId","fieldId","fieldType","isAddressField","isExistenceOperator","addFiltersToDataQuery","dataQuery","query","dataQueryWithFilters","filters","filter","Array","isArray","_fields$fieldId","_fields$fieldId2","filterArray","type","some","item","id","BooleanFilters","checked","eq","falseFilter","items","undefinedFilter","and","or","HAS_VALUE_FILTER_TYPES","wantsHasValue","HasValueFilters","hasValue","wantsNoValue","noValue","isNotEmpty","isEmpty","hasSome","map","operatorFilter","_fields$fieldId3","queryFieldId","NOT_CONTAINS","containsFilter","contains","value","not","filterObj"],"sources":["../../../src/adapter/filterUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\n// FilterOperator is a real runtime enum exported from @wix/bex-core (not cairo).\nimport { FilterOperator } from '@wix/bex-core';\nimport type { OffsetQuery, Schema } from '@wix/bex-core';\nimport {\n BooleanFilters,\n FilterProp,\n FilterPropToOperator,\n HasValueFilters,\n HAS_VALUE_FILTER_TYPES,\n} from './constants';\n\ntype SchemaFields = Schema['fields'];\n\nexport type CmsOperatorMethod =\n | 'ge'\n | 'le'\n | 'contains'\n | 'isEmpty'\n | 'isNotEmpty';\n\nconst FilterPropToMethod: Partial<\n Record<FilterProp | FilterOperator, CmsOperatorMethod>\n> = {\n from: 'ge',\n to: 'le',\n [FilterOperator.CONTAINS]: 'contains',\n [FilterOperator.IS_EMPTY]: 'isEmpty',\n [FilterOperator.EXISTS]: 'isNotEmpty',\n};\n\nfunction isValidFilterProp(prop: string): prop is FilterProp {\n return prop in FilterPropToMethod;\n}\n\nfunction getOperatorForFilter(prop: string): CmsOperatorMethod | undefined {\n if (isValidFilterProp(prop)) {\n return FilterPropToMethod[prop];\n }\n return undefined;\n}\n\nconst isSupportedOperator = (\n fields: SchemaFields,\n filterProp: string,\n filterKey: string,\n) => {\n const field = fields[filterKey];\n if (!field) {\n return false;\n }\n\n if (!isValidFilterProp(filterProp)) {\n return false;\n }\n\n const operator = FilterPropToOperator[filterProp];\n const supportedOperators = field.capabilities?.supportedQueryOperators;\n return supportedOperators?.includes(operator);\n};\n\n/**\n * ADDRESS text operators query the `.formatted` nested property; existence operators\n * (IS_EMPTY/EXISTS) query the field directly.\n */\nconst getQueryFieldId = (\n fieldId: string,\n fieldType: string | undefined,\n operator: FilterOperator,\n): string => {\n const isAddressField = fieldType === 'ADDRESS';\n const isExistenceOperator =\n operator === FilterOperator.IS_EMPTY || operator === FilterOperator.EXISTS;\n\n return isAddressField && !isExistenceOperator\n ? `${fieldId}.formatted`\n : fieldId;\n};\n\nexport function addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n}: {\n dataQuery: items.WixDataQuery;\n query: OffsetQuery;\n fields: SchemaFields;\n}) {\n let dataQueryWithFilters = dataQuery;\n const { filters } = query;\n for (const fieldId in filters) {\n // Skip filters for keys that aren't fields in the loaded schema (stale URL\n // state, a deleted field) — otherwise the query hits an unknown field.\n if (!fields[fieldId]) {\n continue;\n }\n const filter = filters[fieldId];\n if (!filter) {\n continue;\n }\n\n if (Array.isArray(filter)) {\n const filterArray = filter as { id?: unknown }[];\n if (fields[fieldId]?.type === 'BOOLEAN') {\n if (filterArray.some((item) => item.id === BooleanFilters.checked)) {\n dataQueryWithFilters = dataQueryWithFilters.eq(fieldId, true);\n } else {\n const falseFilter = items.filter().eq(fieldId, false);\n const undefinedFilter = items.filter().eq(fieldId, undefined);\n dataQueryWithFilters = dataQueryWithFilters.and(\n falseFilter.or(undefinedFilter),\n );\n }\n } else if (\n fields[fieldId]?.type &&\n HAS_VALUE_FILTER_TYPES.includes(fields[fieldId]!.type)\n ) {\n const wantsHasValue = filterArray.some(\n (item) => item.id === HasValueFilters.hasValue,\n );\n const wantsNoValue = filterArray.some(\n (item) => item.id === HasValueFilters.noValue,\n );\n // Apply only when exactly one option is selected.\n if (wantsHasValue && !wantsNoValue) {\n dataQueryWithFilters = dataQueryWithFilters.isNotEmpty(fieldId);\n } else if (wantsNoValue && !wantsHasValue) {\n dataQueryWithFilters = dataQueryWithFilters.isEmpty(fieldId);\n }\n } else {\n dataQueryWithFilters = dataQueryWithFilters.hasSome(\n fieldId,\n filterArray.map((item) => item.id) as string[],\n );\n }\n } else if (typeof filter === 'object') {\n const operatorFilter = filter as {\n operator?: FilterOperator;\n value?: unknown;\n };\n if (operatorFilter.operator) {\n const queryFieldId = getQueryFieldId(\n fieldId,\n fields[fieldId]?.type,\n operatorFilter.operator,\n );\n\n if (operatorFilter.operator === FilterOperator.NOT_CONTAINS) {\n const containsFilter = items\n .filter()\n .contains(queryFieldId, operatorFilter.value as string);\n dataQueryWithFilters = dataQueryWithFilters.not(containsFilter);\n } else {\n const operator = getOperatorForFilter(operatorFilter.operator);\n if (operator) {\n if (operator === 'isEmpty' || operator === 'isNotEmpty') {\n dataQueryWithFilters = dataQueryWithFilters[operator](fieldId);\n } else {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n queryFieldId,\n operatorFilter.value as string,\n );\n }\n }\n }\n }\n const filterObj = filter as Record<string, unknown>;\n for (const filterProp in filterObj) {\n const operator = getOperatorForFilter(filterProp);\n if (\n operator &&\n typeof dataQuery[operator] === 'function' &&\n isSupportedOperator(fields, filterProp, fieldId)\n ) {\n const value = filterObj[filterProp];\n if (value !== undefined && value !== null) {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n fieldId,\n value as string,\n );\n }\n }\n }\n }\n }\n\n return dataQueryWithFilters;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
-
exports.transformCmsSchema = exports.pollUntilReady = exports.getFieldKey = exports.fetchUserPermissions = exports.fetchExternalDbConnections = exports.fetchCmsCollection = exports.createCmsSchemaLoader = exports.createCmsFieldActions = exports.createCmsBackupConfig = exports.createCmsBackend = exports.computeCmsPermissions = exports.addSortToDataQuery = exports.addSearchToDataQuery = exports.addFiltersToDataQuery = exports.PatternsFieldTypeToCmsFieldType = exports.CmsFieldTypeToPatternsFieldType = exports.CMS_EMAIL_TYPE = void 0;
|
|
4
|
+
exports.transformCmsSchema = exports.pollUntilReady = exports.getFieldKey = exports.fetchUserPermissions = exports.fetchExternalDbConnections = exports.fetchCmsCollection = exports.createCmsSchemaSource = exports.createCmsSchemaLoader = exports.createCmsFieldActions = exports.createCmsBackupConfig = exports.createCmsBackend = exports.computeCmsPermissions = exports.addSortToDataQuery = exports.addSearchToDataQuery = exports.addFiltersToDataQuery = exports.PatternsFieldTypeToCmsFieldType = exports.CmsFieldTypeToPatternsFieldType = exports.CMS_EMAIL_TYPE = void 0;
|
|
5
5
|
var _loadCmsSchema = require("./loadCmsSchema");
|
|
6
6
|
exports.createCmsSchemaLoader = _loadCmsSchema.createCmsSchemaLoader;
|
|
7
7
|
exports.fetchCmsCollection = _loadCmsSchema.fetchCmsCollection;
|
|
8
|
+
var _createCmsSchemaSource = require("./createCmsSchemaSource");
|
|
9
|
+
exports.createCmsSchemaSource = _createCmsSchemaSource.createCmsSchemaSource;
|
|
8
10
|
var _transformCmsSchema = require("./transformCmsSchema");
|
|
9
11
|
exports.transformCmsSchema = _transformCmsSchema.transformCmsSchema;
|
|
10
12
|
var _createCmsBackend = require("./createCmsBackend");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loadCmsSchema","require","exports","createCmsSchemaLoader","fetchCmsCollection","_transformCmsSchema","transformCmsSchema","_createCmsBackend","createCmsBackend","_createCmsFieldActions","createCmsFieldActions","_cmsPermissions","computeCmsPermissions","_cmsFieldTypeMap","CmsFieldTypeToPatternsFieldType","PatternsFieldTypeToCmsFieldType","CMS_EMAIL_TYPE","_filterUtils","addFiltersToDataQuery","_searchUtils","addSearchToDataQuery","_sortUtils","addSortToDataQuery","_getFieldKey","getFieldKey","_cmsBackup","createCmsBackupConfig","_pollUntilReady","pollUntilReady","_fetchExternalDbConnections","fetchExternalDbConnections","_fetchUserPermissions","fetchUserPermissions"],"sources":["../../../src/adapter/index.ts"],"sourcesContent":["export {\n createCmsSchemaLoader,\n fetchCmsCollection,\n type CreateCmsSchemaLoaderDeps,\n} from './loadCmsSchema';\nexport {\n transformCmsSchema,\n type TransformCmsSchemaOptions,\n} from './transformCmsSchema';\nexport { createCmsBackend } from './createCmsBackend';\nexport { createCmsFieldActions } from './createCmsFieldActions';\nexport {\n computeCmsPermissions,\n type CmsPermissions,\n type ExternalDbConnection,\n} from './cmsPermissions';\nexport {\n CmsFieldTypeToPatternsFieldType,\n PatternsFieldTypeToCmsFieldType,\n CMS_EMAIL_TYPE,\n} from './cmsFieldTypeMap';\nexport { addFiltersToDataQuery } from './filterUtils';\nexport { addSearchToDataQuery } from './searchUtils';\nexport { addSortToDataQuery } from './sortUtils';\nexport { getFieldKey } from './getFieldKey';\nexport { createCmsBackupConfig } from './cmsBackup';\nexport { pollUntilReady, type PollOptions } from './pollUntilReady';\nexport { fetchExternalDbConnections } from './fetchExternalDbConnections';\nexport { fetchUserPermissions } from './fetchUserPermissions';\n"],"mappings":";;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAIyBC,OAAA,CAAAC,qBAAA,GAAAH,cAAA,CAAAG,qBAAA;AAAAD,OAAA,CAAAE,kBAAA,GAAAJ,cAAA,CAAAI,kBAAA;AACzB,IAAAC,
|
|
1
|
+
{"version":3,"names":["_loadCmsSchema","require","exports","createCmsSchemaLoader","fetchCmsCollection","_createCmsSchemaSource","createCmsSchemaSource","_transformCmsSchema","transformCmsSchema","_createCmsBackend","createCmsBackend","_createCmsFieldActions","createCmsFieldActions","_cmsPermissions","computeCmsPermissions","_cmsFieldTypeMap","CmsFieldTypeToPatternsFieldType","PatternsFieldTypeToCmsFieldType","CMS_EMAIL_TYPE","_filterUtils","addFiltersToDataQuery","_searchUtils","addSearchToDataQuery","_sortUtils","addSortToDataQuery","_getFieldKey","getFieldKey","_cmsBackup","createCmsBackupConfig","_pollUntilReady","pollUntilReady","_fetchExternalDbConnections","fetchExternalDbConnections","_fetchUserPermissions","fetchUserPermissions"],"sources":["../../../src/adapter/index.ts"],"sourcesContent":["export {\n createCmsSchemaLoader,\n fetchCmsCollection,\n type CreateCmsSchemaLoaderDeps,\n} from './loadCmsSchema';\nexport {\n createCmsSchemaSource,\n type CreateCmsSchemaSourceDeps,\n} from './createCmsSchemaSource';\nexport {\n transformCmsSchema,\n type TransformCmsSchemaOptions,\n} from './transformCmsSchema';\nexport { createCmsBackend } from './createCmsBackend';\nexport { createCmsFieldActions } from './createCmsFieldActions';\nexport {\n computeCmsPermissions,\n type CmsPermissions,\n type ExternalDbConnection,\n} from './cmsPermissions';\nexport {\n CmsFieldTypeToPatternsFieldType,\n PatternsFieldTypeToCmsFieldType,\n CMS_EMAIL_TYPE,\n} from './cmsFieldTypeMap';\nexport { addFiltersToDataQuery } from './filterUtils';\nexport { addSearchToDataQuery } from './searchUtils';\nexport { addSortToDataQuery } from './sortUtils';\nexport { getFieldKey } from './getFieldKey';\nexport { createCmsBackupConfig } from './cmsBackup';\nexport { pollUntilReady, type PollOptions } from './pollUntilReady';\nexport { fetchExternalDbConnections } from './fetchExternalDbConnections';\nexport { fetchUserPermissions } from './fetchUserPermissions';\n"],"mappings":";;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAIyBC,OAAA,CAAAC,qBAAA,GAAAH,cAAA,CAAAG,qBAAA;AAAAD,OAAA,CAAAE,kBAAA,GAAAJ,cAAA,CAAAI,kBAAA;AACzB,IAAAC,sBAAA,GAAAJ,OAAA;AAGiCC,OAAA,CAAAI,qBAAA,GAAAD,sBAAA,CAAAC,qBAAA;AACjC,IAAAC,mBAAA,GAAAN,OAAA;AAG8BC,OAAA,CAAAM,kBAAA,GAAAD,mBAAA,CAAAC,kBAAA;AAC9B,IAAAC,iBAAA,GAAAR,OAAA;AAAsDC,OAAA,CAAAQ,gBAAA,GAAAD,iBAAA,CAAAC,gBAAA;AACtD,IAAAC,sBAAA,GAAAV,OAAA;AAAgEC,OAAA,CAAAU,qBAAA,GAAAD,sBAAA,CAAAC,qBAAA;AAChE,IAAAC,eAAA,GAAAZ,OAAA;AAI0BC,OAAA,CAAAY,qBAAA,GAAAD,eAAA,CAAAC,qBAAA;AAC1B,IAAAC,gBAAA,GAAAd,OAAA;AAI2BC,OAAA,CAAAc,+BAAA,GAAAD,gBAAA,CAAAC,+BAAA;AAAAd,OAAA,CAAAe,+BAAA,GAAAF,gBAAA,CAAAE,+BAAA;AAAAf,OAAA,CAAAgB,cAAA,GAAAH,gBAAA,CAAAG,cAAA;AAC3B,IAAAC,YAAA,GAAAlB,OAAA;AAAsDC,OAAA,CAAAkB,qBAAA,GAAAD,YAAA,CAAAC,qBAAA;AACtD,IAAAC,YAAA,GAAApB,OAAA;AAAqDC,OAAA,CAAAoB,oBAAA,GAAAD,YAAA,CAAAC,oBAAA;AACrD,IAAAC,UAAA,GAAAtB,OAAA;AAAiDC,OAAA,CAAAsB,kBAAA,GAAAD,UAAA,CAAAC,kBAAA;AACjD,IAAAC,YAAA,GAAAxB,OAAA;AAA4CC,OAAA,CAAAwB,WAAA,GAAAD,YAAA,CAAAC,WAAA;AAC5C,IAAAC,UAAA,GAAA1B,OAAA;AAAoDC,OAAA,CAAA0B,qBAAA,GAAAD,UAAA,CAAAC,qBAAA;AACpD,IAAAC,eAAA,GAAA5B,OAAA;AAAoEC,OAAA,CAAA4B,cAAA,GAAAD,eAAA,CAAAC,cAAA;AACpE,IAAAC,2BAAA,GAAA9B,OAAA;AAA0EC,OAAA,CAAA8B,0BAAA,GAAAD,2BAAA,CAAAC,0BAAA;AAC1E,IAAAC,qBAAA,GAAAhC,OAAA;AAA8DC,OAAA,CAAAgC,oBAAA,GAAAD,qBAAA,CAAAC,oBAAA","ignoreList":[]}
|
|
@@ -49,10 +49,18 @@ const makePatternsField = (overrides = {}) => {
|
|
|
49
49
|
describe('createCmsFieldActions', () => {
|
|
50
50
|
beforeEach(() => {
|
|
51
51
|
jest.clearAllMocks();
|
|
52
|
-
createDataCollectionField.mockResolvedValue(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
createDataCollectionField.mockResolvedValue({
|
|
53
|
+
dataCollection: makeCollection([]),
|
|
54
|
+
});
|
|
55
|
+
deleteDataCollectionField.mockResolvedValue({
|
|
56
|
+
dataCollection: makeCollection([]),
|
|
57
|
+
});
|
|
58
|
+
patchDataCollection.mockResolvedValue({
|
|
59
|
+
dataCollection: makeCollection([]),
|
|
60
|
+
});
|
|
61
|
+
patchDataCollectionField.mockResolvedValue({
|
|
62
|
+
dataCollection: makeCollection([]),
|
|
63
|
+
});
|
|
56
64
|
});
|
|
57
65
|
describe('addField', () => {
|
|
58
66
|
it('maps the patterns field type to the CMS type and derives the key from displayName', async () => {
|