@webiny/app-headless-cms 6.5.0-beta.0 → 6.5.0-beta.10
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/ContentEntriesModule.js +14 -2
- package/ContentEntriesModule.js.map +1 -1
- package/admin/components/ContentEntries/BulkActions/ActionDelete.d.ts +2 -2
- package/admin/components/ContentEntries/BulkActions/ActionDelete.js.map +1 -1
- package/admin/components/ContentEntries/BulkActions/ActionMove.d.ts +2 -2
- package/admin/components/ContentEntries/BulkActions/ActionMove.js.map +1 -1
- package/admin/components/ContentEntries/BulkActions/ActionPublish.d.ts +2 -2
- package/admin/components/ContentEntries/BulkActions/ActionPublish.js.map +1 -1
- package/admin/components/ContentEntries/BulkActions/ActionUnpublish.d.ts +2 -2
- package/admin/components/ContentEntries/BulkActions/ActionUnpublish.js.map +1 -1
- package/admin/components/ContentEntries/Filters/RefFieldRenderer.d.ts +2 -0
- package/admin/components/ContentEntries/Filters/RefFieldRenderer.js +84 -0
- package/admin/components/ContentEntries/Filters/RefFieldRenderer.js.map +1 -0
- package/admin/components/ContentEntries/Table/Actions/DuplicateEntry.d.ts +2 -0
- package/admin/components/ContentEntries/Table/Actions/DuplicateEntry.js +34 -0
- package/admin/components/ContentEntries/Table/Actions/DuplicateEntry.js.map +1 -0
- package/admin/components/ContentEntries/Table/Actions/index.d.ts +1 -0
- package/admin/components/ContentEntries/Table/Actions/index.js +1 -0
- package/admin/components/ContentModelEditor/ContentModelEditor.js +1 -1
- package/admin/components/ContentModelEditor/ContentModelEditor.js.map +1 -1
- package/admin/components/Dialogs/DuplicateEntryConfirmDialog.d.ts +2 -0
- package/admin/components/Dialogs/DuplicateEntryConfirmDialog.js +22 -0
- package/admin/components/Dialogs/DuplicateEntryConfirmDialog.js.map +1 -0
- package/admin/components/FieldEditor/EditFieldDialog.d.ts +2 -2
- package/admin/components/FieldEditor/Field.js +4 -4
- package/admin/components/FieldEditor/Field.js.map +1 -1
- package/features/contentEntry/CmsEntryError.d.ts +10 -0
- package/features/contentEntry/CmsEntryError.js +11 -0
- package/features/contentEntry/CmsEntryError.js.map +1 -0
- package/features/contentEntry/createEntry/CreateEntryGateway.d.ts +0 -1
- package/features/contentEntry/createEntry/CreateEntryGateway.js +3 -10
- package/features/contentEntry/createEntry/CreateEntryGateway.js.map +1 -1
- package/features/contentEntry/createRevisionFrom/CreateRevisionFromGateway.d.ts +3 -1
- package/features/contentEntry/createRevisionFrom/CreateRevisionFromGateway.js +8 -3
- package/features/contentEntry/createRevisionFrom/CreateRevisionFromGateway.js.map +1 -1
- package/features/contentEntry/duplicateEntry/DuplicateEntryGateway.d.ts +14 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryGateway.js +43 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryGateway.js.map +1 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryRepository.d.ts +15 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryRepository.js +34 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryRepository.js.map +1 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryUseCase.d.ts +11 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryUseCase.js +18 -0
- package/features/contentEntry/duplicateEntry/DuplicateEntryUseCase.js.map +1 -0
- package/features/contentEntry/duplicateEntry/abstractions.d.ts +26 -0
- package/features/contentEntry/duplicateEntry/abstractions.js +7 -0
- package/features/contentEntry/duplicateEntry/abstractions.js.map +1 -0
- package/features/contentEntry/duplicateEntry/feature.d.ts +3 -0
- package/features/contentEntry/duplicateEntry/feature.js +21 -0
- package/features/contentEntry/duplicateEntry/feature.js.map +1 -0
- package/features/contentEntry/entryValueGateways.test.d.ts +1 -0
- package/features/contentEntry/entryValueGateways.test.js +106 -0
- package/features/contentEntry/entryValueGateways.test.js.map +1 -0
- package/features/contentEntry/feature.js +2 -0
- package/features/contentEntry/feature.js.map +1 -1
- package/features/contentEntry/singletonEntry/UpdateSingletonEntryGateway.d.ts +0 -1
- package/features/contentEntry/singletonEntry/UpdateSingletonEntryGateway.js +3 -10
- package/features/contentEntry/singletonEntry/UpdateSingletonEntryGateway.js.map +1 -1
- package/features/contentEntry/updateEntry/UpdateEntryGateway.d.ts +0 -1
- package/features/contentEntry/updateEntry/UpdateEntryGateway.js +3 -10
- package/features/contentEntry/updateEntry/UpdateEntryGateway.js.map +1 -1
- package/features/contentEntry/valueTransformers/EntryDataPreparer.d.ts +9 -0
- package/features/contentEntry/valueTransformers/EntryDataPreparer.js +8 -0
- package/features/contentEntry/valueTransformers/EntryDataPreparer.js.map +1 -1
- package/features/contentEntry/valueTransformers/EntryDataPreparer.test.d.ts +1 -0
- package/features/contentEntry/valueTransformers/EntryDataPreparer.test.js +113 -0
- package/features/contentEntry/valueTransformers/EntryDataPreparer.test.js.map +1 -0
- package/features/contentEntry/valueTransformers/entryValueFixtures.d.ts +146 -0
- package/features/contentEntry/valueTransformers/entryValueFixtures.js +171 -0
- package/features/contentEntry/valueTransformers/entryValueFixtures.js.map +1 -0
- package/features/formModel/CmsFormModelBuilder.d.ts +9 -1
- package/features/formModel/CmsFormModelBuilder.js +26 -15
- package/features/formModel/CmsFormModelBuilder.js.map +1 -1
- package/features/formModel/CmsFormModelBuilder.test.d.ts +1 -0
- package/features/formModel/CmsFormModelBuilder.test.js +252 -0
- package/features/formModel/CmsFormModelBuilder.test.js.map +1 -0
- package/features/formModel/CmsLayoutMapper.d.ts +8 -1
- package/features/formModel/CmsLayoutMapper.js +23 -1
- package/features/formModel/CmsLayoutMapper.js.map +1 -1
- package/features/formModel/mappers/DynamicZoneFieldMapper.js +4 -0
- package/features/formModel/mappers/DynamicZoneFieldMapper.js.map +1 -1
- package/features/formModel/mappers/ObjectFieldMapper.js +11 -6
- package/features/formModel/mappers/ObjectFieldMapper.js.map +1 -1
- package/features/model/exportModels/ExportModelsGateway.d.ts +1 -1
- package/features/model/exportModels/ExportModelsGateway.js.map +1 -1
- package/features/model/exportModels/ExportModelsUseCase.js +7 -1
- package/features/model/exportModels/ExportModelsUseCase.js.map +1 -1
- package/features/model/exportModels/abstractions.d.ts +8 -2
- package/features/model/exportModels/abstractions.js.map +1 -1
- package/package.json +26 -26
- package/presentation/cloneContentModel/CloneContentModelPresenter.d.ts +1 -0
- package/presentation/cloneContentModel/CloneContentModelPresenter.js +8 -6
- package/presentation/cloneContentModel/CloneContentModelPresenter.js.map +1 -1
- package/presentation/contentEntries/form/ContentEntryFormPresenter.js +34 -29
- package/presentation/contentEntries/form/ContentEntryFormPresenter.js.map +1 -1
- package/presentation/contentEntries/form/ContentEntryFormPresenter.test.d.ts +1 -0
- package/presentation/contentEntries/form/ContentEntryFormPresenter.test.js +210 -0
- package/presentation/contentEntries/form/ContentEntryFormPresenter.test.js.map +1 -0
- package/presentation/contentEntries/form/toFormErrors.d.ts +7 -0
- package/presentation/contentEntries/form/toFormErrors.js +49 -0
- package/presentation/contentEntries/form/toFormErrors.js.map +1 -0
- package/presentation/contentEntries/form/toFormErrors.test.d.ts +1 -0
- package/presentation/contentEntries/form/toFormErrors.test.js +175 -0
- package/presentation/contentEntries/form/toFormErrors.test.js.map +1 -0
- package/presentation/contentEntries/list/ContentEntriesDataSource.d.ts +5 -0
- package/presentation/contentEntries/list/ContentEntriesDataSource.js +11 -2
- package/presentation/contentEntries/list/ContentEntriesDataSource.js.map +1 -1
- package/presentation/contentEntries/list/ContentEntriesPresenter.d.ts +6 -2
- package/presentation/contentEntries/list/ContentEntriesPresenter.js +27 -2
- package/presentation/contentEntries/list/ContentEntriesPresenter.js.map +1 -1
- package/presentation/contentEntries/list/ContentEntriesPresenter.test.js +130 -5
- package/presentation/contentEntries/list/ContentEntriesPresenter.test.js.map +1 -1
- package/presentation/contentEntries/list/abstractions.d.ts +12 -0
- package/presentation/contentEntries/list/abstractions.js.map +1 -1
- package/presentation/contentEntries/preview/LivePreviewPresenter.d.ts +12 -1
- package/presentation/contentEntries/preview/LivePreviewPresenter.js +48 -5
- package/presentation/contentEntries/preview/LivePreviewPresenter.js.map +1 -1
- package/presentation/contentEntries/preview/LivePreviewPresenter.test.d.ts +1 -0
- package/presentation/contentEntries/preview/LivePreviewPresenter.test.js +81 -0
- package/presentation/contentEntries/preview/LivePreviewPresenter.test.js.map +1 -0
- package/presentation/contentEntries/preview/ModelEditorComponentDiscovery.js +1 -1
- package/presentation/contentEntries/preview/ModelEditorComponentDiscovery.js.map +1 -1
- package/presentation/contentEntries/preview/PreviewDecorator.js +25 -6
- package/presentation/contentEntries/preview/PreviewDecorator.js.map +1 -1
- package/presentation/contentEntries/preview/PreviewDomainStatus.d.ts +10 -0
- package/presentation/contentEntries/preview/PreviewDomainStatus.js +19 -0
- package/presentation/contentEntries/preview/PreviewDomainStatus.js.map +1 -0
- package/presentation/contentEntries/preview/PreviewPane.d.ts +10 -1
- package/presentation/contentEntries/preview/PreviewPane.js +81 -45
- package/presentation/contentEntries/preview/PreviewPane.js.map +1 -1
- package/presentation/contentEntries/preview/abstractions.d.ts +8 -0
- package/presentation/contentEntries/preview/abstractions.js.map +1 -1
- package/presentation/contentEntries/preview/resolvePreviewUrl.d.ts +21 -0
- package/presentation/contentEntries/preview/resolvePreviewUrl.js +50 -1
- package/presentation/contentEntries/preview/resolvePreviewUrl.js.map +1 -1
- package/presentation/contentEntries/preview/resolvePreviewUrl.test.d.ts +1 -0
- package/presentation/contentEntries/preview/resolvePreviewUrl.test.js +127 -0
- package/presentation/contentEntries/preview/resolvePreviewUrl.test.js.map +1 -0
- package/presentation/contentEntries/singleEntry/SingleEntryPresenter.js +9 -4
- package/presentation/contentEntries/singleEntry/SingleEntryPresenter.js.map +1 -1
- package/presentation/contentEntries/singleEntry/SingleEntryPresenter.test.d.ts +1 -0
- package/presentation/contentEntries/singleEntry/SingleEntryPresenter.test.js +122 -0
- package/presentation/contentEntries/singleEntry/SingleEntryPresenter.test.js.map +1 -0
- package/presentation/contentEntries/trashBin/CmsTrashBin.d.ts +2 -2
- package/presentation/contentEntries/views/CmsAdvancedSearch.d.ts +2 -2
- package/presentation/contentEntries/views/ContentEntriesListLayout.d.ts +2 -2
- package/presentation/contentEntries/views/ContentEntryFormView.d.ts +2 -2
- package/presentation/contentEntries/views/OlderRevisionAlert.d.ts +2 -2
- package/presentation/contentEntries/views/RevisionDrawer.d.ts +2 -2
- package/presentation/contentEntries/views/RevisionsList.d.ts +2 -2
- package/presentation/contentEntries/views/SingleEntryLayout.d.ts +2 -2
- package/presentation/contentEntries/views/Table/Table.d.ts +2 -2
- package/presentation/contentEntries/views/actions/CreateNewRevisionButton.d.ts +2 -2
- package/presentation/contentEntries/views/actions/DeleteEntryMenuItem.d.ts +2 -2
- package/presentation/contentEntries/views/actions/PublishOnlyButton.d.ts +2 -2
- package/presentation/contentEntries/views/actions/RevisionSelector.d.ts +2 -2
- package/presentation/contentEntries/views/actions/SaveAndPublishButton.d.ts +2 -2
- package/presentation/contentEntries/views/actions/SaveContentButton.d.ts +2 -2
- package/presentation/contentEntries/views/actions/ShowRevisionListMenuItem.d.ts +2 -2
- package/presentation/contentEntries/views/layout/ContentEntryForm.d.ts +12 -12
- package/presentation/contentModels/ContentModelsPresenter.d.ts +5 -5
- package/presentation/contentModels/ContentModelsPresenter.js +1 -1
- package/presentation/contentModels/ContentModelsPresenter.js.map +1 -1
- package/presentation/contentModels/abstractions.d.ts +7 -2
- package/presentation/contentModels/abstractions.js.map +1 -1
- package/presentation/contentModels/components/CloneContentModelDialog.d.ts +2 -2
- package/presentation/contentModels/components/ContentModels.d.ts +2 -2
- package/presentation/contentModels/components/ContentModelsDataList.d.ts +2 -2
- package/presentation/contentModels/components/ContentModelsDataList.js +6 -5
- package/presentation/contentModels/components/ContentModelsDataList.js.map +1 -1
- package/presentation/contentModels/components/NewContentModelDialog.d.ts +2 -2
- package/presentation/contentModels/components/fullDelete/dialog/Content.js +2 -2
- package/presentation/contentModels/components/fullDelete/dialog/Content.js.map +1 -1
- package/presentation/contentModels/components/fullDelete/types.js.map +1 -1
- package/presentation/fieldRenderers/ref/autocomplete/RefAutocompletePresenters.test.d.ts +1 -0
- package/presentation/fieldRenderers/ref/autocomplete/RefAutocompletePresenters.test.js +133 -0
- package/presentation/fieldRenderers/ref/autocomplete/RefAutocompletePresenters.test.js.map +1 -0
- package/presentation/fieldRenderers/ref/autocomplete/multi/RefMultiAutocompletePresenter.js +1 -1
- package/presentation/fieldRenderers/ref/autocomplete/multi/RefMultiAutocompletePresenter.js.map +1 -1
- package/presentation/fieldRenderers/ref/autocomplete/single/RefSingleAutocompletePresenter.js +1 -1
- package/presentation/fieldRenderers/ref/autocomplete/single/RefSingleAutocompletePresenter.js.map +1 -1
- package/presentation/fieldRenderers/ref/components/RefFieldOptions.d.ts +2 -2
- package/presentation/fieldRenderers/ref/components/RefFieldOptions.js +3 -2
- package/presentation/fieldRenderers/ref/components/RefFieldOptions.js.map +1 -1
- package/presentation/importContentModels/ImportContentModelsDialog.d.ts +2 -2
- package/presentation/importContentModels/ImportContentModelsPresenter.js +1 -1
- package/presentation/importContentModels/ImportContentModelsPresenter.js.map +1 -1
- package/presentation/importContentModels/components/DataList.d.ts +2 -2
- package/presentation/importContentModels/components/FileUpload.d.ts +2 -2
- package/presentation/importContentModels/components/FileUpload.js +1 -1
- package/presentation/importContentModels/components/FileUpload.js.map +1 -1
- package/presentation/importContentModels/components/Model/DataListModelItem.js +3 -3
- package/presentation/importContentModels/components/Model/DataListModelItem.js.map +1 -1
- package/presentation/importContentModels/components/Model/DataListModelItemInfo.js +2 -2
- package/presentation/importContentModels/components/Model/DataListModelItemInfo.js.map +1 -1
- package/presentation/importContentModels/components/Model/DataListModels.d.ts +2 -2
- package/presentation/menus/ContentGroupsMenuItems.d.ts +2 -2
- package/presentation/modelGroup/ModelGroupPresenter.js +1 -2
- package/presentation/modelGroup/ModelGroupPresenter.js.map +1 -1
- package/presentation/modelGroup/components/ContentModelGroups.d.ts +2 -2
- package/presentation/modelGroup/components/ContentModelGroupsDataList.d.ts +6 -2
- package/presentation/modelGroup/components/ContentModelGroupsForm.d.ts +8 -2
- package/presentation/newContentModel/NewContentModelPresenter.d.ts +1 -0
- package/presentation/newContentModel/NewContentModelPresenter.js +8 -6
- package/presentation/newContentModel/NewContentModelPresenter.js.map +1 -1
- package/utils/normalizeIcon.d.ts +4 -0
- package/utils/normalizeIcon.js +9 -6
- package/utils/normalizeIcon.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/contentEntry/entryValueGateways.test.js","sources":["../../../src/features/contentEntry/entryValueGateways.test.ts"],"sourcesContent":["import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport type { CmsContentEntry } from \"~/types.js\";\nimport { CmsGraphQLClient } from \"~/features/graphQLClient/abstractions.js\";\nimport { EntryGraphQLFields } from \"./abstractions.js\";\nimport { ValueTransformersFeature } from \"./valueTransformers/feature.js\";\nimport {\n formValues,\n graphQLInputValues,\n pageModel\n} from \"./valueTransformers/entryValueFixtures.js\";\nimport { CreateEntryGateway as CreateEntryGatewayAbstraction } from \"./createEntry/abstractions.js\";\nimport { CreateEntryGateway } from \"./createEntry/CreateEntryGateway.js\";\nimport { UpdateEntryGateway as UpdateEntryGatewayAbstraction } from \"./updateEntry/abstractions.js\";\nimport { UpdateEntryGateway } from \"./updateEntry/UpdateEntryGateway.js\";\nimport { UpdateSingletonEntryGateway as UpdateSingletonEntryGatewayAbstraction } from \"./singletonEntry/abstractions.js\";\nimport { UpdateSingletonEntryGateway } from \"./singletonEntry/UpdateSingletonEntryGateway.js\";\nimport { CreateRevisionFromGateway as CreateRevisionFromGatewayAbstraction } from \"./createRevisionFrom/abstractions.js\";\nimport { CreateRevisionFromGateway } from \"./createRevisionFrom/CreateRevisionFromGateway.js\";\n\n/**\n * Every gateway that sends entry values to the API must convert them from the form\n * shape into the GraphQL input shape. A gateway that skips this step breaks saving\n * entries with dynamic zone fields (\"Field ... is not defined by type <Model>_<Field>Input\").\n *\n * When you add a new gateway that sends entry values, add it to this list.\n */\n\nconst ENTRY = { id: \"entry-1#0001\", entryId: \"entry-1\", values: {} } as unknown as CmsContentEntry;\n\ninterface GatewayCase {\n name: string;\n register: (container: Container) => void;\n execute: (container: Container, data: Record<string, unknown>) => Promise<unknown>;\n}\n\nconst cases: GatewayCase[] = [\n {\n name: \"CreateEntryGateway\",\n register: container => container.register(CreateEntryGateway),\n execute: (container, data) =>\n container.resolve(CreateEntryGatewayAbstraction).execute({ model: pageModel, data })\n },\n {\n name: \"UpdateEntryGateway\",\n register: container => container.register(UpdateEntryGateway),\n execute: (container, data) =>\n container\n .resolve(UpdateEntryGatewayAbstraction)\n .execute({ model: pageModel, revisionId: ENTRY.id, data })\n },\n {\n name: \"UpdateSingletonEntryGateway\",\n register: container => container.register(UpdateSingletonEntryGateway),\n execute: (container, data) =>\n container\n .resolve(UpdateSingletonEntryGatewayAbstraction)\n .execute({ model: pageModel, data })\n },\n {\n name: \"CreateRevisionFromGateway\",\n register: container => container.register(CreateRevisionFromGateway),\n execute: (container, data) =>\n container\n .resolve(CreateRevisionFromGatewayAbstraction)\n .execute({ model: pageModel, revisionId: ENTRY.id, data })\n }\n];\n\ndescribe.each(cases)(\"$name\", ({ register, execute }) => {\n let container: Container;\n let client: { execute: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n container = new Container();\n client = {\n execute: vi.fn().mockResolvedValue({ content: { data: ENTRY, error: null } })\n };\n\n ValueTransformersFeature.register(container);\n container.registerInstance(\n CmsGraphQLClient,\n client as unknown as CmsGraphQLClient.Interface\n );\n container.registerInstance(EntryGraphQLFields, {\n getSystemFields: () => \"id\",\n getValuesBlock: () => \"\"\n } as unknown as EntryGraphQLFields.Interface);\n register(container);\n });\n\n it(\"should send dynamic zone values in the GraphQL input shape\", async () => {\n await execute(container, { values: formValues });\n\n expect(client.execute).toHaveBeenCalledTimes(1);\n const { variables } = client.execute.mock.calls[0][0];\n expect(variables.data).toEqual({ values: graphQLInputValues });\n });\n\n it(\"should keep keys other than values in the payload\", async () => {\n await execute(container, {\n values: formValues,\n wbyAco_location: { folderId: \"root\" }\n });\n\n const { variables } = client.execute.mock.calls[0][0];\n expect(variables.data.wbyAco_location).toEqual({ folderId: \"root\" });\n });\n\n it(\"should return the entry from the API response\", async () => {\n await expect(execute(container, { values: formValues })).resolves.toEqual(ENTRY);\n });\n});\n"],"names":["ENTRY","cases","container","CreateEntryGateway","data","CreateEntryGatewayAbstraction","pageModel","UpdateEntryGateway","UpdateEntryGatewayAbstraction","UpdateSingletonEntryGateway","UpdateSingletonEntryGatewayAbstraction","CreateRevisionFromGateway","CreateRevisionFromGatewayAbstraction","describe","register","execute","client","beforeEach","Container","vi","ValueTransformersFeature","CmsGraphQLClient","EntryGraphQLFields","it","formValues","expect","variables","graphQLInputValues"],"mappings":";;;;;;;;;;;;;;AA4BA,MAAMA,QAAQ;IAAE,IAAI;IAAgB,SAAS;IAAW,QAAQ,CAAC;AAAE;AAQnE,MAAMC,QAAuB;IACzB;QACI,MAAM;QACN,UAAUC,CAAAA,YAAaA,UAAU,QAAQ,CAACC;QAC1C,SAAS,CAACD,WAAWE,OACjBF,UAAU,OAAO,CAACG,oBAA+B,OAAO,CAAC;gBAAE,OAAOC;gBAAWF;YAAK;IAC1F;IACA;QACI,MAAM;QACN,UAAUF,CAAAA,YAAaA,UAAU,QAAQ,CAACK;QAC1C,SAAS,CAACL,WAAWE,OACjBF,UACK,OAAO,CAACM,oBACR,OAAO,CAAC;gBAAE,OAAOF;gBAAW,YAAYN,MAAM,EAAE;gBAAEI;YAAK;IACpE;IACA;QACI,MAAM;QACN,UAAUF,CAAAA,YAAaA,UAAU,QAAQ,CAACO;QAC1C,SAAS,CAACP,WAAWE,OACjBF,UACK,OAAO,CAACQ,6BACR,OAAO,CAAC;gBAAE,OAAOJ;gBAAWF;YAAK;IAC9C;IACA;QACI,MAAM;QACN,UAAUF,CAAAA,YAAaA,UAAU,QAAQ,CAACS;QAC1C,SAAS,CAACT,WAAWE,OACjBF,UACK,OAAO,CAACU,2BACR,OAAO,CAAC;gBAAE,OAAON;gBAAW,YAAYN,MAAM,EAAE;gBAAEI;YAAK;IACpE;CACH;AAEDS,SAAS,IAAI,CAACZ,OAAO,SAAS,CAAC,EAAEa,QAAQ,EAAEC,OAAO,EAAE;IAChD,IAAIb;IACJ,IAAIc;IAEJC,WAAW;QACPf,YAAY,IAAIgB;QAChBF,SAAS;YACL,SAASG,GAAG,EAAE,GAAG,iBAAiB,CAAC;gBAAE,SAAS;oBAAE,MAAMnB;oBAAO,OAAO;gBAAK;YAAE;QAC/E;QAEAoB,yBAAyB,QAAQ,CAAClB;QAClCA,UAAU,gBAAgB,CACtBmB,kBACAL;QAEJd,UAAU,gBAAgB,CAACoB,oBAAoB;YAC3C,iBAAiB,IAAM;YACvB,gBAAgB,IAAM;QAC1B;QACAR,SAASZ;IACb;IAEAqB,GAAG,8DAA8D;QAC7D,MAAMR,QAAQb,WAAW;YAAE,QAAQsB;QAAW;QAE9CC,OAAOT,OAAO,OAAO,EAAE,qBAAqB,CAAC;QAC7C,MAAM,EAAEU,SAAS,EAAE,GAAGV,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QACrDS,OAAOC,UAAU,IAAI,EAAE,OAAO,CAAC;YAAE,QAAQC;QAAmB;IAChE;IAEAJ,GAAG,qDAAqD;QACpD,MAAMR,QAAQb,WAAW;YACrB,QAAQsB;YACR,iBAAiB;gBAAE,UAAU;YAAO;QACxC;QAEA,MAAM,EAAEE,SAAS,EAAE,GAAGV,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QACrDS,OAAOC,UAAU,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;YAAE,UAAU;QAAO;IACtE;IAEAH,GAAG,iDAAiD;QAChD,MAAME,OAAOV,QAAQb,WAAW;YAAE,QAAQsB;QAAW,IAAI,QAAQ,CAAC,OAAO,CAACxB;IAC9E;AACJ"}
|
|
@@ -3,6 +3,7 @@ import { ContentEntriesCacheProvider } from "./ContentEntriesCacheProvider.js";
|
|
|
3
3
|
import { GetEntryFeature } from "./getEntry/feature.js";
|
|
4
4
|
import { ListEntriesFeature } from "./listEntries/feature.js";
|
|
5
5
|
import { CreateEntryFeature } from "./createEntry/feature.js";
|
|
6
|
+
import { DuplicateEntryFeature } from "./duplicateEntry/feature.js";
|
|
6
7
|
import { UpdateEntryFeature } from "./updateEntry/feature.js";
|
|
7
8
|
import { PublishEntryFeature } from "./publishEntry/feature.js";
|
|
8
9
|
import { UnpublishEntryFeature } from "./unpublishEntry/feature.js";
|
|
@@ -30,6 +31,7 @@ const ContentEntryFeature = createFeature({
|
|
|
30
31
|
SearchContentEntriesFeature.register(container);
|
|
31
32
|
GetContentEntriesFeature.register(container);
|
|
32
33
|
CreateEntryFeature.register(container);
|
|
34
|
+
DuplicateEntryFeature.register(container);
|
|
33
35
|
UpdateEntryFeature.register(container);
|
|
34
36
|
PublishEntryFeature.register(container);
|
|
35
37
|
UnpublishEntryFeature.register(container);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/contentEntry/feature.js","sources":["../../../src/features/contentEntry/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { ContentEntriesCacheProvider } from \"./ContentEntriesCacheProvider.js\";\nimport { GetEntryFeature } from \"./getEntry/feature.js\";\nimport { ListEntriesFeature } from \"./listEntries/feature.js\";\nimport { CreateEntryFeature } from \"./createEntry/feature.js\";\nimport { UpdateEntryFeature } from \"./updateEntry/feature.js\";\nimport { PublishEntryFeature } from \"./publishEntry/feature.js\";\nimport { UnpublishEntryFeature } from \"./unpublishEntry/feature.js\";\nimport { DeleteEntryFeature } from \"./deleteEntry/feature.js\";\nimport { DeleteEntryRevisionFeature } from \"./deleteEntryRevision/feature.js\";\nimport { CreateRevisionFromFeature } from \"./createRevisionFrom/feature.js\";\nimport { ListRevisionsFeature } from \"./listRevisions/feature.js\";\nimport { UpdateRevisionDescriptionFeature } from \"./updateRevisionDescription/feature.js\";\nimport { SingletonEntryFeature } from \"./singletonEntry/feature.js\";\nimport { MoveEntryFeature } from \"./moveEntry/feature.js\";\nimport { BulkActionFeature } from \"./bulkAction/feature.js\";\nimport { CmsTrashBinFeature } from \"./trashBin/feature.js\";\nimport { SearchContentEntriesFeature } from \"./searchContentEntries/feature.js\";\nimport { GetContentEntriesFeature } from \"./getContentEntries/feature.js\";\nimport { ValueTransformersFeature } from \"./valueTransformers/feature.js\";\nimport { EntryGraphQLFields } from \"./EntryGraphQLFields.js\";\n\nexport const ContentEntryFeature = createFeature({\n name: \"CmsContentEntry\",\n register(container) {\n container.register(EntryGraphQLFields).inSingletonScope();\n container.register(ContentEntriesCacheProvider).inSingletonScope();\n\n ValueTransformersFeature.register(container);\n GetEntryFeature.register(container);\n ListEntriesFeature.register(container);\n SearchContentEntriesFeature.register(container);\n GetContentEntriesFeature.register(container);\n CreateEntryFeature.register(container);\n UpdateEntryFeature.register(container);\n PublishEntryFeature.register(container);\n UnpublishEntryFeature.register(container);\n DeleteEntryFeature.register(container);\n DeleteEntryRevisionFeature.register(container);\n CreateRevisionFromFeature.register(container);\n ListRevisionsFeature.register(container);\n UpdateRevisionDescriptionFeature.register(container);\n SingletonEntryFeature.register(container);\n MoveEntryFeature.register(container);\n BulkActionFeature.register(container);\n CmsTrashBinFeature.register(container);\n }\n});\n"],"names":["ContentEntryFeature","createFeature","container","EntryGraphQLFields","ContentEntriesCacheProvider","ValueTransformersFeature","GetEntryFeature","ListEntriesFeature","SearchContentEntriesFeature","GetContentEntriesFeature","CreateEntryFeature","UpdateEntryFeature","PublishEntryFeature","UnpublishEntryFeature","DeleteEntryFeature","DeleteEntryRevisionFeature","CreateRevisionFromFeature","ListRevisionsFeature","UpdateRevisionDescriptionFeature","SingletonEntryFeature","MoveEntryFeature","BulkActionFeature","CmsTrashBinFeature"],"mappings":"
|
|
1
|
+
{"version":3,"file":"features/contentEntry/feature.js","sources":["../../../src/features/contentEntry/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { ContentEntriesCacheProvider } from \"./ContentEntriesCacheProvider.js\";\nimport { GetEntryFeature } from \"./getEntry/feature.js\";\nimport { ListEntriesFeature } from \"./listEntries/feature.js\";\nimport { CreateEntryFeature } from \"./createEntry/feature.js\";\nimport { DuplicateEntryFeature } from \"./duplicateEntry/feature.js\";\nimport { UpdateEntryFeature } from \"./updateEntry/feature.js\";\nimport { PublishEntryFeature } from \"./publishEntry/feature.js\";\nimport { UnpublishEntryFeature } from \"./unpublishEntry/feature.js\";\nimport { DeleteEntryFeature } from \"./deleteEntry/feature.js\";\nimport { DeleteEntryRevisionFeature } from \"./deleteEntryRevision/feature.js\";\nimport { CreateRevisionFromFeature } from \"./createRevisionFrom/feature.js\";\nimport { ListRevisionsFeature } from \"./listRevisions/feature.js\";\nimport { UpdateRevisionDescriptionFeature } from \"./updateRevisionDescription/feature.js\";\nimport { SingletonEntryFeature } from \"./singletonEntry/feature.js\";\nimport { MoveEntryFeature } from \"./moveEntry/feature.js\";\nimport { BulkActionFeature } from \"./bulkAction/feature.js\";\nimport { CmsTrashBinFeature } from \"./trashBin/feature.js\";\nimport { SearchContentEntriesFeature } from \"./searchContentEntries/feature.js\";\nimport { GetContentEntriesFeature } from \"./getContentEntries/feature.js\";\nimport { ValueTransformersFeature } from \"./valueTransformers/feature.js\";\nimport { EntryGraphQLFields } from \"./EntryGraphQLFields.js\";\n\nexport const ContentEntryFeature = createFeature({\n name: \"CmsContentEntry\",\n register(container) {\n container.register(EntryGraphQLFields).inSingletonScope();\n container.register(ContentEntriesCacheProvider).inSingletonScope();\n\n ValueTransformersFeature.register(container);\n GetEntryFeature.register(container);\n ListEntriesFeature.register(container);\n SearchContentEntriesFeature.register(container);\n GetContentEntriesFeature.register(container);\n CreateEntryFeature.register(container);\n DuplicateEntryFeature.register(container);\n UpdateEntryFeature.register(container);\n PublishEntryFeature.register(container);\n UnpublishEntryFeature.register(container);\n DeleteEntryFeature.register(container);\n DeleteEntryRevisionFeature.register(container);\n CreateRevisionFromFeature.register(container);\n ListRevisionsFeature.register(container);\n UpdateRevisionDescriptionFeature.register(container);\n SingletonEntryFeature.register(container);\n MoveEntryFeature.register(container);\n BulkActionFeature.register(container);\n CmsTrashBinFeature.register(container);\n }\n});\n"],"names":["ContentEntryFeature","createFeature","container","EntryGraphQLFields","ContentEntriesCacheProvider","ValueTransformersFeature","GetEntryFeature","ListEntriesFeature","SearchContentEntriesFeature","GetContentEntriesFeature","CreateEntryFeature","DuplicateEntryFeature","UpdateEntryFeature","PublishEntryFeature","UnpublishEntryFeature","DeleteEntryFeature","DeleteEntryRevisionFeature","CreateRevisionFromFeature","ListRevisionsFeature","UpdateRevisionDescriptionFeature","SingletonEntryFeature","MoveEntryFeature","BulkActionFeature","CmsTrashBinFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuBO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,oBAAoB,gBAAgB;QACvDD,UAAU,QAAQ,CAACE,6BAA6B,gBAAgB;QAEhEC,yBAAyB,QAAQ,CAACH;QAClCI,gBAAgB,QAAQ,CAACJ;QACzBK,mBAAmB,QAAQ,CAACL;QAC5BM,4BAA4B,QAAQ,CAACN;QACrCO,yBAAyB,QAAQ,CAACP;QAClCQ,mBAAmB,QAAQ,CAACR;QAC5BS,sBAAsB,QAAQ,CAACT;QAC/BU,mBAAmB,QAAQ,CAACV;QAC5BW,oBAAoB,QAAQ,CAACX;QAC7BY,sBAAsB,QAAQ,CAACZ;QAC/Ba,mBAAmB,QAAQ,CAACb;QAC5Bc,2BAA2B,QAAQ,CAACd;QACpCe,0BAA0B,QAAQ,CAACf;QACnCgB,qBAAqB,QAAQ,CAAChB;QAC9BiB,iCAAiC,QAAQ,CAACjB;QAC1CkB,sBAAsB,QAAQ,CAAClB;QAC/BmB,iBAAiB,QAAQ,CAACnB;QAC1BoB,kBAAkB,QAAQ,CAACpB;QAC3BqB,mBAAmB,QAAQ,CAACrB;IAChC;AACJ"}
|
|
@@ -9,7 +9,6 @@ declare class UpdateSingletonEntryGatewayImpl implements GatewayAbstraction.Inte
|
|
|
9
9
|
private fields;
|
|
10
10
|
constructor(client: CmsGraphQLClient.Interface, preparer: EntryDataPreparer.Interface, fields: EntryGraphQLFields.Interface);
|
|
11
11
|
execute({ model, data, options }: IUpdateSingletonEntryParams): Promise<CmsContentEntry<import("@webiny/app/types.js").GenericRecord>>;
|
|
12
|
-
private prepareData;
|
|
13
12
|
}
|
|
14
13
|
export declare const UpdateSingletonEntryGateway: typeof UpdateSingletonEntryGatewayImpl & {
|
|
15
14
|
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateSingletonEntryGateway>;
|
|
@@ -2,6 +2,7 @@ import { CmsGraphQLClient } from "../../graphQLClient/abstractions.js";
|
|
|
2
2
|
import { EntryGraphQLFields } from "../abstractions.js";
|
|
3
3
|
import { UpdateSingletonEntryGateway } from "./abstractions.js";
|
|
4
4
|
import { EntryDataPreparer } from "../valueTransformers/EntryDataPreparer.js";
|
|
5
|
+
import { CmsEntryError } from "../CmsEntryError.js";
|
|
5
6
|
function createMutation(model, fields) {
|
|
6
7
|
return `
|
|
7
8
|
mutation CmsUpdate${model.singularApiName}($data: ${model.singularApiName}Input!, $options: UpdateCmsEntryOptionsInput) {
|
|
@@ -22,7 +23,7 @@ class UpdateSingletonEntryGatewayImpl {
|
|
|
22
23
|
this.fields = fields;
|
|
23
24
|
}
|
|
24
25
|
async execute({ model, data, options }) {
|
|
25
|
-
const preparedData = this.
|
|
26
|
+
const preparedData = this.preparer.prepareEntryData(data, model.fields);
|
|
26
27
|
const response = await this.client.execute({
|
|
27
28
|
query: createMutation(model, this.fields),
|
|
28
29
|
variables: {
|
|
@@ -31,17 +32,9 @@ class UpdateSingletonEntryGatewayImpl {
|
|
|
31
32
|
}
|
|
32
33
|
});
|
|
33
34
|
const { data: entry, error } = response.content;
|
|
34
|
-
if (!entry) throw new
|
|
35
|
+
if (!entry) throw new CmsEntryError(error, "Could not update singleton entry");
|
|
35
36
|
return entry;
|
|
36
37
|
}
|
|
37
|
-
prepareData(data, fields) {
|
|
38
|
-
const values = data.values;
|
|
39
|
-
if (!values || "object" != typeof values) return data;
|
|
40
|
-
return {
|
|
41
|
-
...data,
|
|
42
|
-
values: this.preparer.prepare(values, fields)
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
38
|
}
|
|
46
39
|
const UpdateSingletonEntryGateway_UpdateSingletonEntryGateway = UpdateSingletonEntryGateway.createImplementation({
|
|
47
40
|
implementation: UpdateSingletonEntryGatewayImpl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/contentEntry/singletonEntry/UpdateSingletonEntryGateway.js","sources":["../../../../src/features/contentEntry/singletonEntry/UpdateSingletonEntryGateway.ts"],"sourcesContent":["import { CmsGraphQLClient } from \"~/features/graphQLClient/abstractions.js\";\nimport type { CmsContentEntry, CmsErrorResponse, CmsModel
|
|
1
|
+
{"version":3,"file":"features/contentEntry/singletonEntry/UpdateSingletonEntryGateway.js","sources":["../../../../src/features/contentEntry/singletonEntry/UpdateSingletonEntryGateway.ts"],"sourcesContent":["import { CmsGraphQLClient } from \"~/features/graphQLClient/abstractions.js\";\nimport type { CmsContentEntry, CmsErrorResponse, CmsModel } from \"~/types.js\";\nimport { EntryGraphQLFields } from \"../abstractions.js\";\nimport {\n UpdateSingletonEntryGateway as GatewayAbstraction,\n type IUpdateSingletonEntryParams\n} from \"./abstractions.js\";\nimport { EntryDataPreparer } from \"~/features/contentEntry/valueTransformers/EntryDataPreparer.js\";\nimport { CmsEntryError } from \"~/features/contentEntry/CmsEntryError.js\";\n\ninterface UpdateSingletonEntryResponse {\n content: {\n data: CmsContentEntry | null;\n error: CmsErrorResponse | null;\n };\n}\n\nfunction createMutation(model: CmsModel, fields: EntryGraphQLFields.Interface) {\n return /* GraphQL */ `\n mutation CmsUpdate${model.singularApiName}($data: ${model.singularApiName}Input!, $options: UpdateCmsEntryOptionsInput) {\n content: update${model.singularApiName}(data: $data, options: $options) {\n data {\n ${fields.getSystemFields(model)}\n ${fields.getValuesBlock(model)}\n }\n error { message code data }\n }\n }\n `;\n}\n\nclass UpdateSingletonEntryGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: CmsGraphQLClient.Interface,\n private preparer: EntryDataPreparer.Interface,\n private fields: EntryGraphQLFields.Interface\n ) {}\n\n async execute({ model, data, options }: IUpdateSingletonEntryParams) {\n const preparedData = this.preparer.prepareEntryData(data, model.fields);\n\n const response = await this.client.execute<UpdateSingletonEntryResponse>({\n query: createMutation(model, this.fields),\n variables: { data: preparedData, options }\n });\n\n const { data: entry, error } = response.content;\n\n if (!entry) {\n throw new CmsEntryError(error, \"Could not update singleton entry\");\n }\n\n return entry;\n }\n}\n\nexport const UpdateSingletonEntryGateway = GatewayAbstraction.createImplementation({\n implementation: UpdateSingletonEntryGatewayImpl,\n dependencies: [CmsGraphQLClient, EntryDataPreparer, EntryGraphQLFields]\n});\n"],"names":["createMutation","model","fields","UpdateSingletonEntryGatewayImpl","client","preparer","data","options","preparedData","response","entry","error","CmsEntryError","UpdateSingletonEntryGateway","GatewayAbstraction","CmsGraphQLClient","EntryDataPreparer","EntryGraphQLFields"],"mappings":";;;;;AAiBA,SAASA,eAAeC,KAAe,EAAEC,MAAoC;IACzE,OAAqB,CAAC;0BACA,EAAED,MAAM,eAAe,CAAC,QAAQ,EAAEA,MAAM,eAAe,CAAC;2BACvD,EAAEA,MAAM,eAAe,CAAC;;oBAE/B,EAAEC,OAAO,eAAe,CAACD,OAAO;oBAChC,EAAEC,OAAO,cAAc,CAACD,OAAO;;;;;IAK/C,CAAC;AACL;AAEA,MAAME;IACF,YACYC,MAAkC,EAClCC,QAAqC,EACrCH,MAAoC,CAC9C;aAHUE,MAAM,GAANA;aACAC,QAAQ,GAARA;aACAH,MAAM,GAANA;IACT;IAEH,MAAM,QAAQ,EAAED,KAAK,EAAEK,IAAI,EAAEC,OAAO,EAA+B,EAAE;QACjE,MAAMC,eAAe,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAACF,MAAML,MAAM,MAAM;QAEtE,MAAMQ,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA+B;YACrE,OAAOT,eAAeC,OAAO,IAAI,CAAC,MAAM;YACxC,WAAW;gBAAE,MAAMO;gBAAcD;YAAQ;QAC7C;QAEA,MAAM,EAAE,MAAMG,KAAK,EAAEC,KAAK,EAAE,GAAGF,SAAS,OAAO;QAE/C,IAAI,CAACC,OACD,MAAM,IAAIE,cAAcD,OAAO;QAGnC,OAAOD;IACX;AACJ;AAEO,MAAMG,0DAA8BC,4BAAAA,oBAAuC,CAAC;IAC/E,gBAAgBX;IAChB,cAAc;QAACY;QAAkBC;QAAmBC;KAAmB;AAC3E"}
|
|
@@ -9,7 +9,6 @@ declare class UpdateEntryGatewayImpl implements GatewayAbstraction.Interface {
|
|
|
9
9
|
private fields;
|
|
10
10
|
constructor(client: CmsGraphQLClient.Interface, preparer: EntryDataPreparer.Interface, fields: EntryGraphQLFields.Interface);
|
|
11
11
|
execute({ model, revisionId, data, options }: IUpdateEntryParams): Promise<CmsContentEntry<import("@webiny/app/types.js").GenericRecord>>;
|
|
12
|
-
private prepareData;
|
|
13
12
|
}
|
|
14
13
|
export declare const UpdateEntryGateway: typeof UpdateEntryGatewayImpl & {
|
|
15
14
|
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateEntryGateway>;
|
|
@@ -2,6 +2,7 @@ import { CmsGraphQLClient } from "../../graphQLClient/abstractions.js";
|
|
|
2
2
|
import { EntryGraphQLFields } from "../abstractions.js";
|
|
3
3
|
import { UpdateEntryGateway } from "./abstractions.js";
|
|
4
4
|
import { EntryDataPreparer } from "../valueTransformers/EntryDataPreparer.js";
|
|
5
|
+
import { CmsEntryError } from "../CmsEntryError.js";
|
|
5
6
|
function createMutation(model, fields) {
|
|
6
7
|
return `
|
|
7
8
|
mutation CmsUpdate${model.singularApiName}($revision: ID!, $data: ${model.singularApiName}Input!, $options: UpdateCmsEntryOptionsInput) {
|
|
@@ -22,7 +23,7 @@ class UpdateEntryGatewayImpl {
|
|
|
22
23
|
this.fields = fields;
|
|
23
24
|
}
|
|
24
25
|
async execute({ model, revisionId, data, options }) {
|
|
25
|
-
const preparedData = this.
|
|
26
|
+
const preparedData = this.preparer.prepareEntryData(data, model.fields);
|
|
26
27
|
const response = await this.client.execute({
|
|
27
28
|
query: createMutation(model, this.fields),
|
|
28
29
|
variables: {
|
|
@@ -32,17 +33,9 @@ class UpdateEntryGatewayImpl {
|
|
|
32
33
|
}
|
|
33
34
|
});
|
|
34
35
|
const { data: entry, error } = response.content;
|
|
35
|
-
if (!entry) throw new
|
|
36
|
+
if (!entry) throw new CmsEntryError(error, "Could not update entry");
|
|
36
37
|
return entry;
|
|
37
38
|
}
|
|
38
|
-
prepareData(data, fields) {
|
|
39
|
-
const values = data.values;
|
|
40
|
-
if (!values || "object" != typeof values) return data;
|
|
41
|
-
return {
|
|
42
|
-
...data,
|
|
43
|
-
values: this.preparer.prepare(values, fields)
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
39
|
}
|
|
47
40
|
const UpdateEntryGateway_UpdateEntryGateway = UpdateEntryGateway.createImplementation({
|
|
48
41
|
implementation: UpdateEntryGatewayImpl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/contentEntry/updateEntry/UpdateEntryGateway.js","sources":["../../../../src/features/contentEntry/updateEntry/UpdateEntryGateway.ts"],"sourcesContent":["import { CmsGraphQLClient } from \"~/features/graphQLClient/abstractions.js\";\nimport type { CmsContentEntry, CmsErrorResponse, CmsModel
|
|
1
|
+
{"version":3,"file":"features/contentEntry/updateEntry/UpdateEntryGateway.js","sources":["../../../../src/features/contentEntry/updateEntry/UpdateEntryGateway.ts"],"sourcesContent":["import { CmsGraphQLClient } from \"~/features/graphQLClient/abstractions.js\";\nimport type { CmsContentEntry, CmsErrorResponse, CmsModel } from \"~/types.js\";\nimport { EntryGraphQLFields } from \"../abstractions.js\";\nimport {\n UpdateEntryGateway as GatewayAbstraction,\n type IUpdateEntryParams\n} from \"./abstractions.js\";\nimport { EntryDataPreparer } from \"~/features/contentEntry/valueTransformers/EntryDataPreparer.js\";\nimport { CmsEntryError } from \"~/features/contentEntry/CmsEntryError.js\";\n\ninterface UpdateEntryResponse {\n content: {\n data: CmsContentEntry | null;\n error: CmsErrorResponse | null;\n };\n}\n\nfunction createMutation(model: CmsModel, fields: EntryGraphQLFields.Interface) {\n return /* GraphQL */ `\n mutation CmsUpdate${model.singularApiName}($revision: ID!, $data: ${model.singularApiName}Input!, $options: UpdateCmsEntryOptionsInput) {\n content: update${model.singularApiName}(revision: $revision, data: $data, options: $options) {\n data {\n ${fields.getSystemFields(model)}\n ${fields.getValuesBlock(model)}\n }\n error { message code data }\n }\n }\n `;\n}\n\nclass UpdateEntryGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: CmsGraphQLClient.Interface,\n private preparer: EntryDataPreparer.Interface,\n private fields: EntryGraphQLFields.Interface\n ) {}\n\n async execute({ model, revisionId, data, options }: IUpdateEntryParams) {\n const preparedData = this.preparer.prepareEntryData(data, model.fields);\n\n const response = await this.client.execute<UpdateEntryResponse>({\n query: createMutation(model, this.fields),\n variables: { revision: revisionId, data: preparedData, options }\n });\n\n const { data: entry, error } = response.content;\n\n if (!entry) {\n throw new CmsEntryError(error, \"Could not update entry\");\n }\n\n return entry;\n }\n}\n\nexport const UpdateEntryGateway = GatewayAbstraction.createImplementation({\n implementation: UpdateEntryGatewayImpl,\n dependencies: [CmsGraphQLClient, EntryDataPreparer, EntryGraphQLFields]\n});\n"],"names":["createMutation","model","fields","UpdateEntryGatewayImpl","client","preparer","revisionId","data","options","preparedData","response","entry","error","CmsEntryError","UpdateEntryGateway","GatewayAbstraction","CmsGraphQLClient","EntryDataPreparer","EntryGraphQLFields"],"mappings":";;;;;AAiBA,SAASA,eAAeC,KAAe,EAAEC,MAAoC;IACzE,OAAqB,CAAC;0BACA,EAAED,MAAM,eAAe,CAAC,wBAAwB,EAAEA,MAAM,eAAe,CAAC;2BACvE,EAAEA,MAAM,eAAe,CAAC;;oBAE/B,EAAEC,OAAO,eAAe,CAACD,OAAO;oBAChC,EAAEC,OAAO,cAAc,CAACD,OAAO;;;;;IAK/C,CAAC;AACL;AAEA,MAAME;IACF,YACYC,MAAkC,EAClCC,QAAqC,EACrCH,MAAoC,CAC9C;aAHUE,MAAM,GAANA;aACAC,QAAQ,GAARA;aACAH,MAAM,GAANA;IACT;IAEH,MAAM,QAAQ,EAAED,KAAK,EAAEK,UAAU,EAAEC,IAAI,EAAEC,OAAO,EAAsB,EAAE;QACpE,MAAMC,eAAe,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAACF,MAAMN,MAAM,MAAM;QAEtE,MAAMS,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB;YAC5D,OAAOV,eAAeC,OAAO,IAAI,CAAC,MAAM;YACxC,WAAW;gBAAE,UAAUK;gBAAY,MAAMG;gBAAcD;YAAQ;QACnE;QAEA,MAAM,EAAE,MAAMG,KAAK,EAAEC,KAAK,EAAE,GAAGF,SAAS,OAAO;QAE/C,IAAI,CAACC,OACD,MAAM,IAAIE,cAAcD,OAAO;QAGnC,OAAOD;IACX;AACJ;AAEO,MAAMG,wCAAqBC,mBAAAA,oBAAuC,CAAC;IACtE,gBAAgBZ;IAChB,cAAc;QAACa;QAAkBC;QAAmBC;KAAmB;AAC3E"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import type { ICmsEntryValueTransformer } from "./abstractions.js";
|
|
2
2
|
import type { CmsModelField } from "../../../types.js";
|
|
3
3
|
export interface IEntryDataPreparer {
|
|
4
|
+
/**
|
|
5
|
+
* Converts field values from the form shape into the GraphQL input shape.
|
|
6
|
+
*/
|
|
4
7
|
prepare(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* Prepares `data.values` of a mutation payload and keeps all other keys as they are.
|
|
10
|
+
* Every gateway that sends entry values to the API must use this method.
|
|
11
|
+
*/
|
|
12
|
+
prepareEntryData(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown>;
|
|
5
13
|
}
|
|
6
14
|
export declare class EntryDataPreparerImpl implements IEntryDataPreparer {
|
|
7
15
|
private getTransformers;
|
|
8
16
|
private transformersByType;
|
|
9
17
|
constructor(getTransformers: () => ICmsEntryValueTransformer[]);
|
|
10
18
|
prepare(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown>;
|
|
19
|
+
prepareEntryData(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown>;
|
|
11
20
|
}
|
|
12
21
|
export declare const EntryDataPreparer: import("@webiny/di").Abstraction<IEntryDataPreparer>;
|
|
13
22
|
export declare namespace EntryDataPreparer {
|
|
@@ -19,6 +19,14 @@ class EntryDataPreparerImpl {
|
|
|
19
19
|
}
|
|
20
20
|
return result;
|
|
21
21
|
}
|
|
22
|
+
prepareEntryData(data, fields) {
|
|
23
|
+
const values = data.values;
|
|
24
|
+
if (!values || "object" != typeof values) return data;
|
|
25
|
+
return {
|
|
26
|
+
...data,
|
|
27
|
+
values: this.prepare(values, fields)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
22
30
|
}
|
|
23
31
|
const EntryDataPreparer = createAbstraction("EntryDataPreparer");
|
|
24
32
|
export { EntryDataPreparer, EntryDataPreparerImpl };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/contentEntry/valueTransformers/EntryDataPreparer.js","sources":["../../../../src/features/contentEntry/valueTransformers/EntryDataPreparer.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { ICmsEntryValueTransformer } from \"./abstractions.js\";\nimport type { CmsModelField } from \"~/types.js\";\n\nexport interface IEntryDataPreparer {\n prepare(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown>;\n}\n\nexport class EntryDataPreparerImpl implements IEntryDataPreparer {\n private transformersByType: Map<string, ICmsEntryValueTransformer> | null = null;\n\n constructor(private getTransformers: () => ICmsEntryValueTransformer[]) {}\n\n prepare(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown> {\n if (!this.transformersByType) {\n this.transformersByType = new Map();\n for (const t of this.getTransformers()) {\n this.transformersByType.set(t.fieldType, t);\n }\n }\n\n const result: Record<string, unknown> = {};\n\n for (const field of fields) {\n const value = data[field.fieldId];\n if (value === undefined) {\n continue;\n }\n\n const transformer = this.transformersByType.get(field.type);\n if (transformer) {\n result[field.fieldId] = transformer.transform(value, field);\n } else {\n result[field.fieldId] = value;\n }\n }\n\n return result;\n }\n}\n\nexport const EntryDataPreparer = createAbstraction<IEntryDataPreparer>(\"EntryDataPreparer\");\n\nexport namespace EntryDataPreparer {\n export type Interface = IEntryDataPreparer;\n}\n"],"names":["EntryDataPreparerImpl","getTransformers","data","fields","Map","t","result","field","value","undefined","transformer","EntryDataPreparer","createAbstraction"],"mappings":";
|
|
1
|
+
{"version":3,"file":"features/contentEntry/valueTransformers/EntryDataPreparer.js","sources":["../../../../src/features/contentEntry/valueTransformers/EntryDataPreparer.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { ICmsEntryValueTransformer } from \"./abstractions.js\";\nimport type { CmsModelField } from \"~/types.js\";\n\nexport interface IEntryDataPreparer {\n /**\n * Converts field values from the form shape into the GraphQL input shape.\n */\n prepare(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown>;\n /**\n * Prepares `data.values` of a mutation payload and keeps all other keys as they are.\n * Every gateway that sends entry values to the API must use this method.\n */\n prepareEntryData(\n data: Record<string, unknown>,\n fields: CmsModelField[]\n ): Record<string, unknown>;\n}\n\nexport class EntryDataPreparerImpl implements IEntryDataPreparer {\n private transformersByType: Map<string, ICmsEntryValueTransformer> | null = null;\n\n constructor(private getTransformers: () => ICmsEntryValueTransformer[]) {}\n\n prepare(data: Record<string, unknown>, fields: CmsModelField[]): Record<string, unknown> {\n if (!this.transformersByType) {\n this.transformersByType = new Map();\n for (const t of this.getTransformers()) {\n this.transformersByType.set(t.fieldType, t);\n }\n }\n\n const result: Record<string, unknown> = {};\n\n for (const field of fields) {\n const value = data[field.fieldId];\n if (value === undefined) {\n continue;\n }\n\n const transformer = this.transformersByType.get(field.type);\n if (transformer) {\n result[field.fieldId] = transformer.transform(value, field);\n } else {\n result[field.fieldId] = value;\n }\n }\n\n return result;\n }\n\n prepareEntryData(\n data: Record<string, unknown>,\n fields: CmsModelField[]\n ): Record<string, unknown> {\n const values = data.values;\n if (!values || typeof values !== \"object\") {\n return data;\n }\n return {\n ...data,\n values: this.prepare(values as Record<string, unknown>, fields)\n };\n }\n}\n\nexport const EntryDataPreparer = createAbstraction<IEntryDataPreparer>(\"EntryDataPreparer\");\n\nexport namespace EntryDataPreparer {\n export type Interface = IEntryDataPreparer;\n}\n"],"names":["EntryDataPreparerImpl","getTransformers","data","fields","Map","t","result","field","value","undefined","transformer","values","EntryDataPreparer","createAbstraction"],"mappings":";AAmBO,MAAMA;IAGT,YAAoBC,eAAkD,CAAE;aAApDA,eAAe,GAAfA;aAFZ,kBAAkB,GAAkD;IAEH;IAEzE,QAAQC,IAA6B,EAAEC,MAAuB,EAA2B;QACrF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAIC;YAC9B,KAAK,MAAMC,KAAK,IAAI,CAAC,eAAe,GAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAACA,EAAE,SAAS,EAAEA;QAEjD;QAEA,MAAMC,SAAkC,CAAC;QAEzC,KAAK,MAAMC,SAASJ,OAAQ;YACxB,MAAMK,QAAQN,IAAI,CAACK,MAAM,OAAO,CAAC;YACjC,IAAIC,AAAUC,WAAVD,OACA;YAGJ,MAAME,cAAc,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAACH,MAAM,IAAI;YAC1D,IAAIG,aACAJ,MAAM,CAACC,MAAM,OAAO,CAAC,GAAGG,YAAY,SAAS,CAACF,OAAOD;iBAErDD,MAAM,CAACC,MAAM,OAAO,CAAC,GAAGC;QAEhC;QAEA,OAAOF;IACX;IAEA,iBACIJ,IAA6B,EAC7BC,MAAuB,EACA;QACvB,MAAMQ,SAAST,KAAK,MAAM;QAC1B,IAAI,CAACS,UAAU,AAAkB,YAAlB,OAAOA,QAClB,OAAOT;QAEX,OAAO;YACH,GAAGA,IAAI;YACP,QAAQ,IAAI,CAAC,OAAO,CAACS,QAAmCR;QAC5D;IACJ;AACJ;AAEO,MAAMS,oBAAoBC,kBAAsC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { EntryDataPreparer } from "./EntryDataPreparer.js";
|
|
4
|
+
import { ValueTransformersFeature } from "./feature.js";
|
|
5
|
+
import { blocksField, formValues, graphQLInputValues, metaTitleField, pageModel, singleBlockField } from "./entryValueFixtures.js";
|
|
6
|
+
describe("EntryDataPreparer", ()=>{
|
|
7
|
+
let preparer;
|
|
8
|
+
beforeEach(()=>{
|
|
9
|
+
const container = new Container();
|
|
10
|
+
ValueTransformersFeature.register(container);
|
|
11
|
+
preparer = container.resolve(EntryDataPreparer);
|
|
12
|
+
});
|
|
13
|
+
describe("prepare", ()=>{
|
|
14
|
+
it("should convert dynamic zone values into the GraphQL input shape", ()=>{
|
|
15
|
+
const result = preparer.prepare(formValues, pageModel.fields);
|
|
16
|
+
expect(result).toEqual(graphQLInputValues);
|
|
17
|
+
});
|
|
18
|
+
it("should not send form-only keys of dynamic zone items", ()=>{
|
|
19
|
+
const result = preparer.prepare(formValues, [
|
|
20
|
+
blocksField
|
|
21
|
+
]);
|
|
22
|
+
const blocks = result.blocks;
|
|
23
|
+
for (const block of blocks){
|
|
24
|
+
expect(block).not.toHaveProperty("_templateId");
|
|
25
|
+
expect(Object.keys(block)).toHaveLength(1);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
it("should convert a single (non-list) dynamic zone value", ()=>{
|
|
29
|
+
const result = preparer.prepare({
|
|
30
|
+
featuredBlock: formValues.featuredBlock
|
|
31
|
+
}, [
|
|
32
|
+
singleBlockField
|
|
33
|
+
]);
|
|
34
|
+
expect(result).toEqual({
|
|
35
|
+
featuredBlock: graphQLInputValues.featuredBlock
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
it("should drop dynamic zone items with an unknown template", ()=>{
|
|
39
|
+
const result = preparer.prepare({
|
|
40
|
+
blocks: [
|
|
41
|
+
{
|
|
42
|
+
_templateId: "removedBlock",
|
|
43
|
+
_id: "x",
|
|
44
|
+
title: "Gone"
|
|
45
|
+
},
|
|
46
|
+
...formValues.blocks
|
|
47
|
+
]
|
|
48
|
+
}, [
|
|
49
|
+
blocksField
|
|
50
|
+
]);
|
|
51
|
+
expect(result).toEqual({
|
|
52
|
+
blocks: graphQLInputValues.blocks
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it("should skip values of fields that are not in the model", ()=>{
|
|
56
|
+
const result = preparer.prepare({
|
|
57
|
+
metaTitle: "Home",
|
|
58
|
+
notAField: "value"
|
|
59
|
+
}, [
|
|
60
|
+
metaTitleField
|
|
61
|
+
]);
|
|
62
|
+
expect(result).toEqual({
|
|
63
|
+
metaTitle: "Home"
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
it("should keep null values", ()=>{
|
|
67
|
+
const result = preparer.prepare({
|
|
68
|
+
blocks: null,
|
|
69
|
+
metaTitle: null
|
|
70
|
+
}, pageModel.fields);
|
|
71
|
+
expect(result).toEqual({
|
|
72
|
+
blocks: null,
|
|
73
|
+
metaTitle: null
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe("prepareEntryData", ()=>{
|
|
78
|
+
it("should prepare values and keep the other keys", ()=>{
|
|
79
|
+
const data = {
|
|
80
|
+
values: formValues,
|
|
81
|
+
wbyAco_location: {
|
|
82
|
+
folderId: "root"
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const result = preparer.prepareEntryData(data, pageModel.fields);
|
|
86
|
+
expect(result).toEqual({
|
|
87
|
+
values: graphQLInputValues,
|
|
88
|
+
wbyAco_location: {
|
|
89
|
+
folderId: "root"
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
it("should not mutate the input data", ()=>{
|
|
94
|
+
const data = {
|
|
95
|
+
values: structuredClone(formValues)
|
|
96
|
+
};
|
|
97
|
+
preparer.prepareEntryData(data, pageModel.fields);
|
|
98
|
+
expect(data).toEqual({
|
|
99
|
+
values: formValues
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
it("should return data as is when there are no values", ()=>{
|
|
103
|
+
const data = {
|
|
104
|
+
wbyAco_location: {
|
|
105
|
+
folderId: "root"
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
expect(preparer.prepareEntryData(data, pageModel.fields)).toBe(data);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=EntryDataPreparer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/contentEntry/valueTransformers/EntryDataPreparer.test.js","sources":["../../../../src/features/contentEntry/valueTransformers/EntryDataPreparer.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { EntryDataPreparer } from \"./EntryDataPreparer.js\";\nimport { ValueTransformersFeature } from \"./feature.js\";\nimport {\n blocksField,\n formValues,\n graphQLInputValues,\n metaTitleField,\n pageModel,\n singleBlockField\n} from \"./entryValueFixtures.js\";\n\ndescribe(\"EntryDataPreparer\", () => {\n let preparer: EntryDataPreparer.Interface;\n\n beforeEach(() => {\n const container = new Container();\n ValueTransformersFeature.register(container);\n preparer = container.resolve(EntryDataPreparer);\n });\n\n describe(\"prepare\", () => {\n it(\"should convert dynamic zone values into the GraphQL input shape\", () => {\n const result = preparer.prepare(formValues, pageModel.fields);\n\n expect(result).toEqual(graphQLInputValues);\n });\n\n it(\"should not send form-only keys of dynamic zone items\", () => {\n const result = preparer.prepare(formValues, [blocksField]);\n\n const blocks = result.blocks as Record<string, unknown>[];\n for (const block of blocks) {\n expect(block).not.toHaveProperty(\"_templateId\");\n expect(Object.keys(block)).toHaveLength(1);\n }\n });\n\n it(\"should convert a single (non-list) dynamic zone value\", () => {\n const result = preparer.prepare({ featuredBlock: formValues.featuredBlock }, [\n singleBlockField\n ]);\n\n expect(result).toEqual({ featuredBlock: graphQLInputValues.featuredBlock });\n });\n\n it(\"should drop dynamic zone items with an unknown template\", () => {\n const result = preparer.prepare(\n {\n blocks: [\n { _templateId: \"removedBlock\", _id: \"x\", title: \"Gone\" },\n ...formValues.blocks\n ]\n },\n [blocksField]\n );\n\n expect(result).toEqual({ blocks: graphQLInputValues.blocks });\n });\n\n it(\"should skip values of fields that are not in the model\", () => {\n const result = preparer.prepare({ metaTitle: \"Home\", notAField: \"value\" }, [\n metaTitleField\n ]);\n\n expect(result).toEqual({ metaTitle: \"Home\" });\n });\n\n it(\"should keep null values\", () => {\n const result = preparer.prepare({ blocks: null, metaTitle: null }, pageModel.fields);\n\n expect(result).toEqual({ blocks: null, metaTitle: null });\n });\n });\n\n describe(\"prepareEntryData\", () => {\n it(\"should prepare values and keep the other keys\", () => {\n const data = {\n values: formValues,\n wbyAco_location: { folderId: \"root\" }\n };\n\n const result = preparer.prepareEntryData(data, pageModel.fields);\n\n expect(result).toEqual({\n values: graphQLInputValues,\n wbyAco_location: { folderId: \"root\" }\n });\n });\n\n it(\"should not mutate the input data\", () => {\n const data = { values: structuredClone(formValues) };\n\n preparer.prepareEntryData(data, pageModel.fields);\n\n expect(data).toEqual({ values: formValues });\n });\n\n it(\"should return data as is when there are no values\", () => {\n const data = { wbyAco_location: { folderId: \"root\" } };\n\n expect(preparer.prepareEntryData(data, pageModel.fields)).toBe(data);\n });\n });\n});\n"],"names":["describe","preparer","beforeEach","container","Container","ValueTransformersFeature","EntryDataPreparer","it","result","formValues","pageModel","expect","graphQLInputValues","blocksField","blocks","block","Object","singleBlockField","metaTitleField","data","structuredClone"],"mappings":";;;;;AAaAA,SAAS,qBAAqB;IAC1B,IAAIC;IAEJC,WAAW;QACP,MAAMC,YAAY,IAAIC;QACtBC,yBAAyB,QAAQ,CAACF;QAClCF,WAAWE,UAAU,OAAO,CAACG;IACjC;IAEAN,SAAS,WAAW;QAChBO,GAAG,mEAAmE;YAClE,MAAMC,SAASP,SAAS,OAAO,CAACQ,YAAYC,UAAU,MAAM;YAE5DC,OAAOH,QAAQ,OAAO,CAACI;QAC3B;QAEAL,GAAG,wDAAwD;YACvD,MAAMC,SAASP,SAAS,OAAO,CAACQ,YAAY;gBAACI;aAAY;YAEzD,MAAMC,SAASN,OAAO,MAAM;YAC5B,KAAK,MAAMO,SAASD,OAAQ;gBACxBH,OAAOI,OAAO,GAAG,CAAC,cAAc,CAAC;gBACjCJ,OAAOK,OAAO,IAAI,CAACD,QAAQ,YAAY,CAAC;YAC5C;QACJ;QAEAR,GAAG,yDAAyD;YACxD,MAAMC,SAASP,SAAS,OAAO,CAAC;gBAAE,eAAeQ,WAAW,aAAa;YAAC,GAAG;gBACzEQ;aACH;YAEDN,OAAOH,QAAQ,OAAO,CAAC;gBAAE,eAAeI,mBAAmB,aAAa;YAAC;QAC7E;QAEAL,GAAG,2DAA2D;YAC1D,MAAMC,SAASP,SAAS,OAAO,CAC3B;gBACI,QAAQ;oBACJ;wBAAE,aAAa;wBAAgB,KAAK;wBAAK,OAAO;oBAAO;uBACpDQ,WAAW,MAAM;iBACvB;YACL,GACA;gBAACI;aAAY;YAGjBF,OAAOH,QAAQ,OAAO,CAAC;gBAAE,QAAQI,mBAAmB,MAAM;YAAC;QAC/D;QAEAL,GAAG,0DAA0D;YACzD,MAAMC,SAASP,SAAS,OAAO,CAAC;gBAAE,WAAW;gBAAQ,WAAW;YAAQ,GAAG;gBACvEiB;aACH;YAEDP,OAAOH,QAAQ,OAAO,CAAC;gBAAE,WAAW;YAAO;QAC/C;QAEAD,GAAG,2BAA2B;YAC1B,MAAMC,SAASP,SAAS,OAAO,CAAC;gBAAE,QAAQ;gBAAM,WAAW;YAAK,GAAGS,UAAU,MAAM;YAEnFC,OAAOH,QAAQ,OAAO,CAAC;gBAAE,QAAQ;gBAAM,WAAW;YAAK;QAC3D;IACJ;IAEAR,SAAS,oBAAoB;QACzBO,GAAG,iDAAiD;YAChD,MAAMY,OAAO;gBACT,QAAQV;gBACR,iBAAiB;oBAAE,UAAU;gBAAO;YACxC;YAEA,MAAMD,SAASP,SAAS,gBAAgB,CAACkB,MAAMT,UAAU,MAAM;YAE/DC,OAAOH,QAAQ,OAAO,CAAC;gBACnB,QAAQI;gBACR,iBAAiB;oBAAE,UAAU;gBAAO;YACxC;QACJ;QAEAL,GAAG,oCAAoC;YACnC,MAAMY,OAAO;gBAAE,QAAQC,gBAAgBX;YAAY;YAEnDR,SAAS,gBAAgB,CAACkB,MAAMT,UAAU,MAAM;YAEhDC,OAAOQ,MAAM,OAAO,CAAC;gBAAE,QAAQV;YAAW;QAC9C;QAEAF,GAAG,qDAAqD;YACpD,MAAMY,OAAO;gBAAE,iBAAiB;oBAAE,UAAU;gBAAO;YAAE;YAErDR,OAAOV,SAAS,gBAAgB,CAACkB,MAAMT,UAAU,MAAM,GAAG,IAAI,CAACS;QACnE;IACJ;AACJ"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { CmsDynamicZoneTemplate, CmsModel, CmsModelField } from "../../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Shared fixtures for value transformer and gateway tests.
|
|
4
|
+
* The model mirrors a real "page" model: a list dynamic zone field with templates
|
|
5
|
+
* that contain nested object fields.
|
|
6
|
+
*/
|
|
7
|
+
export declare const createField: (field: Partial<CmsModelField>) => CmsModelField;
|
|
8
|
+
export declare const heroTemplate: CmsDynamicZoneTemplate;
|
|
9
|
+
export declare const galleryTemplate: CmsDynamicZoneTemplate;
|
|
10
|
+
export declare const blocksField: {
|
|
11
|
+
id: string;
|
|
12
|
+
type: string;
|
|
13
|
+
fieldId: import("~/types.js").CmsEditorFieldId;
|
|
14
|
+
storageId?: string;
|
|
15
|
+
label: string;
|
|
16
|
+
help?: string | React.ReactNode;
|
|
17
|
+
description?: string | React.ReactNode;
|
|
18
|
+
note?: string | React.ReactNode;
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
validation?: (import("~/types.js").CmsModelFieldValidator | import("@webiny/validation/types").Validator)[];
|
|
21
|
+
listValidation?: import("~/types.js").CmsModelFieldValidator[];
|
|
22
|
+
list?: boolean;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
predefinedValues?: import("~/types.js").CmsEditorFieldPredefinedValues;
|
|
25
|
+
settings?: import("~/types.js").CmsModelFieldSettings<unknown> | undefined;
|
|
26
|
+
renderer: {
|
|
27
|
+
name: string;
|
|
28
|
+
settings?: Record<string, any>;
|
|
29
|
+
};
|
|
30
|
+
tags?: string[];
|
|
31
|
+
rules?: import("~/types.js").FieldRule[];
|
|
32
|
+
};
|
|
33
|
+
export declare const singleBlockField: {
|
|
34
|
+
id: string;
|
|
35
|
+
type: string;
|
|
36
|
+
fieldId: import("~/types.js").CmsEditorFieldId;
|
|
37
|
+
storageId?: string;
|
|
38
|
+
label: string;
|
|
39
|
+
help?: string | React.ReactNode;
|
|
40
|
+
description?: string | React.ReactNode;
|
|
41
|
+
note?: string | React.ReactNode;
|
|
42
|
+
placeholder?: string;
|
|
43
|
+
validation?: (import("~/types.js").CmsModelFieldValidator | import("@webiny/validation/types").Validator)[];
|
|
44
|
+
listValidation?: import("~/types.js").CmsModelFieldValidator[];
|
|
45
|
+
list?: boolean;
|
|
46
|
+
disabled?: boolean;
|
|
47
|
+
predefinedValues?: import("~/types.js").CmsEditorFieldPredefinedValues;
|
|
48
|
+
settings?: import("~/types.js").CmsModelFieldSettings<unknown> | undefined;
|
|
49
|
+
renderer: {
|
|
50
|
+
name: string;
|
|
51
|
+
settings?: Record<string, any>;
|
|
52
|
+
};
|
|
53
|
+
tags?: string[];
|
|
54
|
+
rules?: import("~/types.js").FieldRule[];
|
|
55
|
+
};
|
|
56
|
+
export declare const metaTitleField: {
|
|
57
|
+
id: string;
|
|
58
|
+
type: string;
|
|
59
|
+
fieldId: import("~/types.js").CmsEditorFieldId;
|
|
60
|
+
storageId?: string;
|
|
61
|
+
label: string;
|
|
62
|
+
help?: string | React.ReactNode;
|
|
63
|
+
description?: string | React.ReactNode;
|
|
64
|
+
note?: string | React.ReactNode;
|
|
65
|
+
placeholder?: string;
|
|
66
|
+
validation?: (import("~/types.js").CmsModelFieldValidator | import("@webiny/validation/types").Validator)[];
|
|
67
|
+
listValidation?: import("~/types.js").CmsModelFieldValidator[];
|
|
68
|
+
list?: boolean;
|
|
69
|
+
disabled?: boolean;
|
|
70
|
+
predefinedValues?: import("~/types.js").CmsEditorFieldPredefinedValues;
|
|
71
|
+
settings?: import("~/types.js").CmsModelFieldSettings<unknown> | undefined;
|
|
72
|
+
renderer: {
|
|
73
|
+
name: string;
|
|
74
|
+
settings?: Record<string, any>;
|
|
75
|
+
};
|
|
76
|
+
tags?: string[];
|
|
77
|
+
rules?: import("~/types.js").FieldRule[];
|
|
78
|
+
};
|
|
79
|
+
export declare const pageModel: CmsModel;
|
|
80
|
+
/**
|
|
81
|
+
* Values in the shape the entry form holds them.
|
|
82
|
+
*/
|
|
83
|
+
export declare const formValues: {
|
|
84
|
+
metaTitle: string;
|
|
85
|
+
blocks: ({
|
|
86
|
+
_templateId: string;
|
|
87
|
+
_id: string;
|
|
88
|
+
title: string;
|
|
89
|
+
customUrls: {
|
|
90
|
+
_id: string;
|
|
91
|
+
ctaUrl: string;
|
|
92
|
+
}[];
|
|
93
|
+
header?: undefined;
|
|
94
|
+
gallery?: undefined;
|
|
95
|
+
} | {
|
|
96
|
+
title?: undefined;
|
|
97
|
+
customUrls?: undefined;
|
|
98
|
+
_templateId: string;
|
|
99
|
+
_id: string;
|
|
100
|
+
header: string;
|
|
101
|
+
gallery: {
|
|
102
|
+
_id: string;
|
|
103
|
+
image: string;
|
|
104
|
+
}[];
|
|
105
|
+
})[];
|
|
106
|
+
featuredBlock: {
|
|
107
|
+
_templateId: string;
|
|
108
|
+
_id: string;
|
|
109
|
+
title: string;
|
|
110
|
+
customUrls: never[];
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* The same values in the shape the GraphQL `<Model>Input` type expects.
|
|
115
|
+
*/
|
|
116
|
+
export declare const graphQLInputValues: {
|
|
117
|
+
metaTitle: string;
|
|
118
|
+
blocks: ({
|
|
119
|
+
PageHeroBlock: {
|
|
120
|
+
_id: string;
|
|
121
|
+
title: string;
|
|
122
|
+
customUrls: {
|
|
123
|
+
_id: string;
|
|
124
|
+
ctaUrl: string;
|
|
125
|
+
}[];
|
|
126
|
+
};
|
|
127
|
+
PageGalleryBlock?: undefined;
|
|
128
|
+
} | {
|
|
129
|
+
PageHeroBlock?: undefined;
|
|
130
|
+
PageGalleryBlock: {
|
|
131
|
+
_id: string;
|
|
132
|
+
header: string;
|
|
133
|
+
gallery: {
|
|
134
|
+
_id: string;
|
|
135
|
+
image: string;
|
|
136
|
+
}[];
|
|
137
|
+
};
|
|
138
|
+
})[];
|
|
139
|
+
featuredBlock: {
|
|
140
|
+
PageHeroBlock: {
|
|
141
|
+
_id: string;
|
|
142
|
+
title: string;
|
|
143
|
+
customUrls: never[];
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
};
|