@webiny/app-headless-cms 5.29.0 → 5.30.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/HeadlessCMS.js +5 -1
- package/HeadlessCMS.js.map +1 -1
- package/admin/components/ContentEntryForm/useBind.js +23 -1
- package/admin/components/ContentEntryForm/useBind.js.map +1 -1
- package/admin/components/ContentModelEditor/Editor.js +1 -1
- package/admin/components/ContentModelEditor/Editor.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js +10 -5
- package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js +1 -0
- package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js.map +1 -1
- package/admin/components/FieldEditor/EditFieldDialog.js +8 -7
- package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
- package/admin/contexts/Cms/index.d.ts +60 -0
- package/admin/contexts/Cms/index.js +107 -9
- package/admin/contexts/Cms/index.js.map +1 -1
- package/admin/plugins/editor/defaultBar/SaveContentModelButton.js +1 -0
- package/admin/plugins/editor/defaultBar/SaveContentModelButton.js.map +1 -1
- package/admin/plugins/entry/DefaultOnEntryDelete.d.ts +2 -0
- package/admin/plugins/entry/DefaultOnEntryDelete.js +204 -0
- package/admin/plugins/entry/DefaultOnEntryDelete.js.map +1 -0
- package/admin/plugins/entry/DefaultOnEntryPublish.d.ts +2 -0
- package/admin/plugins/entry/DefaultOnEntryPublish.js +176 -0
- package/admin/plugins/entry/DefaultOnEntryPublish.js.map +1 -0
- package/admin/plugins/fieldRenderers/Accordion.js +3 -0
- package/admin/plugins/fieldRenderers/Accordion.js.map +1 -1
- package/admin/plugins/fieldRenderers/DynamicSection.d.ts +11 -8
- package/admin/plugins/fieldRenderers/DynamicSection.js +0 -3
- package/admin/plugins/fieldRenderers/DynamicSection.js.map +1 -1
- package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -1
- package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
- package/admin/plugins/fieldRenderers/checkboxes.js +2 -1
- package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -1
- package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -1
- package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/utils.d.ts +3 -3
- package/admin/plugins/fieldRenderers/file/fileField.js +2 -1
- package/admin/plugins/fieldRenderers/file/fileField.js.map +1 -1
- package/admin/plugins/fieldRenderers/file/fileFields.js +4 -2
- package/admin/plugins/fieldRenderers/file/fileFields.js.map +1 -1
- package/admin/plugins/fieldRenderers/longText/longText.js +2 -1
- package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
- package/admin/plugins/fieldRenderers/number/numberInput.js +2 -1
- package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/object/StyledComponents.d.ts +2 -0
- package/admin/plugins/fieldRenderers/object/StyledComponents.js +37 -2
- package/admin/plugins/fieldRenderers/object/StyledComponents.js.map +1 -1
- package/admin/plugins/fieldRenderers/object/arrow_drop_down.svg +1 -0
- package/admin/plugins/fieldRenderers/object/arrow_drop_up.svg +1 -0
- package/admin/plugins/fieldRenderers/object/multipleObjects.js +101 -47
- package/admin/plugins/fieldRenderers/object/multipleObjects.js.map +1 -1
- package/admin/plugins/fieldRenderers/radioButtons.js +2 -1
- package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +5 -5
- package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
- package/admin/plugins/fieldRenderers/ref/components/useReference.js +6 -1
- package/admin/plugins/fieldRenderers/ref/components/useReference.js.map +1 -1
- package/admin/plugins/fieldRenderers/richText/richTextInput.js +2 -1
- package/admin/plugins/fieldRenderers/richText/richTextInput.js.map +1 -1
- package/admin/plugins/fieldRenderers/richText/richTextInputs.js +2 -2
- package/admin/plugins/fieldRenderers/richText/richTextInputs.js.map +1 -1
- package/admin/plugins/fieldRenderers/select.js +2 -1
- package/admin/plugins/fieldRenderers/select.js.map +1 -1
- package/admin/plugins/fieldRenderers/text/textInput.js +2 -1
- package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
- package/admin/plugins/fieldValidators/date/availableValidators.d.ts +1 -1
- package/admin/plugins/index.d.ts +1 -1
- package/admin/plugins/validators/unique.d.ts +1 -1
- package/admin/views/contentEntries/ContentEntriesList.js +7 -2
- package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/ContentEntryContext.d.ts +4 -6
- package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js +12 -71
- package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.d.ts +1 -0
- package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.js +35 -0
- package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.js.map +1 -0
- package/admin/views/contentEntries/ContentEntry/RevisionListItem.js +9 -11
- package/admin/views/contentEntries/ContentEntry/RevisionListItem.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/cache.js +47 -21
- package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js +32 -46
- package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/header/index.js +6 -6
- package/admin/views/contentEntries/ContentEntry/header/index.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.d.ts +1 -2
- package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js +6 -4
- package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.d.ts +1 -3
- package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js +6 -4
- package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.d.ts +1 -3
- package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.js +45 -38
- package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/useRevision.js +57 -70
- package/admin/views/contentEntries/ContentEntry/useRevision.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry.js +2 -4
- package/admin/views/contentEntries/ContentEntry.js.map +1 -1
- package/admin/views/contentEntries/hooks/useContentEntry.js +7 -1
- package/admin/views/contentEntries/hooks/useContentEntry.js.map +1 -1
- package/admin/views/contentModels/NewContentModelDialog.js +6 -3
- package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
- package/package.json +21 -20
- package/types.d.ts +10 -7
- package/types.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["t","i18n","ns","narrowDialog","css","width","minWidth","noPadding","padding","disallowedModelIdEndingList","SCHEMA_TYPES","gql","NewContentModelDialog","open","onClose","React","useState","loading","setLoading","useSnackbar","showSnackbar","useRouter","history","client","useApolloClient","useMutation","GQL","CREATE_CONTENT_MODEL","update","cache","data","createContentModel","model","error","message","addModelToListCache","addModelToGroupCache","push","modelId","listMenuGroupsQuery","useQuery","LIST_MENU_CONTENT_GROUPS_MODELS","skip","contentModelGroups","get","map","item","value","id","label","name","nameValidator","useCallback","target","trim","charAt","match","Error","ending","re","RegExp","matched","query","fetchPolicy","types","__schema","lodashUpperFirst","lodashCamelCase","includes","group","length","onSubmit","variables","Bind","submit","validation","create","props","ev"],"sources":["NewContentModelDialog.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport gql from \"graphql-tag\";\nimport { css } from \"emotion\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { Form } from \"@webiny/form\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { validation } from \"@webiny/validation\";\nimport { useQuery, useMutation, useApolloClient } from \"../../hooks\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport * as UID from \"@webiny/ui/Dialog\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { addModelToGroupCache, addModelToListCache } from \"./cache\";\nimport * as GQL from \"../../viewsGraphql\";\nimport {\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables,\n ListMenuCmsGroupsQueryResponse\n} from \"../../viewsGraphql\";\nimport { CmsGroup } from \"~/types\";\nimport { CmsGroupOption } from \"./types\";\nimport lodashUpperFirst from \"lodash/upperFirst\";\nimport lodashCamelCase from \"lodash/camelCase\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/views/content-models/new-content-model-dialog\");\n\nconst narrowDialog = css({\n \".mdc-dialog__surface\": {\n width: 600,\n minWidth: 600\n }\n});\n\nconst noPadding = css({\n padding: \"5px !important\"\n});\n\n/**\n * This list is to disallow creating models that might interfere with GraphQL schema creation.\n * Add more if required.\n */\nconst disallowedModelIdEndingList: string[] = [\"Response\", \"List\", \"Meta\", \"Input\", \"Sorter\"];\n\nexport interface NewContentModelDialogProps {\n open: boolean;\n onClose: UID.DialogOnClose;\n}\n\nconst SCHEMA_TYPES = gql`\n query ListSchemaTypes {\n __schema {\n types {\n name\n }\n }\n }\n`;\n\ninterface SchemaTypes {\n __schema: {\n types: { name: string }[];\n };\n}\n\ninterface CmsModelData {\n name: string;\n description: string;\n group: string;\n}\n\nconst NewContentModelDialog: React.FC<NewContentModelDialogProps> = ({ open, onClose }) => {\n const [loading, setLoading] = React.useState(false);\n const { showSnackbar } = useSnackbar();\n const { history } = useRouter();\n const client = useApolloClient();\n\n const [createContentModel] = useMutation<\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables\n >(GQL.CREATE_CONTENT_MODEL, {\n update(cache, { data }) {\n if (!data) {\n setLoading(false);\n showSnackbar(\"Missing data on Create Content Model Mutation Response.\");\n return;\n }\n const { data: model, error } = data.createContentModel;\n\n if (error) {\n setLoading(false);\n showSnackbar(error.message);\n return;\n }\n\n addModelToListCache(cache, model);\n addModelToGroupCache(cache, model);\n\n history.push(\"/cms/content-models/\" + model.modelId);\n }\n });\n\n const listMenuGroupsQuery = useQuery<ListMenuCmsGroupsQueryResponse>(\n GQL.LIST_MENU_CONTENT_GROUPS_MODELS,\n {\n skip: !open\n }\n );\n\n const contentModelGroups = get(listMenuGroupsQuery, \"data.listContentModelGroups.data\", []).map(\n (item: CmsGroup): CmsGroupOption => {\n return {\n value: item.id,\n label: item.name\n };\n }\n );\n\n const nameValidator = useCallback(\n async (name: string): Promise<boolean> => {\n const target = (name || \"\").trim();\n if (!target.charAt(0).match(/[a-zA-Z]/)) {\n throw new Error(\"Model name can't start with a number.\");\n }\n\n for (const ending of disallowedModelIdEndingList) {\n const re = new RegExp(`${ending}$`, \"i\");\n const matched = target.match(re);\n if (matched === null) {\n continue;\n }\n throw new Error(`Model must not end with \"${ending}\".`);\n }\n\n // Validate GraphQL Schema type\n const { data } = await client.query<SchemaTypes>({\n query: SCHEMA_TYPES,\n fetchPolicy: \"network-only\"\n });\n\n const types = data.__schema.types.map(t => t.name);\n\n const modelId = lodashUpperFirst(lodashCamelCase(name));\n\n if (types.includes(modelId)) {\n throw new Error(\n `\"${name}\" type already exists in the GraphQL schema. Please pick a different name.`\n );\n }\n\n return true;\n },\n [client]\n );\n\n const group = contentModelGroups?.length > 0 ? contentModelGroups[0].value : null;\n\n const onSubmit = async (data: CmsModelData) => {\n setLoading(true);\n await createContentModel({\n variables: { data }\n });\n };\n\n return (\n <UID.Dialog\n open={open}\n onClose={onClose}\n className={narrowDialog}\n data-testid=\"cms-new-content-model-modal\"\n >\n {open && (\n <Form\n data={{ group }}\n onSubmit={data => {\n /**\n * We are positive that data is CmsModelData.\n */\n onSubmit(data as unknown as CmsModelData);\n }}\n >\n {({ Bind, submit }) => (\n <>\n {loading && <CircularProgress label={\"Creating content model...\"} />}\n <UID.DialogTitle>{t`New Content Model`}</UID.DialogTitle>\n <UID.DialogContent>\n <Grid className={noPadding}>\n <Cell span={12}>\n <Bind\n name={\"name\"}\n validators={[\n validation.create(\"required,maxLength:100\"),\n nameValidator\n ]}\n >\n <Input\n label={t`Name`}\n description={t`The name of the content model. Use the singular form, e.g. Person, not Persons.`}\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"group\"}\n validators={validation.create(\"required\")}\n >\n <Select\n description={t`Choose a content model group`}\n label={t`Content model group`}\n options={contentModelGroups}\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind name=\"description\">\n {props => (\n <Input\n {...props}\n rows={4}\n maxLength={200}\n characterCount\n label={t`Description`}\n />\n )}\n </Bind>\n </Cell>\n </Grid>\n </UID.DialogContent>\n <UID.DialogActions>\n <ButtonPrimary\n onClick={ev => {\n submit(ev);\n }}\n >\n + {t`Create Model`}\n </ButtonPrimary>\n </UID.DialogActions>\n </>\n )}\n </Form>\n )}\n </UID.Dialog>\n );\n};\n\nexport default NewContentModelDialog;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAQA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,sEAAR,CAAV;;AAEA,IAAMC,YAAY,gBAAG,IAAAC,YAAA,EAAI;EACrB,wBAAwB;IACpBC,KAAK,EAAE,GADa;IAEpBC,QAAQ,EAAE;EAFU;AADH,CAAJ,wBAArB;AAOA,IAAMC,SAAS,gBAAG,IAAAH,YAAA,EAAI;EAClBI,OAAO,EAAE;AADS,CAAJ,qBAAlB;AAIA;AACA;AACA;AACA;;AACA,IAAMC,2BAAqC,GAAG,CAAC,UAAD,EAAa,MAAb,EAAqB,MAArB,EAA6B,OAA7B,EAAsC,QAAtC,CAA9C;AAOA,IAAMC,YAAY,OAAGC,mBAAH,mNAAlB;;AAsBA,IAAMC,qBAA2D,GAAG,SAA9DA,qBAA8D,OAAuB;EAAA,IAApBC,IAAoB,QAApBA,IAAoB;EAAA,IAAdC,OAAc,QAAdA,OAAc;;EACvF,sBAA8BC,cAAA,CAAMC,QAAN,CAAe,KAAf,CAA9B;EAAA;EAAA,IAAOC,OAAP;EAAA,IAAgBC,UAAhB;;EACA,mBAAyB,IAAAC,yBAAA,GAAzB;EAAA,IAAQC,YAAR,gBAAQA,YAAR;;EACA,iBAAoB,IAAAC,sBAAA,GAApB;EAAA,IAAQC,OAAR,cAAQA,OAAR;;EACA,IAAMC,MAAM,GAAG,IAAAC,sBAAA,GAAf;;EAEA,mBAA6B,IAAAC,kBAAA,EAG3BC,GAAG,CAACC,oBAHuB,EAGD;IACxBC,MADwB,kBACjBC,KADiB,SACA;MAAA,IAARC,IAAQ,SAARA,IAAQ;;MACpB,IAAI,CAACA,IAAL,EAAW;QACPZ,UAAU,CAAC,KAAD,CAAV;QACAE,YAAY,CAAC,yDAAD,CAAZ;QACA;MACH;;MACD,4BAA+BU,IAAI,CAACC,kBAApC;MAAA,IAAcC,KAAd,yBAAQF,IAAR;MAAA,IAAqBG,KAArB,yBAAqBA,KAArB;;MAEA,IAAIA,KAAJ,EAAW;QACPf,UAAU,CAAC,KAAD,CAAV;QACAE,YAAY,CAACa,KAAK,CAACC,OAAP,CAAZ;QACA;MACH;;MAED,IAAAC,0BAAA,EAAoBN,KAApB,EAA2BG,KAA3B;MACA,IAAAI,2BAAA,EAAqBP,KAArB,EAA4BG,KAA5B;MAEAV,OAAO,CAACe,IAAR,CAAa,yBAAyBL,KAAK,CAACM,OAA5C;IACH;EAnBuB,CAHC,CAA7B;EAAA;EAAA,IAAOP,kBAAP;;EAyBA,IAAMQ,mBAAmB,GAAG,IAAAC,eAAA,EACxBd,GAAG,CAACe,+BADoB,EAExB;IACIC,IAAI,EAAE,CAAC7B;EADX,CAFwB,CAA5B;EAOA,IAAM8B,kBAAkB,GAAG,IAAAC,YAAA,EAAIL,mBAAJ,EAAyB,kCAAzB,EAA6D,EAA7D,EAAiEM,GAAjE,CACvB,UAACC,IAAD,EAAoC;IAChC,OAAO;MACHC,KAAK,EAAED,IAAI,CAACE,EADT;MAEHC,KAAK,EAAEH,IAAI,CAACI;IAFT,CAAP;EAIH,CANsB,CAA3B;EASA,IAAMC,aAAa,GAAG,IAAAC,kBAAA;IAAA,mGAClB,iBAAOF,IAAP;MAAA;;MAAA;QAAA;UAAA;YAAA;cACUG,MADV,GACmB,CAACH,IAAI,IAAI,EAAT,EAAaI,IAAb,EADnB;;cAAA,IAESD,MAAM,CAACE,MAAP,CAAc,CAAd,EAAiBC,KAAjB,CAAuB,UAAvB,CAFT;gBAAA;gBAAA;cAAA;;cAAA,MAGc,IAAIC,KAAJ,CAAU,uCAAV,CAHd;;YAAA;cAAA,qDAMyBhD,2BANzB;cAAA;;cAAA;;YAAA;cAAA;gBAAA;gBAAA;cAAA;;cAMeiD,MANf;cAOcC,EAPd,GAOmB,IAAIC,MAAJ,WAAcF,MAAd,QAAyB,GAAzB,CAPnB;cAQcG,OARd,GAQwBR,MAAM,CAACG,KAAP,CAAaG,EAAb,CARxB;;cAAA,MASYE,OAAO,KAAK,IATxB;gBAAA;gBAAA;cAAA;;cAAA;;YAAA;cAAA,MAYc,IAAIJ,KAAJ,qCAAsCC,MAAtC,SAZd;;YAAA;cAAA;cAAA;;YAAA;cAAA;cAAA;;YAAA;cAAA;cAAA;;cAAA;;YAAA;cAAA;;cAAA;;cAAA;;YAAA;cAAA;cAAA,OAgB2BnC,MAAM,CAACuC,KAAP,CAA0B;gBAC7CA,KAAK,EAAEpD,YADsC;gBAE7CqD,WAAW,EAAE;cAFgC,CAA1B,CAhB3B;;YAAA;cAAA;cAgBYjC,IAhBZ,uBAgBYA,IAhBZ;cAqBUkC,KArBV,GAqBkBlC,IAAI,CAACmC,QAAL,CAAcD,KAAd,CAAoBnB,GAApB,CAAwB,UAAA7C,CAAC;gBAAA,OAAIA,CAAC,CAACkD,IAAN;cAAA,CAAzB,CArBlB;cAuBUZ,OAvBV,GAuBoB,IAAA4B,mBAAA,EAAiB,IAAAC,kBAAA,EAAgBjB,IAAhB,CAAjB,CAvBpB;;cAAA,KAyBQc,KAAK,CAACI,QAAN,CAAe9B,OAAf,CAzBR;gBAAA;gBAAA;cAAA;;cAAA,MA0Bc,IAAImB,KAAJ,aACEP,IADF,iFA1Bd;;YAAA;cAAA,iCA+BW,IA/BX;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CADkB;;IAAA;MAAA;IAAA;EAAA,KAkClB,CAAC3B,MAAD,CAlCkB,CAAtB;EAqCA,IAAM8C,KAAK,GAAG,CAAA1B,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAE2B,MAApB,IAA6B,CAA7B,GAAiC3B,kBAAkB,CAAC,CAAD,CAAlB,CAAsBI,KAAvD,GAA+D,IAA7E;;EAEA,IAAMwB,SAAQ;IAAA,mGAAG,kBAAOzC,IAAP;MAAA;QAAA;UAAA;YAAA;cACbZ,UAAU,CAAC,IAAD,CAAV;cADa;cAAA,OAEPa,kBAAkB,CAAC;gBACrByC,SAAS,EAAE;kBAAE1C,IAAI,EAAJA;gBAAF;cADU,CAAD,CAFX;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAH;;IAAA,gBAARyC,QAAQ;MAAA;IAAA;EAAA,GAAd;;EAOA,oBACI,6BAAC,GAAD,CAAK,MAAL;IACI,IAAI,EAAE1D,IADV;IAEI,OAAO,EAAEC,OAFb;IAGI,SAAS,EAAEX,YAHf;IAII,eAAY;EAJhB,GAMKU,IAAI,iBACD,6BAAC,UAAD;IACI,IAAI,EAAE;MAAEwD,KAAK,EAALA;IAAF,CADV;IAEI,QAAQ,EAAE,kBAAAvC,IAAI,EAAI;MACd;AACxB;AACA;MACwByC,SAAQ,CAACzC,IAAD,CAAR;IACH;EAPL,GASK;IAAA,IAAG2C,IAAH,SAAGA,IAAH;IAAA,IAASC,MAAT,SAASA,MAAT;IAAA,oBACG,4DACKzD,OAAO,iBAAI,6BAAC,0BAAD;MAAkB,KAAK,EAAE;IAAzB,EADhB,eAEI,6BAAC,GAAD,CAAK,WAAL,QAAkBjB,CAAlB,uGAFJ,eAGI,6BAAC,GAAD,CAAK,aAAL,qBACI,6BAAC,UAAD;MAAM,SAAS,EAAEO;IAAjB,gBACI,6BAAC,UAAD;MAAM,IAAI,EAAE;IAAZ,gBACI,6BAAC,IAAD;MACI,IAAI,EAAE,MADV;MAEI,UAAU,EAAE,CACRoE,sBAAA,CAAWC,MAAX,CAAkB,wBAAlB,CADQ,EAERzB,aAFQ;IAFhB,gBAOI,6BAAC,YAAD;MACI,KAAK,EAAEnD,CAAF,yFADT;MAEI,WAAW,EAAEA,CAAF;IAFf,EAPJ,CADJ,CADJ,eAeI,6BAAC,UAAD;MAAM,IAAI,EAAE;IAAZ,gBACI,6BAAC,IAAD;MACI,IAAI,EAAE,OADV;MAEI,UAAU,EAAE2E,sBAAA,CAAWC,MAAX,CAAkB,UAAlB;IAFhB,gBAII,6BAAC,cAAD;MACI,WAAW,EAAE5E,CAAF,iHADf;MAEI,KAAK,EAAEA,CAAF,wGAFT;MAGI,OAAO,EAAE2C;IAHb,EAJJ,CADJ,CAfJ,eA2BI,6BAAC,UAAD;MAAM,IAAI,EAAE;IAAZ,gBACI,6BAAC,IAAD;MAAM,IAAI,EAAC;IAAX,GACK,UAAAkC,KAAK;MAAA,oBACF,6BAAC,YAAD,oBACQA,KADR;QAEI,IAAI,EAAE,CAFV;QAGI,SAAS,EAAE,GAHf;QAII,cAAc,MAJlB;QAKI,KAAK,EAAE7E,CAAF;MALT,GADE;IAAA,CADV,CADJ,CA3BJ,CADJ,CAHJ,eA8CI,6BAAC,GAAD,CAAK,aAAL,qBACI,6BAAC,qBAAD;MACI,OAAO,EAAE,iBAAA8E,EAAE,EAAI;QACXJ,MAAM,CAACI,EAAD,CAAN;MACH;IAHL,SAKO9E,CALP,kGADJ,CA9CJ,CADH;EAAA,CATL,CAPR,CADJ;AA+EH,CA5KD;;eA8KeY,qB"}
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","narrowDialog","css","width","minWidth","noPadding","padding","disallowedModelIdEndingList","SCHEMA_TYPES","gql","NewContentModelDialog","open","onClose","React","useState","loading","setLoading","useSnackbar","showSnackbar","useRouter","history","client","useApolloClient","useMutation","GQL","CREATE_CONTENT_MODEL","update","cache","data","createContentModel","model","error","message","addModelToListCache","addModelToGroupCache","push","modelId","listMenuGroupsQuery","useQuery","LIST_MENU_CONTENT_GROUPS_MODELS","skip","contentModelGroups","get","map","item","value","id","label","name","nameValidator","useCallback","target","trim","charAt","match","Error","ending","re","RegExp","matched","query","fetchPolicy","types","__schema","lodashUpperFirst","lodashCamelCase","includes","group","length","onSubmit","variables","Bind","submit","validation","create","props","ev"],"sources":["NewContentModelDialog.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport gql from \"graphql-tag\";\nimport { css } from \"emotion\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { Form } from \"@webiny/form\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { validation } from \"@webiny/validation\";\nimport { useQuery, useMutation, useApolloClient } from \"../../hooks\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport * as UID from \"@webiny/ui/Dialog\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { addModelToGroupCache, addModelToListCache } from \"./cache\";\nimport * as GQL from \"../../viewsGraphql\";\nimport {\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables,\n ListMenuCmsGroupsQueryResponse\n} from \"../../viewsGraphql\";\nimport { CmsGroup } from \"~/types\";\nimport { CmsGroupOption } from \"./types\";\nimport lodashUpperFirst from \"lodash/upperFirst\";\nimport lodashCamelCase from \"lodash/camelCase\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/views/content-models/new-content-model-dialog\");\n\nconst narrowDialog = css({\n \".mdc-dialog__surface\": {\n width: 600,\n minWidth: 600\n }\n});\n\nconst noPadding = css({\n padding: \"5px !important\"\n});\n\n/**\n * This list is to disallow creating models that might interfere with GraphQL schema creation.\n * Add more if required.\n */\nconst disallowedModelIdEndingList: string[] = [\"Response\", \"List\", \"Meta\", \"Input\", \"Sorter\"];\n\nexport interface NewContentModelDialogProps {\n open: boolean;\n onClose: UID.DialogOnClose;\n}\n\nconst SCHEMA_TYPES = gql`\n query ListSchemaTypes {\n __schema {\n types {\n name\n }\n }\n }\n`;\n\ninterface SchemaTypes {\n __schema: {\n types: { name: string }[];\n };\n}\n\ninterface CmsModelData {\n name: string;\n description: string;\n group: string;\n}\n\nconst NewContentModelDialog: React.FC<NewContentModelDialogProps> = ({ open, onClose }) => {\n const [loading, setLoading] = React.useState(false);\n const { showSnackbar } = useSnackbar();\n const { history } = useRouter();\n const client = useApolloClient();\n\n const [createContentModel] = useMutation<\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables\n >(GQL.CREATE_CONTENT_MODEL, {\n update(cache, { data }) {\n if (!data) {\n setLoading(false);\n showSnackbar(\"Missing data on Create Content Model Mutation Response.\");\n return;\n }\n const { data: model, error } = data.createContentModel;\n\n if (error) {\n setLoading(false);\n showSnackbar(error.message);\n return;\n }\n\n addModelToListCache(cache, model);\n addModelToGroupCache(cache, model);\n\n history.push(\"/cms/content-models/\" + model.modelId);\n }\n });\n\n const listMenuGroupsQuery = useQuery<ListMenuCmsGroupsQueryResponse>(\n GQL.LIST_MENU_CONTENT_GROUPS_MODELS,\n {\n skip: !open\n }\n );\n\n const contentModelGroups = get(listMenuGroupsQuery, \"data.listContentModelGroups.data\", []).map(\n (item: CmsGroup): CmsGroupOption => {\n return {\n value: item.id,\n label: item.name\n };\n }\n );\n\n const nameValidator = useCallback(\n async (name: string): Promise<boolean> => {\n const target = (name || \"\").trim();\n if (!target.charAt(0).match(/[a-zA-Z]/)) {\n throw new Error(\"Model name can't start with a number.\");\n }\n\n for (const ending of disallowedModelIdEndingList) {\n const re = new RegExp(`${ending}$`, \"i\");\n const matched = target.match(re);\n if (matched === null) {\n continue;\n }\n throw new Error(`Model must not end with \"${ending}\".`);\n }\n\n // Validate GraphQL Schema type\n const { data } = await client.query<SchemaTypes>({\n query: SCHEMA_TYPES,\n fetchPolicy: \"network-only\"\n });\n\n const types = data.__schema.types.map(t => t.name);\n\n const modelId = lodashUpperFirst(lodashCamelCase(name));\n\n if (types.includes(modelId)) {\n throw new Error(\n `\"${name}\" type already exists in the GraphQL schema. Please pick a different name.`\n );\n }\n\n return true;\n },\n [client]\n );\n\n const group = contentModelGroups?.length > 0 ? contentModelGroups[0].value : null;\n\n const onSubmit = async (data: CmsModelData) => {\n setLoading(true);\n await createContentModel({\n variables: { data }\n });\n };\n\n return (\n <UID.Dialog\n open={open}\n onClose={onClose}\n className={narrowDialog}\n data-testid=\"cms-new-content-model-modal\"\n >\n {open && (\n <Form\n data={{ group }}\n onSubmit={data => {\n /**\n * We are positive that data is CmsModelData.\n */\n onSubmit(data as unknown as CmsModelData);\n }}\n >\n {({ Bind, submit }) => (\n <>\n {loading && <CircularProgress label={\"Creating content model...\"} />}\n <UID.DialogTitle>{t`New Content Model`}</UID.DialogTitle>\n <UID.DialogContent>\n <Grid className={noPadding}>\n <Cell span={12}>\n <Bind\n name={\"name\"}\n validators={[\n validation.create(\"required,maxLength:100\"),\n nameValidator\n ]}\n >\n <Input\n label={t`Name`}\n description={t`The name of the content model. Use the singular form, e.g. Person, not Persons.`}\n data-testid=\"cms.newcontentmodeldialog.name\"\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"group\"}\n validators={validation.create(\"required\")}\n >\n <Select\n description={t`Choose a content model group`}\n label={t`Content model group`}\n options={contentModelGroups}\n data-testid=\"cms.newcontentmodeldialog.selectgroup\"\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind name=\"description\">\n {props => (\n <Input\n {...props}\n rows={4}\n maxLength={200}\n characterCount\n label={t`Description`}\n data-testid=\"cms.newcontentmodeldialog.description\"\n />\n )}\n </Bind>\n </Cell>\n </Grid>\n </UID.DialogContent>\n <UID.DialogActions>\n <ButtonPrimary\n onClick={ev => {\n submit(ev);\n }}\n >\n + {t`Create Model`}\n </ButtonPrimary>\n </UID.DialogActions>\n </>\n )}\n </Form>\n )}\n </UID.Dialog>\n );\n};\n\nexport default NewContentModelDialog;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-headless-cms",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.30.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@apollo/react-common": "3.1.4",
|
|
17
17
|
"@apollo/react-hooks": "3.1.5",
|
|
18
|
-
"@babel/runtime": "7.18.
|
|
18
|
+
"@babel/runtime": "7.18.6",
|
|
19
19
|
"@emotion/core": "10.3.1",
|
|
20
20
|
"@emotion/styled": "10.3.0",
|
|
21
21
|
"@fortawesome/fontawesome-common-types": "0.3.0",
|
|
@@ -23,22 +23,23 @@
|
|
|
23
23
|
"@fortawesome/free-brands-svg-icons": "6.1.1",
|
|
24
24
|
"@fortawesome/free-regular-svg-icons": "6.1.1",
|
|
25
25
|
"@fortawesome/free-solid-svg-icons": "6.1.1",
|
|
26
|
-
"@fortawesome/react-fontawesome": "0.1.
|
|
26
|
+
"@fortawesome/react-fontawesome": "0.1.19",
|
|
27
27
|
"@svgr/webpack": "6.2.1",
|
|
28
28
|
"@types/react": "16.14.2",
|
|
29
|
-
"@webiny/app": "5.
|
|
30
|
-
"@webiny/app-admin": "5.
|
|
31
|
-
"@webiny/app-graphql-playground": "5.
|
|
32
|
-
"@webiny/app-i18n": "5.
|
|
33
|
-
"@webiny/app-plugin-admin-welcome-screen": "5.
|
|
34
|
-
"@webiny/app-security": "5.
|
|
35
|
-
"@webiny/error": "5.
|
|
36
|
-
"@webiny/form": "5.
|
|
37
|
-
"@webiny/plugins": "5.
|
|
38
|
-
"@webiny/react-
|
|
39
|
-
"@webiny/
|
|
40
|
-
"@webiny/
|
|
41
|
-
"@webiny/
|
|
29
|
+
"@webiny/app": "5.30.0",
|
|
30
|
+
"@webiny/app-admin": "5.30.0",
|
|
31
|
+
"@webiny/app-graphql-playground": "5.30.0",
|
|
32
|
+
"@webiny/app-i18n": "5.30.0",
|
|
33
|
+
"@webiny/app-plugin-admin-welcome-screen": "5.30.0",
|
|
34
|
+
"@webiny/app-security": "5.30.0",
|
|
35
|
+
"@webiny/error": "5.30.0",
|
|
36
|
+
"@webiny/form": "5.30.0",
|
|
37
|
+
"@webiny/plugins": "5.30.0",
|
|
38
|
+
"@webiny/react-composition": "5.30.0",
|
|
39
|
+
"@webiny/react-router": "5.30.0",
|
|
40
|
+
"@webiny/ui": "5.30.0",
|
|
41
|
+
"@webiny/utils": "5.30.0",
|
|
42
|
+
"@webiny/validation": "5.30.0",
|
|
42
43
|
"apollo-cache": "1.3.5",
|
|
43
44
|
"apollo-client": "2.6.10",
|
|
44
45
|
"apollo-link": "1.2.14",
|
|
@@ -73,15 +74,15 @@
|
|
|
73
74
|
"@babel/preset-env": "^7.16.4",
|
|
74
75
|
"@babel/preset-react": "^7.16.0",
|
|
75
76
|
"@babel/preset-typescript": "^7.16.0",
|
|
76
|
-
"@webiny/cli": "^5.
|
|
77
|
-
"@webiny/project-utils": "^5.
|
|
77
|
+
"@webiny/cli": "^5.30.0",
|
|
78
|
+
"@webiny/project-utils": "^5.30.0",
|
|
78
79
|
"babel-plugin-emotion": "^9.2.8",
|
|
79
80
|
"babel-plugin-lodash": "^3.3.4",
|
|
80
81
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
81
82
|
"execa": "^5.0.0",
|
|
82
83
|
"rimraf": "^3.0.2",
|
|
83
84
|
"ttypescript": "^1.5.12",
|
|
84
|
-
"typescript": "4.
|
|
85
|
+
"typescript": "4.7.4"
|
|
85
86
|
},
|
|
86
87
|
"publishConfig": {
|
|
87
88
|
"access": "public",
|
|
@@ -106,5 +107,5 @@
|
|
|
106
107
|
]
|
|
107
108
|
}
|
|
108
109
|
},
|
|
109
|
-
"gitHead": "
|
|
110
|
+
"gitHead": "3cadc5d26e565586b28772afbc18ae554ce7b782"
|
|
110
111
|
}
|
package/types.d.ts
CHANGED
|
@@ -162,6 +162,12 @@ export interface CmsEditorFieldTypePlugin extends Plugin {
|
|
|
162
162
|
render?(params: any): React.ReactElement;
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
|
+
export interface CmsEditorFieldRendererProps {
|
|
166
|
+
field: CmsEditorField;
|
|
167
|
+
Label: typeof Label;
|
|
168
|
+
getBind: (index?: number, key?: string) => BindComponent;
|
|
169
|
+
contentModel: CmsEditorContentModel;
|
|
170
|
+
}
|
|
165
171
|
export interface CmsEditorFieldRendererPlugin extends Plugin {
|
|
166
172
|
/**
|
|
167
173
|
* a plugin type
|
|
@@ -228,12 +234,7 @@ export interface CmsEditorFieldRendererPlugin extends Plugin {
|
|
|
228
234
|
* }
|
|
229
235
|
* ```
|
|
230
236
|
*/
|
|
231
|
-
render(props:
|
|
232
|
-
field: CmsEditorField;
|
|
233
|
-
Label: typeof Label;
|
|
234
|
-
getBind: (index?: number, key?: string) => BindComponent;
|
|
235
|
-
contentModel: CmsEditorContentModel;
|
|
236
|
-
}): React.ReactNode;
|
|
237
|
+
render(props: CmsEditorFieldRendererProps): React.ReactNode;
|
|
237
238
|
};
|
|
238
239
|
}
|
|
239
240
|
export interface CmsEditorFieldPredefinedValuesEntry {
|
|
@@ -564,12 +565,14 @@ export interface CmsMetaResponse {
|
|
|
564
565
|
/***
|
|
565
566
|
* ###### FORM ########
|
|
566
567
|
*/
|
|
567
|
-
interface BindComponentRenderProp extends BaseBindComponentRenderProp {
|
|
568
|
+
export interface BindComponentRenderProp extends BaseBindComponentRenderProp {
|
|
568
569
|
parentName: string;
|
|
569
570
|
appendValue: (value: any) => void;
|
|
570
571
|
prependValue: (value: any) => void;
|
|
571
572
|
appendValues: (values: any[]) => void;
|
|
572
573
|
removeValue: (index: number) => void;
|
|
574
|
+
moveValueUp: (index: number) => void;
|
|
575
|
+
moveValueDown: (index: number) => void;
|
|
573
576
|
}
|
|
574
577
|
interface BindComponentProps extends Omit<BaseBindComponentProps, "children" | "name"> {
|
|
575
578
|
name?: string;
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins/types\";\nimport { ReactElement, ReactNode } from \"react\";\nimport {\n FormRenderPropParams,\n FormAPI,\n BindComponent as BaseBindComponent,\n BindComponentRenderProp as BaseBindComponentRenderProp,\n BindComponentProps as BaseBindComponentProps\n} from \"@webiny/form\";\nimport { ApolloClient } from \"apollo-client\";\nimport { IconPrefix, IconName } from \"@fortawesome/fontawesome-svg-core\";\nimport Label from \"./admin/components/ContentEntryForm/Label\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\n\ninterface QueryFieldParams {\n field: CmsEditorField;\n}\n\nexport interface CmsEditorFieldTypePlugin extends Plugin {\n /**\n * a plugin type\n */\n type: \"cms-editor-field-type\";\n field: {\n /**\n * A unique identifier of the field type (text, number, json, myField, ...).\n *\n * ```ts\n * type: \"myField\"\n * ```\n */\n type: string;\n /**\n * A display name for the field.\n *\n * ```ts\n * label: \"Field name\"\n * ```\n */\n label: string;\n /**\n * A list of available validators for the model field.\n *\n * ```ts\n * validators: [\n * \"required\",\n * \"gte\",\n * \"lte\"\n * ]\n * ```\n */\n validators?: string[];\n /**\n * A list of available validators when a model field accepts a list (array) of values.\n *\n * ```ts\n * listValidators: [\n * \"minLength\",\n * \"maxLength\"\n * ]\n * ```\n */\n listValidators?: string[];\n /**\n * An explanation of the field displayed beneath the label.\n *\n * ```ts\n * description: \"A short description of the field\"\n * ```\n */\n description: string;\n /**\n * A ReactNode to display the icon for the field.\n *\n * ```tsx\n * icon: <MyIconComponent />\n * ```\n */\n icon: React.ReactNode;\n /**\n * Is it allowed to have multiple values in this field?\n *\n * ```ts\n * allowMultipleValues: true\n * ```\n */\n allowMultipleValues: boolean;\n /**\n * Does this field type have a fixed list of values that can be selected?\n *\n * ```ts\n * allowPredefinedValues: false\n * ```\n */\n allowPredefinedValues: boolean;\n /**\n * A ReactNode label when multiple values are enabled.\n */\n multipleValuesLabel: React.ReactNode;\n /**\n * These are default values when the field is first created. This is a representation of the field that is stored in the database.\n *\n * ```ts\n * createField: () => ({\n * type: \"fieldType\",\n * validation: [],\n * renderer: {\n * name: \"fieldTypeRenderer\"\n * }\n * })\n * ```\n */\n createField: () => Pick<CmsEditorField, \"type\" | \"validation\" | \"renderer\" | \"settings\">;\n /**\n * A ReactNode that you can add in the section below the help text when creating/editing field.\n *\n * ```tsx\n * renderSettings: (params) => {\n * return <FieldSettingsComponent />;\n * }\n * ```\n */\n renderSettings?: (params: {\n form: FormRenderPropParams;\n afterChangeLabel: (value: string) => void;\n uniqueFieldIdValidator: (fieldId: string) => void;\n contentModel: CmsEditorContentModel;\n }) => React.ReactNode;\n /**\n * A ReactNode that renders in the Predefined values tab.\n *\n * ```tsx\n * renderPredefinedValues: (params) => {\n * const {form: {Bind}} = params;\n * return (\n * <Bind name=\"fieldProperty\">\n * <InputComponent />\n * </Bind>\n * );\n * }\n * ```\n */\n renderPredefinedValues?: (params: {\n form: FormRenderPropParams;\n field: CmsEditorField;\n getBind: (index?: number) => any;\n }) => React.ReactElement;\n /**\n * Object wrapper for GraphQL stuff\n */\n graphql?: {\n /**\n * Define field selection.\n *\n * ```ts\n * graphql: {\n * queryField: `\n * {\n * id\n * title\n * createdOn\n * }\n * `,\n * }\n * ```\n */\n queryField?: string | ((params: QueryFieldParams) => string);\n };\n render?(params: any): React.ReactElement;\n };\n}\n\nexport interface CmsEditorFieldRendererPlugin extends Plugin {\n /**\n * a plugin type\n */\n type: \"cms-editor-field-renderer\";\n renderer: {\n /**\n * Name of the renderer to match the one from `createField()` method in `CmsEditorFieldTypePlugin`.\n *\n * ```ts\n * renderName: \"myFieldTypeRenderer\"\n * ```\n */\n rendererName: string;\n /**\n * A display name for the field in the UI. It is a `ReactNode` type so you can return a component if you want to.\n *\n * ```tsx\n * name: <MyFieldNameComponent />\n * ```\n */\n name: React.ReactNode;\n /**\n * A description for the field in the UI. Works exactly like the `name` property.\n *\n * ```tsx\n * name: <MyFieldDescriptionComponent />\n * ```\n */\n description: React.ReactNode;\n /**\n * A method that determines if the field can be rendered by this plugin.\n *\n * ```ts\n * canUse({ field }) {\n * return (\n * field.type === \"myType\" && !field.multipleValues\n * );\n * }\n * ```\n */\n canUse(props: { field: CmsEditorField }): boolean;\n /**\n * Renders a field in the UI.\n *\n * ```tsx\n * render({ field, getBind }) {\n * const Bind = getBind();\n *\n * return (\n * <Bind>\n * {bind => {\n * return (\n * <Input\n * value={bind.value}\n * onChange={bind.onChange}\n * />\n * )\n * }}\n * </Bind>\n * );\n * }\n * ```\n */\n render(props: {\n field: CmsEditorField;\n Label: typeof Label;\n getBind: (index?: number, key?: string) => BindComponent;\n contentModel: CmsEditorContentModel;\n }): React.ReactNode;\n };\n}\n\nexport interface CmsEditorFieldPredefinedValuesEntry {\n label: string;\n value: string;\n selected?: boolean;\n}\n\nexport interface CmsEditorFieldPredefinedValues {\n enabled: boolean;\n values: CmsEditorFieldPredefinedValuesEntry[];\n}\n\nexport type CmsEditorField<T = unknown> = T & {\n id: string;\n type: string;\n fieldId: CmsEditorFieldId;\n label?: string;\n helpText?: string;\n placeholderText?: string;\n validation?: CmsEditorFieldValidator[];\n listValidation?: CmsEditorFieldValidator[];\n multipleValues?: boolean;\n predefinedValues?: CmsEditorFieldPredefinedValues;\n settings?: {\n defaultValue?: string | null | undefined;\n defaultSetValue?: string;\n type?: string;\n fields?: CmsEditorField<any>[];\n layout?: string[][];\n models?: Pick<CmsModel, \"modelId\" | \"name\">[];\n imagesOnly?: boolean;\n [key: string]: any;\n };\n renderer: {\n name: string;\n };\n};\n\nexport type CmsEditorFieldId = string;\nexport type CmsEditorFieldsLayout = CmsEditorFieldId[][];\n\nexport interface CmsEditorContentModel {\n id: string;\n group: Pick<CmsGroup, \"id\" | \"name\">;\n description?: string;\n version: number;\n layout?: CmsEditorFieldsLayout;\n fields: CmsEditorField[];\n lockedFields: CmsEditorField[];\n name: string;\n modelId: string;\n titleFieldId: string;\n settings: {\n [key: string]: any;\n };\n status: string;\n savedOn: string;\n meta: any;\n createdBy: CmsCreatedBy;\n /**\n * If model is a plugin one (it cannot be changed/deleted)\n */\n plugin?: boolean;\n}\n\nexport type CmsContentEntryStatusType =\n | \"draft\"\n | \"published\"\n | \"unpublished\"\n | \"changesRequested\"\n | \"reviewRequested\";\n\nexport interface CmsEditorContentEntry {\n id: string;\n savedOn: string;\n modelId: string;\n createdBy: CmsCreatedBy;\n meta: {\n title: string;\n publishedOn: string;\n locked: boolean;\n status: CmsContentEntryStatusType;\n version: number;\n };\n [key: string]: any;\n}\n\nexport interface CmsContentEntryRevision {\n id: string;\n savedOn: string;\n modelId: string;\n createdBy: CmsCreatedBy;\n meta: {\n title: string;\n publishedOn: string;\n locked: boolean;\n status: CmsContentEntryStatusType;\n version: number;\n };\n}\n\nexport interface CmsEditorFieldValidator {\n name: string;\n message: string;\n settings: any;\n}\n\nexport interface CmsEditorFieldValidatorPluginValidator {\n name: string;\n label: string;\n description: string;\n defaultMessage: string;\n defaultSettings?: Record<string, any>;\n renderSettings?: (props: {\n field: CmsEditorField;\n Bind: BindComponent;\n setValue: (name: string, value: any) => void;\n setMessage: (message: string) => void;\n data: CmsEditorFieldValidator;\n }) => React.ReactElement;\n}\nexport interface CmsEditorFieldValidatorPlugin extends Plugin {\n type: \"cms-editor-field-validator\";\n validator: CmsEditorFieldValidatorPluginValidator;\n}\n\nexport type CmsEditorContentTab = React.FC<{ activeTab: boolean }>;\n\n// ------------------------------------------------------------------------------------------------------------\nexport interface CmsEditorFieldOptionPlugin extends Plugin {\n type: \"cms-editor-field-option\";\n render(): ReactElement;\n}\n\nexport interface CmsContentDetailsPlugin extends Plugin {\n render: (params: any) => ReactNode;\n}\n\nexport interface CmsContentDetailsRevisionContentPlugin extends Plugin {\n type: \"cms-content-details-revision-content\";\n render(params: any): ReactElement;\n}\n\nexport interface CmsEditorFieldValidatorPatternPlugin extends Plugin {\n type: \"cms-editor-field-validator-pattern\";\n pattern: {\n name: string;\n message: string;\n label: string;\n };\n}\n\nexport interface CmsFieldValidator {\n name: string;\n message: any;\n settings: any;\n}\n\nexport interface CmsModelFieldValidatorPlugin<T = any> extends Plugin {\n type: \"cms-model-field-validator\";\n validator: {\n name: string;\n validate: (value: T, validator: CmsFieldValidator) => Promise<any>;\n };\n}\n\n/**\n * @category Plugin\n * @category ContentModelField\n * @category FieldValidation\n */\nexport interface CmsModelFieldValidatorPatternPlugin extends Plugin {\n /**\n * A plugin type\n */\n type: \"cms-model-field-validator-pattern\";\n /**\n * A pattern object for the validator.\n */\n pattern: {\n /**\n * name of the pattern.\n */\n name: string;\n /**\n * RegExp of the validator.\n */\n regex: string;\n /**\n * RegExp flags\n */\n flags: string;\n };\n}\n\nexport interface FieldLayoutPosition {\n row: number;\n index: number | null;\n}\n\nexport interface CmsEditorFormSettingsPlugin extends Plugin {\n type: \"cms-editor-form-settings\";\n title: string;\n description: string;\n icon: React.ReactElement;\n render(props: { Bind: BaseBindComponent; form: FormAPI; formData: any }): React.ReactNode;\n renderHeaderActions?(props: {\n Bind: BaseBindComponent;\n form: FormAPI;\n formData: any;\n }): React.ReactNode;\n}\n\nexport interface CmsIcon {\n /**\n * [ pack, icon ], ex: [\"fab\", \"cog\"]\n */\n id: [IconPrefix, IconName];\n /**\n * Icon name\n */\n name: string;\n /**\n * SVG element\n */\n svg: ReactElement;\n}\n\nexport interface CmsIconsPlugin extends Plugin {\n type: \"cms-icons\";\n getIcons(): CmsIcon[];\n}\n\nexport interface UseContentModelEditorReducerState {\n apolloClient: ApolloClient<any>;\n id: string;\n}\n\n/**\n * Transform field value when sending data to the API.\n */\nexport interface CmsFieldValueTransformer extends Plugin {\n /**\n * A plugin type.\n */\n type: \"cms-field-value-transformer\";\n /**\n * A field type for the value transformer. Or a list of field types.\n */\n fieldType: string | string[];\n /**\n * A transformer function that takes a value and returns a new one.\n */\n transform: (value: any, field: CmsEditorField) => any;\n}\n\n/**\n * Define a custom form layout renderer for a specific content model.\n */\nexport interface CmsContentFormRendererPlugin extends Plugin {\n /**\n * A plugin type.\n */\n type: \"cms-content-form-renderer\";\n /**\n * Content model ID that will use this renderer.\n */\n modelId: string;\n\n /**\n * A function that will render a custom form layout.\n */\n render(props: {\n /**\n * Content model that is being rendered.\n */\n contentModel: CmsEditorContentModel;\n /**\n * Content entry data handled by the Form element.\n */\n data: Record<string, any>;\n /**\n * A component to bind data to the Form.\n */\n Bind: BindComponent;\n /**\n * Content model fields to render.\n */\n fields: Record<string, React.ReactElement>;\n }): React.ReactNode;\n}\n/**\n * #########################\n * Data types\n * #########################\n */\nexport interface CmsSecurityPermission extends SecurityPermission {\n accessLevel?: \"full\" | \"no\" | \"custom\";\n models?: Record<string, string>;\n groups?: Record<string, string>;\n endpoints?: string[];\n locales?: string[];\n rwd?: string;\n own?: boolean;\n pw?: string;\n}\nexport interface CmsCreatedBy {\n id: string;\n displayName: string;\n type: string;\n}\n/**\n * @category GraphQL\n * @category Model\n */\nexport type CmsModel = CmsEditorContentModel;\n/**\n * @category GraphQL\n * @category Group\n */\nexport interface CmsGroup {\n id: string;\n name: string;\n slug: string;\n icon?: string;\n description?: string;\n contentModels: CmsModel[];\n createdBy: CmsCreatedBy;\n /**\n * Tells if this group is a plugin one (cannot be changed/deleted)\n */\n plugin?: boolean;\n}\n/**\n * @category GraphQL\n * @category Error\n */\nexport interface CmsErrorResponse {\n message: string;\n code: string;\n data: Record<string, any> | Record<string, any>[];\n}\n/**\n * @category GraphQL\n * @category Meta\n */\nexport interface CmsMetaResponse {\n totalCount: number;\n cursor: string | null;\n hasMoreItems: boolean;\n}\n\n/***\n * ###### FORM ########\n */\ninterface BindComponentRenderProp extends BaseBindComponentRenderProp {\n parentName: string;\n appendValue: (value: any) => void;\n prependValue: (value: any) => void;\n appendValues: (values: any[]) => void;\n removeValue: (index: number) => void;\n}\n\ninterface BindComponentProps extends Omit<BaseBindComponentProps, \"children\" | \"name\"> {\n name?: string;\n children?: ((props: BindComponentRenderProp) => React.ReactElement) | React.ReactElement;\n}\n\nexport type BindComponent = React.FC<BindComponentProps> & {\n parentName?: string;\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins/types\";\nimport { ReactElement, ReactNode } from \"react\";\nimport {\n FormRenderPropParams,\n FormAPI,\n BindComponent as BaseBindComponent,\n BindComponentRenderProp as BaseBindComponentRenderProp,\n BindComponentProps as BaseBindComponentProps\n} from \"@webiny/form\";\nimport { ApolloClient } from \"apollo-client\";\nimport { IconPrefix, IconName } from \"@fortawesome/fontawesome-svg-core\";\nimport Label from \"./admin/components/ContentEntryForm/Label\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\n\ninterface QueryFieldParams {\n field: CmsEditorField;\n}\n\nexport interface CmsEditorFieldTypePlugin extends Plugin {\n /**\n * a plugin type\n */\n type: \"cms-editor-field-type\";\n field: {\n /**\n * A unique identifier of the field type (text, number, json, myField, ...).\n *\n * ```ts\n * type: \"myField\"\n * ```\n */\n type: string;\n /**\n * A display name for the field.\n *\n * ```ts\n * label: \"Field name\"\n * ```\n */\n label: string;\n /**\n * A list of available validators for the model field.\n *\n * ```ts\n * validators: [\n * \"required\",\n * \"gte\",\n * \"lte\"\n * ]\n * ```\n */\n validators?: string[];\n /**\n * A list of available validators when a model field accepts a list (array) of values.\n *\n * ```ts\n * listValidators: [\n * \"minLength\",\n * \"maxLength\"\n * ]\n * ```\n */\n listValidators?: string[];\n /**\n * An explanation of the field displayed beneath the label.\n *\n * ```ts\n * description: \"A short description of the field\"\n * ```\n */\n description: string;\n /**\n * A ReactNode to display the icon for the field.\n *\n * ```tsx\n * icon: <MyIconComponent />\n * ```\n */\n icon: React.ReactNode;\n /**\n * Is it allowed to have multiple values in this field?\n *\n * ```ts\n * allowMultipleValues: true\n * ```\n */\n allowMultipleValues: boolean;\n /**\n * Does this field type have a fixed list of values that can be selected?\n *\n * ```ts\n * allowPredefinedValues: false\n * ```\n */\n allowPredefinedValues: boolean;\n /**\n * A ReactNode label when multiple values are enabled.\n */\n multipleValuesLabel: React.ReactNode;\n /**\n * These are default values when the field is first created. This is a representation of the field that is stored in the database.\n *\n * ```ts\n * createField: () => ({\n * type: \"fieldType\",\n * validation: [],\n * renderer: {\n * name: \"fieldTypeRenderer\"\n * }\n * })\n * ```\n */\n createField: () => Pick<CmsEditorField, \"type\" | \"validation\" | \"renderer\" | \"settings\">;\n /**\n * A ReactNode that you can add in the section below the help text when creating/editing field.\n *\n * ```tsx\n * renderSettings: (params) => {\n * return <FieldSettingsComponent />;\n * }\n * ```\n */\n renderSettings?: (params: {\n form: FormRenderPropParams;\n afterChangeLabel: (value: string) => void;\n uniqueFieldIdValidator: (fieldId: string) => void;\n contentModel: CmsEditorContentModel;\n }) => React.ReactNode;\n /**\n * A ReactNode that renders in the Predefined values tab.\n *\n * ```tsx\n * renderPredefinedValues: (params) => {\n * const {form: {Bind}} = params;\n * return (\n * <Bind name=\"fieldProperty\">\n * <InputComponent />\n * </Bind>\n * );\n * }\n * ```\n */\n renderPredefinedValues?: (params: {\n form: FormRenderPropParams;\n field: CmsEditorField;\n getBind: (index?: number) => any;\n }) => React.ReactElement;\n /**\n * Object wrapper for GraphQL stuff\n */\n graphql?: {\n /**\n * Define field selection.\n *\n * ```ts\n * graphql: {\n * queryField: `\n * {\n * id\n * title\n * createdOn\n * }\n * `,\n * }\n * ```\n */\n queryField?: string | ((params: QueryFieldParams) => string);\n };\n render?(params: any): React.ReactElement;\n };\n}\n\nexport interface CmsEditorFieldRendererProps {\n field: CmsEditorField;\n Label: typeof Label;\n getBind: (index?: number, key?: string) => BindComponent;\n contentModel: CmsEditorContentModel;\n}\n\nexport interface CmsEditorFieldRendererPlugin extends Plugin {\n /**\n * a plugin type\n */\n type: \"cms-editor-field-renderer\";\n renderer: {\n /**\n * Name of the renderer to match the one from `createField()` method in `CmsEditorFieldTypePlugin`.\n *\n * ```ts\n * renderName: \"myFieldTypeRenderer\"\n * ```\n */\n rendererName: string;\n /**\n * A display name for the field in the UI. It is a `ReactNode` type so you can return a component if you want to.\n *\n * ```tsx\n * name: <MyFieldNameComponent />\n * ```\n */\n name: React.ReactNode;\n /**\n * A description for the field in the UI. Works exactly like the `name` property.\n *\n * ```tsx\n * name: <MyFieldDescriptionComponent />\n * ```\n */\n description: React.ReactNode;\n /**\n * A method that determines if the field can be rendered by this plugin.\n *\n * ```ts\n * canUse({ field }) {\n * return (\n * field.type === \"myType\" && !field.multipleValues\n * );\n * }\n * ```\n */\n canUse(props: { field: CmsEditorField }): boolean;\n /**\n * Renders a field in the UI.\n *\n * ```tsx\n * render({ field, getBind }) {\n * const Bind = getBind();\n *\n * return (\n * <Bind>\n * {bind => {\n * return (\n * <Input\n * value={bind.value}\n * onChange={bind.onChange}\n * />\n * )\n * }}\n * </Bind>\n * );\n * }\n * ```\n */\n render(props: CmsEditorFieldRendererProps): React.ReactNode;\n };\n}\n\nexport interface CmsEditorFieldPredefinedValuesEntry {\n label: string;\n value: string;\n selected?: boolean;\n}\n\nexport interface CmsEditorFieldPredefinedValues {\n enabled: boolean;\n values: CmsEditorFieldPredefinedValuesEntry[];\n}\n\nexport type CmsEditorField<T = unknown> = T & {\n id: string;\n type: string;\n fieldId: CmsEditorFieldId;\n label?: string;\n helpText?: string;\n placeholderText?: string;\n validation?: CmsEditorFieldValidator[];\n listValidation?: CmsEditorFieldValidator[];\n multipleValues?: boolean;\n predefinedValues?: CmsEditorFieldPredefinedValues;\n settings?: {\n defaultValue?: string | null | undefined;\n defaultSetValue?: string;\n type?: string;\n fields?: CmsEditorField<any>[];\n layout?: string[][];\n models?: Pick<CmsModel, \"modelId\" | \"name\">[];\n imagesOnly?: boolean;\n [key: string]: any;\n };\n renderer: {\n name: string;\n };\n};\n\nexport type CmsEditorFieldId = string;\nexport type CmsEditorFieldsLayout = CmsEditorFieldId[][];\n\nexport interface CmsEditorContentModel {\n id: string;\n group: Pick<CmsGroup, \"id\" | \"name\">;\n description?: string;\n version: number;\n layout?: CmsEditorFieldsLayout;\n fields: CmsEditorField[];\n lockedFields: CmsEditorField[];\n name: string;\n modelId: string;\n titleFieldId: string;\n settings: {\n [key: string]: any;\n };\n status: string;\n savedOn: string;\n meta: any;\n createdBy: CmsCreatedBy;\n /**\n * If model is a plugin one (it cannot be changed/deleted)\n */\n plugin?: boolean;\n}\n\nexport type CmsContentEntryStatusType =\n | \"draft\"\n | \"published\"\n | \"unpublished\"\n | \"changesRequested\"\n | \"reviewRequested\";\n\nexport interface CmsEditorContentEntry {\n id: string;\n savedOn: string;\n modelId: string;\n createdBy: CmsCreatedBy;\n meta: {\n title: string;\n publishedOn: string;\n locked: boolean;\n status: CmsContentEntryStatusType;\n version: number;\n };\n [key: string]: any;\n}\n\nexport interface CmsContentEntryRevision {\n id: string;\n savedOn: string;\n modelId: string;\n createdBy: CmsCreatedBy;\n meta: {\n title: string;\n publishedOn: string;\n locked: boolean;\n status: CmsContentEntryStatusType;\n version: number;\n };\n}\n\nexport interface CmsEditorFieldValidator {\n name: string;\n message: string;\n settings: any;\n}\n\nexport interface CmsEditorFieldValidatorPluginValidator {\n name: string;\n label: string;\n description: string;\n defaultMessage: string;\n defaultSettings?: Record<string, any>;\n renderSettings?: (props: {\n field: CmsEditorField;\n Bind: BindComponent;\n setValue: (name: string, value: any) => void;\n setMessage: (message: string) => void;\n data: CmsEditorFieldValidator;\n }) => React.ReactElement;\n}\nexport interface CmsEditorFieldValidatorPlugin extends Plugin {\n type: \"cms-editor-field-validator\";\n validator: CmsEditorFieldValidatorPluginValidator;\n}\n\nexport type CmsEditorContentTab = React.FC<{ activeTab: boolean }>;\n\n// ------------------------------------------------------------------------------------------------------------\nexport interface CmsEditorFieldOptionPlugin extends Plugin {\n type: \"cms-editor-field-option\";\n render(): ReactElement;\n}\n\nexport interface CmsContentDetailsPlugin extends Plugin {\n render: (params: any) => ReactNode;\n}\n\nexport interface CmsContentDetailsRevisionContentPlugin extends Plugin {\n type: \"cms-content-details-revision-content\";\n render(params: any): ReactElement;\n}\n\nexport interface CmsEditorFieldValidatorPatternPlugin extends Plugin {\n type: \"cms-editor-field-validator-pattern\";\n pattern: {\n name: string;\n message: string;\n label: string;\n };\n}\n\nexport interface CmsFieldValidator {\n name: string;\n message: any;\n settings: any;\n}\n\nexport interface CmsModelFieldValidatorPlugin<T = any> extends Plugin {\n type: \"cms-model-field-validator\";\n validator: {\n name: string;\n validate: (value: T, validator: CmsFieldValidator) => Promise<any>;\n };\n}\n\n/**\n * @category Plugin\n * @category ContentModelField\n * @category FieldValidation\n */\nexport interface CmsModelFieldValidatorPatternPlugin extends Plugin {\n /**\n * A plugin type\n */\n type: \"cms-model-field-validator-pattern\";\n /**\n * A pattern object for the validator.\n */\n pattern: {\n /**\n * name of the pattern.\n */\n name: string;\n /**\n * RegExp of the validator.\n */\n regex: string;\n /**\n * RegExp flags\n */\n flags: string;\n };\n}\n\nexport interface FieldLayoutPosition {\n row: number;\n index: number | null;\n}\n\nexport interface CmsEditorFormSettingsPlugin extends Plugin {\n type: \"cms-editor-form-settings\";\n title: string;\n description: string;\n icon: React.ReactElement;\n render(props: { Bind: BaseBindComponent; form: FormAPI; formData: any }): React.ReactNode;\n renderHeaderActions?(props: {\n Bind: BaseBindComponent;\n form: FormAPI;\n formData: any;\n }): React.ReactNode;\n}\n\nexport interface CmsIcon {\n /**\n * [ pack, icon ], ex: [\"fab\", \"cog\"]\n */\n id: [IconPrefix, IconName];\n /**\n * Icon name\n */\n name: string;\n /**\n * SVG element\n */\n svg: ReactElement;\n}\n\nexport interface CmsIconsPlugin extends Plugin {\n type: \"cms-icons\";\n getIcons(): CmsIcon[];\n}\n\nexport interface UseContentModelEditorReducerState {\n apolloClient: ApolloClient<any>;\n id: string;\n}\n\n/**\n * Transform field value when sending data to the API.\n */\nexport interface CmsFieldValueTransformer extends Plugin {\n /**\n * A plugin type.\n */\n type: \"cms-field-value-transformer\";\n /**\n * A field type for the value transformer. Or a list of field types.\n */\n fieldType: string | string[];\n /**\n * A transformer function that takes a value and returns a new one.\n */\n transform: (value: any, field: CmsEditorField) => any;\n}\n\n/**\n * Define a custom form layout renderer for a specific content model.\n */\nexport interface CmsContentFormRendererPlugin extends Plugin {\n /**\n * A plugin type.\n */\n type: \"cms-content-form-renderer\";\n /**\n * Content model ID that will use this renderer.\n */\n modelId: string;\n\n /**\n * A function that will render a custom form layout.\n */\n render(props: {\n /**\n * Content model that is being rendered.\n */\n contentModel: CmsEditorContentModel;\n /**\n * Content entry data handled by the Form element.\n */\n data: Record<string, any>;\n /**\n * A component to bind data to the Form.\n */\n Bind: BindComponent;\n /**\n * Content model fields to render.\n */\n fields: Record<string, React.ReactElement>;\n }): React.ReactNode;\n}\n/**\n * #########################\n * Data types\n * #########################\n */\nexport interface CmsSecurityPermission extends SecurityPermission {\n accessLevel?: \"full\" | \"no\" | \"custom\";\n models?: Record<string, string>;\n groups?: Record<string, string>;\n endpoints?: string[];\n locales?: string[];\n rwd?: string;\n own?: boolean;\n pw?: string;\n}\nexport interface CmsCreatedBy {\n id: string;\n displayName: string;\n type: string;\n}\n/**\n * @category GraphQL\n * @category Model\n */\nexport type CmsModel = CmsEditorContentModel;\n/**\n * @category GraphQL\n * @category Group\n */\nexport interface CmsGroup {\n id: string;\n name: string;\n slug: string;\n icon?: string;\n description?: string;\n contentModels: CmsModel[];\n createdBy: CmsCreatedBy;\n /**\n * Tells if this group is a plugin one (cannot be changed/deleted)\n */\n plugin?: boolean;\n}\n/**\n * @category GraphQL\n * @category Error\n */\nexport interface CmsErrorResponse {\n message: string;\n code: string;\n data: Record<string, any> | Record<string, any>[];\n}\n/**\n * @category GraphQL\n * @category Meta\n */\nexport interface CmsMetaResponse {\n totalCount: number;\n cursor: string | null;\n hasMoreItems: boolean;\n}\n\n/***\n * ###### FORM ########\n */\nexport interface BindComponentRenderProp extends BaseBindComponentRenderProp {\n parentName: string;\n appendValue: (value: any) => void;\n prependValue: (value: any) => void;\n appendValues: (values: any[]) => void;\n removeValue: (index: number) => void;\n moveValueUp: (index: number) => void;\n moveValueDown: (index: number) => void;\n}\n\ninterface BindComponentProps extends Omit<BaseBindComponentProps, \"children\" | \"name\"> {\n name?: string;\n children?: ((props: BindComponentRenderProp) => React.ReactElement) | React.ReactElement;\n}\n\nexport type BindComponent = React.FC<BindComponentProps> & {\n parentName?: string;\n};\n"],"mappings":""}
|