@webiny/api-headless-cms 5.25.0 → 5.26.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/content/graphQLHandlerFactory.js +3 -1
  2. package/content/graphQLHandlerFactory.js.map +1 -1
  3. package/content/plugins/crud/contentEntry/afterDelete.js +1 -2
  4. package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -1
  5. package/content/plugins/crud/contentEntry.crud.d.ts +2 -0
  6. package/content/plugins/crud/contentEntry.crud.js +71 -72
  7. package/content/plugins/crud/contentEntry.crud.js.map +1 -1
  8. package/content/plugins/crud/contentModel/beforeDelete.js +0 -2
  9. package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -1
  10. package/content/plugins/crud/contentModel.crud.js +21 -12
  11. package/content/plugins/crud/contentModel.crud.js.map +1 -1
  12. package/content/plugins/crud/contentModelGroup.crud.js +38 -45
  13. package/content/plugins/crud/contentModelGroup.crud.js.map +1 -1
  14. package/content/plugins/crud/index.js +5 -3
  15. package/content/plugins/crud/index.js.map +1 -1
  16. package/content/plugins/graphqlFields/longText.js +1 -0
  17. package/content/plugins/graphqlFields/longText.js.map +1 -1
  18. package/content/plugins/graphqlFields/text.js +1 -0
  19. package/content/plugins/graphqlFields/text.js.map +1 -1
  20. package/content/plugins/schema/contentEntries.js +6 -9
  21. package/content/plugins/schema/contentEntries.js.map +1 -1
  22. package/content/plugins/validators/unique.js +0 -1
  23. package/content/plugins/validators/unique.js.map +1 -1
  24. package/package.json +24 -25
  25. package/plugins/context.js +9 -3
  26. package/plugins/context.js.map +1 -1
  27. package/plugins/crud/index.js +7 -4
  28. package/plugins/crud/index.js.map +1 -1
  29. package/plugins/crud/settings.crud.js +0 -1
  30. package/plugins/crud/settings.crud.js.map +1 -1
  31. package/plugins/crud/system.crud.d.ts +2 -0
  32. package/plugins/crud/system.crud.js +5 -4
  33. package/plugins/crud/system.crud.js.map +1 -1
  34. package/types.d.ts +59 -107
  35. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["contentModel.crud.ts"],"names":["createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","model","managers","Map","updateManager","manager","set","modelId","checkModelPermissions","check","utils","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","fields","lockedFields","layout","publish","createdModel","create","clearAll","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","Object","keys","length","groupData","modelFields","deleteModel","delete","ex","WebinyError","message","error","getManagers"],"mappings":"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","sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n BeforeModelCreateTopicParams,\n AfterModelCreateTopicParams,\n BeforeModelUpdateTopicParams,\n AfterModelUpdateTopicParams,\n BeforeModelDeleteTopicParams,\n AfterModelDeleteTopicParams,\n BeforeModelCreateFromTopicParams,\n AfterModelCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport { validateLayout } from \"./contentModel/validateLayout\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeModelCreate } from \"./contentModel/beforeCreate\";\nimport { assignBeforeModelUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignBeforeModelDelete } from \"./contentModel/beforeDelete\";\nimport { assignAfterModelCreate } from \"./contentModel/afterCreate\";\nimport { assignAfterModelUpdate } from \"./contentModel/afterUpdate\";\nimport { assignAfterModelDelete } from \"./contentModel/afterDelete\";\nimport { assignAfterModelCreateFrom } from \"~/content/plugins/crud/contentModel/afterCreateFrom\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return utils.checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return utils.filterAsync(models, async model => {\n if (!utils.validateOwnership(context, permission, model)) {\n return false;\n }\n return utils.validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n utils.checkOwnership(context, permission, model);\n await utils.checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n const onBeforeModelCreate = createTopic<BeforeModelCreateTopicParams>();\n const onAfterModelCreate = createTopic<AfterModelCreateTopicParams>();\n const onBeforeModelCreateFrom = createTopic<BeforeModelCreateFromTopicParams>();\n const onAfterModelCreateFrom = createTopic<AfterModelCreateFromTopicParams>();\n const onBeforeModelUpdate = createTopic<BeforeModelUpdateTopicParams>();\n const onAfterModelUpdate = createTopic<AfterModelUpdateTopicParams>();\n const onBeforeModelDelete = createTopic<BeforeModelDeleteTopicParams>();\n const onAfterModelDelete = createTopic<AfterModelDeleteTopicParams>();\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeModelCreate({\n onBeforeModelCreate,\n onBeforeModelCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelCreate({\n context,\n onAfterModelCreate\n });\n assignBeforeModelUpdate({\n onBeforeModelUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelUpdate({\n context,\n onAfterModelUpdate\n });\n assignAfterModelCreateFrom({\n context,\n onAfterModelCreateFrom\n });\n assignBeforeModelDelete({\n onBeforeModelDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelDelete({\n context,\n onAfterModelDelete\n });\n\n return {\n onBeforeModelCreate,\n onAfterModelCreate,\n onBeforeModelCreateFrom,\n onAfterModelCreateFrom,\n onBeforeModelUpdate,\n onAfterModelUpdate,\n onBeforeModelDelete,\n onAfterModelDelete,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description,\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString() as any,\n savedOn: new Date().toISOString() as any,\n fields: [],\n lockedFields: [],\n layout: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n input,\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelUpdate.publish({\n input: {} as any,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n original,\n model,\n input: {} as any\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onAfterModelUpdate.publish({\n input: {} as any,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description,\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n input,\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n return {} as any;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const modelFields = await createFieldModels(original, inputData);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields: modelFields,\n savedOn: new Date().toISOString() as any\n };\n validateLayout(model, modelFields);\n\n await onBeforeModelUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n original,\n model,\n input\n });\n\n await updateManager(context, resultModel);\n\n await onAfterModelUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onBeforeModelDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onAfterModelDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n getModelManager,\n getManagers: () => managers\n };\n};\n"]}
1
+ {"version":3,"sources":["contentModel.crud.ts"],"names":["createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","model","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","set","modelId","checkModelPermissions","check","utils","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","fields","lockedFields","layout","publish","createdModel","create","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","keys","length","groupData","modelFields","deleteModel","delete","ex","WebinyError","message","error","getEntryManager","getManagers","getEntryManagers"],"mappings":"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","sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n BeforeModelCreateTopicParams,\n AfterModelCreateTopicParams,\n BeforeModelUpdateTopicParams,\n AfterModelUpdateTopicParams,\n BeforeModelDeleteTopicParams,\n AfterModelDeleteTopicParams,\n BeforeModelCreateFromTopicParams,\n AfterModelCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport { validateLayout } from \"./contentModel/validateLayout\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeModelCreate } from \"./contentModel/beforeCreate\";\nimport { assignBeforeModelUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignBeforeModelDelete } from \"./contentModel/beforeDelete\";\nimport { assignAfterModelCreate } from \"./contentModel/afterCreate\";\nimport { assignAfterModelUpdate } from \"./contentModel/afterUpdate\";\nimport { assignAfterModelDelete } from \"./contentModel/afterDelete\";\nimport { assignAfterModelCreateFrom } from \"~/content/plugins/crud/contentModel/afterCreateFrom\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return utils.checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return utils.filterAsync(models, async model => {\n if (!utils.validateOwnership(context, permission, model)) {\n return false;\n }\n return utils.validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n utils.checkOwnership(context, permission, model);\n await utils.checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n const onBeforeModelCreate = createTopic<BeforeModelCreateTopicParams>();\n const onAfterModelCreate = createTopic<AfterModelCreateTopicParams>();\n const onBeforeModelCreateFrom = createTopic<BeforeModelCreateFromTopicParams>();\n const onAfterModelCreateFrom = createTopic<AfterModelCreateFromTopicParams>();\n const onBeforeModelUpdate = createTopic<BeforeModelUpdateTopicParams>();\n const onAfterModelUpdate = createTopic<AfterModelUpdateTopicParams>();\n const onBeforeModelDelete = createTopic<BeforeModelDeleteTopicParams>();\n const onAfterModelDelete = createTopic<AfterModelDeleteTopicParams>();\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeModelCreate({\n onBeforeModelCreate,\n onBeforeModelCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelCreate({\n context,\n onAfterModelCreate\n });\n assignBeforeModelUpdate({\n onBeforeModelUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelUpdate({\n context,\n onAfterModelUpdate\n });\n assignAfterModelCreateFrom({\n context,\n onAfterModelCreateFrom\n });\n assignBeforeModelDelete({\n onBeforeModelDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelDelete({\n context,\n onAfterModelDelete\n });\n\n return {\n onBeforeModelCreate,\n onAfterModelCreate,\n onBeforeModelCreateFrom,\n onAfterModelCreateFrom,\n onBeforeModelUpdate,\n onAfterModelUpdate,\n onBeforeModelDelete,\n onAfterModelDelete,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description || \"\",\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n fields: [],\n lockedFields: [],\n layout: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onAfterModelUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const modelFields = await createFieldModels(original, inputData);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields: modelFields,\n savedOn: new Date().toISOString() as any\n };\n validateLayout(model, modelFields);\n\n await onBeforeModelUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onAfterModelUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onBeforeModelDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onAfterModelDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"]}
@@ -31,6 +31,8 @@ var _beforeCreate = require("./contentModelGroup/beforeCreate");
31
31
 
32
32
  var _beforeDelete = require("./contentModelGroup/beforeDelete");
33
33
 
34
+ var _dataloader = _interopRequireDefault(require("dataloader"));
35
+
34
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
37
 
36
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -73,6 +75,31 @@ const createModelGroupsCrud = params => {
73
75
  storageOperations,
74
76
  context
75
77
  } = params;
78
+ const dataLoaders = {
79
+ listGroups: new _dataloader.default(async () => {
80
+ const tenant = getTenant().id;
81
+ const locale = getLocale().code;
82
+ const pluginsGroups = getGroupsAsPlugins().map(group => {
83
+ return _objectSpread(_objectSpread({}, group), {}, {
84
+ tenant: group.tenant || tenant,
85
+ locale: group.locale || locale
86
+ });
87
+ });
88
+ const groups = await storageOperations.groups.list({
89
+ where: {
90
+ tenant: getTenant().id,
91
+ locale: getLocale().code
92
+ }
93
+ });
94
+ return [groups.concat(pluginsGroups)];
95
+ })
96
+ };
97
+
98
+ const clearGroupsCache = () => {
99
+ for (const loader of Object.values(dataLoaders)) {
100
+ loader.clearAll();
101
+ }
102
+ };
76
103
 
77
104
  const getGroupsAsPlugins = () => {
78
105
  const tenant = getTenant().id;
@@ -111,59 +138,23 @@ const createModelGroupsCrud = params => {
111
138
  };
112
139
 
113
140
  const groupsGet = async id => {
114
- const groupPlugin = getGroupsAsPlugins().find(group => group.id === id);
115
-
116
- if (groupPlugin) {
117
- return groupPlugin;
118
- }
119
-
120
- const tenant = getTenant().id;
121
- const locale = getLocale().code;
122
- let group = null;
123
-
124
- try {
125
- group = await storageOperations.groups.get({
126
- tenant,
127
- locale,
128
- id
129
- });
130
- } catch (ex) {
131
- throw new _error.default(ex.message, ex.code || "GET_ERROR", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
132
- id
133
- }));
134
- }
141
+ const groups = await dataLoaders.listGroups.load("listGroups");
142
+ const group = groups.find(g => g.id === id);
135
143
 
136
144
  if (!group) {
137
145
  throw new _handlerGraphql.NotFoundError(`Cms Group "${id}" was not found!`);
138
146
  }
139
147
 
140
- return _objectSpread(_objectSpread({}, group), {}, {
141
- tenant: group.tenant || tenant,
142
- locale: group.locale || locale
143
- });
148
+ return group;
144
149
  };
145
150
 
146
151
  const groupsList = async params => {
147
152
  const {
148
153
  where
149
154
  } = params || {};
150
- const tenant = getTenant().id;
151
- const locale = getLocale().code;
152
155
 
153
156
  try {
154
- const pluginsGroups = getGroupsAsPlugins();
155
- const databaseGroups = await storageOperations.groups.list({
156
- where: _objectSpread(_objectSpread({}, where || {}), {}, {
157
- tenant: where ? where.tenant : tenant,
158
- locale: where ? where.locale : locale
159
- })
160
- });
161
- return pluginsGroups.concat(databaseGroups.map(group => {
162
- return _objectSpread(_objectSpread({}, group), {}, {
163
- tenant: group.tenant || tenant,
164
- locale: group.locale || locale
165
- });
166
- }));
157
+ return await dataLoaders.listGroups.load("listGroups");
167
158
  } catch (ex) {
168
159
  throw new _error.default(ex.message, ex.code || "LIST_ERROR", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
169
160
  where
@@ -202,6 +193,7 @@ const createModelGroupsCrud = params => {
202
193
  onAfterGroupUpdate: onAfterUpdate,
203
194
  onBeforeGroupDelete: onBeforeDelete,
204
195
  onAfterGroupDelete: onAfterDelete,
196
+ clearGroupsCache,
205
197
  getGroup: async id => {
206
198
  const permission = await checkPermissions("r");
207
199
  const group = await groupsGet(id);
@@ -235,7 +227,8 @@ const createModelGroupsCrud = params => {
235
227
  createGroup: async inputData => {
236
228
  await checkPermissions("w");
237
229
  const createdData = new CreateContentModelGroupModel().populate(_objectSpread(_objectSpread({}, inputData), {}, {
238
- slug: inputData.slug ? utils.toSlug(inputData.slug) : ""
230
+ slug: inputData.slug ? utils.toSlug(inputData.slug) : "",
231
+ description: inputData.description || ""
239
232
  }));
240
233
  await createdData.validate();
241
234
  const input = await createdData.toJSON();
@@ -261,9 +254,9 @@ const createModelGroupsCrud = params => {
261
254
  group
262
255
  });
263
256
  const result = await storageOperations.groups.create({
264
- input,
265
257
  group
266
258
  });
259
+ clearGroupsCache();
267
260
  await onAfterCreate.publish({
268
261
  group: result
269
262
  });
@@ -304,10 +297,9 @@ const createModelGroupsCrud = params => {
304
297
  group
305
298
  });
306
299
  const updatedGroup = await storageOperations.groups.update({
307
- original,
308
- group,
309
- input
300
+ group
310
301
  });
302
+ clearGroupsCache();
311
303
  await onAfterUpdate.publish({
312
304
  original,
313
305
  group: updatedGroup
@@ -334,6 +326,7 @@ const createModelGroupsCrud = params => {
334
326
  await storageOperations.groups.delete({
335
327
  group
336
328
  });
329
+ clearGroupsCache();
337
330
  await onAfterDelete.publish({
338
331
  group
339
332
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["contentModelGroup.crud.ts"],"names":["CreateContentModelGroupModel","name","validation","create","slug","description","icon","UpdateContentModelGroupModel","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","getGroupsAsPlugins","tenant","id","locale","code","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","map","webinyVersion","WEBINY_VERSION","checkPermissions","check","utils","rwd","groupsGet","groupPlugin","find","group","groups","get","ex","WebinyError","message","data","NotFoundError","groupsList","where","pluginsGroups","databaseGroups","list","concat","onBeforeCreate","onAfterCreate","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","listGroups","response","validateOwnership","createGroup","inputData","createdData","populate","toSlug","validate","input","toJSON","identity","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","result","updateGroup","original","updatedDataJson","onlyDirty","Object","keys","length","updatedGroup","update","error","deleteGroup","delete"],"mappings":"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","sourcesContent":["/**\n * Package @commodo/fields does not have types.\n */\n// @ts-ignore\nimport { withFields, string } from \"@commodo/fields\";\nimport { validation } from \"@webiny/validation\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n CmsGroupCreateInput,\n BeforeGroupCreateTopicParams,\n AfterGroupCreateTopicParams,\n BeforeGroupUpdateTopicParams,\n AfterGroupUpdateTopicParams,\n BeforeGroupDeleteTopicParams,\n AfterGroupDeleteTopicParams\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeGroupUpdate } from \"~/content/plugins/crud/contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"~/content/plugins/crud/contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"~/content/plugins/crud/contentModelGroup/beforeDelete\";\n\nconst CreateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"required,maxLength:100\") }),\n slug: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"required,maxLength:255\") })\n})();\n\nconst UpdateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"maxLength:255\") })\n})();\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const getGroupsAsPlugins = (): CmsGroup[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n /**\n * We need to filter out groups that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return utils.checkPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const groupsGet = async (id: string) => {\n const groupPlugin = getGroupsAsPlugins().find(group => group.id === id);\n\n if (groupPlugin) {\n return groupPlugin;\n }\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n let group: CmsGroup | null = null;\n try {\n group = await storageOperations.groups.get({\n tenant,\n locale,\n id\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"GET_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n };\n\n const groupsList = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n const tenant = getTenant().id;\n const locale = getLocale().code;\n try {\n const pluginsGroups = getGroupsAsPlugins();\n\n const databaseGroups = await storageOperations.groups.list({\n where: {\n ...(where || {}),\n tenant: where ? where.tenant : tenant,\n locale: where ? where.locale : locale\n }\n });\n\n return pluginsGroups.concat(\n databaseGroups.map(group => {\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n })\n );\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"LIST_ERROR\", {\n ...(ex.data || {}),\n where\n });\n }\n };\n\n const onBeforeCreate = createTopic<BeforeGroupCreateTopicParams>();\n const onAfterCreate = createTopic<AfterGroupCreateTopicParams>();\n const onBeforeUpdate = createTopic<BeforeGroupUpdateTopicParams>();\n const onAfterUpdate = createTopic<AfterGroupUpdateTopicParams>();\n const onBeforeDelete = createTopic<BeforeGroupDeleteTopicParams>();\n const onAfterDelete = createTopic<AfterGroupDeleteTopicParams>();\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n\n return {\n onBeforeGroupCreate: onBeforeCreate,\n onAfterGroupCreate: onAfterCreate,\n onBeforeGroupUpdate: onBeforeUpdate,\n onAfterGroupUpdate: onAfterUpdate,\n onBeforeGroupDelete: onBeforeDelete,\n onAfterGroupDelete: onAfterDelete,\n getGroup: async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await groupsGet(id);\n utils.checkOwnership(context, permission, group);\n utils.validateGroupAccess(context, permission, group);\n\n return group;\n },\n listGroups: async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await groupsList({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!utils.validateOwnership(context, permission, group)) {\n return false;\n }\n return utils.validateGroupAccess(context, permission, group);\n });\n },\n createGroup: async inputData => {\n await checkPermissions(\"w\");\n\n const createdData = new CreateContentModelGroupModel().populate({\n ...inputData,\n slug: inputData.slug ? utils.toSlug(inputData.slug) : \"\"\n });\n await createdData.validate();\n const input: CmsGroupCreateInput & { slug: string } = await createdData.toJSON();\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...input,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n input,\n group\n });\n\n await onAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n },\n updateGroup: async (id, inputData) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await groupsGet(id);\n\n utils.checkOwnership(context, permission, original);\n\n const input = new UpdateContentModelGroupModel().populate(inputData);\n await input.validate();\n\n const updatedDataJson: Partial<CmsGroup> = await input.toJSON({\n onlyDirty: true\n });\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(updatedDataJson).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...updatedDataJson,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n original,\n group,\n input\n });\n\n await onAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n },\n deleteGroup: async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await groupsGet(id);\n\n utils.checkOwnership(context, permission, group);\n\n try {\n await onBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n\n await onAfterDelete.publish({\n group\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n }\n };\n};\n"]}
1
+ {"version":3,"sources":["contentModelGroup.crud.ts"],"names":["CreateContentModelGroupModel","name","validation","create","slug","description","icon","UpdateContentModelGroupModel","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","groups","list","where","concat","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","checkPermissions","check","utils","rwd","groupsGet","load","find","g","NotFoundError","groupsList","ex","WebinyError","message","data","onBeforeCreate","onAfterCreate","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","response","validateOwnership","createGroup","inputData","createdData","populate","toSlug","validate","input","toJSON","identity","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","result","updateGroup","original","updatedDataJson","onlyDirty","keys","length","updatedGroup","update","error","deleteGroup","delete"],"mappings":";;;;;;;;;;;AAIA;;AACA;;AAKA;;AAgBA;;AACA;;AACA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,MAAMA,4BAA4B,GAAG,wBAAW;AAC5CC,EAAAA,IAAI,EAAE,oBAAO;AAAEC,IAAAA,UAAU,EAAEA,uBAAWC,MAAX,CAAkB,wBAAlB;AAAd,GAAP,CADsC;AAE5CC,EAAAA,IAAI,EAAE,oBAAO;AAAEF,IAAAA,UAAU,EAAEA,uBAAWC,MAAX,CAAkB,eAAlB;AAAd,GAAP,CAFsC;AAG5CE,EAAAA,WAAW,EAAE,oBAAO;AAAEH,IAAAA,UAAU,EAAEA,uBAAWC,MAAX,CAAkB,eAAlB;AAAd,GAAP,CAH+B;AAI5CG,EAAAA,IAAI,EAAE,oBAAO;AAAEJ,IAAAA,UAAU,EAAEA,uBAAWC,MAAX,CAAkB,wBAAlB;AAAd,GAAP;AAJsC,CAAX,GAArC;AAOA,MAAMI,4BAA4B,GAAG,wBAAW;AAC5CN,EAAAA,IAAI,EAAE,oBAAO;AAAEC,IAAAA,UAAU,EAAEA,uBAAWC,MAAX,CAAkB,eAAlB;AAAd,GAAP,CADsC;AAE5CE,EAAAA,WAAW,EAAE,oBAAO;AAAEH,IAAAA,UAAU,EAAEA,uBAAWC,MAAX,CAAkB,eAAlB;AAAd,GAAP,CAF+B;AAG5CG,EAAAA,IAAI,EAAE,oBAAO;AAAEJ,IAAAA,UAAU,EAAEA,uBAAWC,MAAX,CAAkB,eAAlB;AAAd,GAAP;AAHsC,CAAX,GAArC;;AAaO,MAAMK,qBAAqB,GAAIC,MAAD,IAA0D;AAC3F,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,WAAb;AAA0BC,IAAAA,SAA1B;AAAqCC,IAAAA,iBAArC;AAAwDC,IAAAA;AAAxD,MAAoEL,MAA1E;AAEA,QAAMM,WAAW,GAAG;AAChBC,IAAAA,UAAU,EAAE,IAAIC,mBAAJ,CAAe,YAAY;AACnC,YAAMC,MAAM,GAAGR,SAAS,GAAGS,EAA3B;AACA,YAAMC,MAAM,GAAGR,SAAS,GAAGS,IAA3B;AAEA,YAAMC,aAAa,GAAGC,kBAAkB,GAAGC,GAArB,CAAyBC,KAAK,IAAI;AACpD,+CACOA,KADP;AAEIP,UAAAA,MAAM,EAAEO,KAAK,CAACP,MAAN,IAAgBA,MAF5B;AAGIE,UAAAA,MAAM,EAAEK,KAAK,CAACL,MAAN,IAAgBA;AAH5B;AAKH,OANqB,CAAtB;AAQA,YAAMM,MAAM,GAAG,MAAMb,iBAAiB,CAACa,MAAlB,CAAyBC,IAAzB,CAA8B;AAC/CC,QAAAA,KAAK,EAAE;AACHV,UAAAA,MAAM,EAAER,SAAS,GAAGS,EADjB;AAEHC,UAAAA,MAAM,EAAER,SAAS,GAAGS;AAFjB;AADwC,OAA9B,CAArB;AAOA,aAAO,CAACK,MAAM,CAACG,MAAP,CAAcP,aAAd,CAAD,CAAP;AACH,KApBW;AADI,GAApB;;AAwBA,QAAMQ,gBAAgB,GAAG,MAAY;AACjC,SAAK,MAAMC,MAAX,IAAqBC,MAAM,CAACC,MAAP,CAAclB,WAAd,CAArB,EAAiD;AAC7CgB,MAAAA,MAAM,CAACG,QAAP;AACH;AACJ,GAJD;;AAMA,QAAMX,kBAAkB,GAAG,MAAkB;AACzC,UAAML,MAAM,GAAGR,SAAS,GAAGS,EAA3B;AACA,UAAMC,MAAM,GAAGR,SAAS,GAAGS,IAA3B;AAEA,WACIP,OAAO,CAACqB,OAAR,CACKC,MADL,CAC4BC,+BAAeC,IAD3C;AAEI;AAChB;AACA;AACA;AALY,KAMKC,MANL,CAMYC,MAAM,IAAI;AACd,YAAM;AAAEtB,QAAAA,MAAM,EAAEuB,CAAV;AAAarB,QAAAA,MAAM,EAAEsB;AAArB,UAA2BF,MAAM,CAACG,iBAAxC;;AACA,UAAIF,CAAC,IAAIA,CAAC,KAAKvB,MAAf,EAAuB;AACnB,eAAO,KAAP;AACH,OAFD,MAEO,IAAIwB,CAAC,IAAIA,CAAC,KAAKtB,MAAf,EAAuB;AAC1B,eAAO,KAAP;AACH;;AACD,aAAO,IAAP;AACH,KAdL,EAeKI,GAfL,CAeSgB,MAAM,IAAI;AACX,6CACOA,MAAM,CAACG,iBADd;AAEIzB,QAAAA,MAFJ;AAGIE,QAAAA,MAHJ;AAIIwB,QAAAA,aAAa,EAAE9B,OAAO,CAAC+B;AAJ3B;AAMH,KAtBL,CADJ;AAyBH,GA7BD;;AA+BA,QAAMC,gBAAgB,GAAIC,KAAD,IAAgD;AACrE,WAAOC,KAAK,CAACF,gBAAN,CAAuBhC,OAAvB,EAAgC,uBAAhC,EAAyD;AAAEmC,MAAAA,GAAG,EAAEF;AAAP,KAAzD,CAAP;AACH,GAFD;;AAIA,QAAMG,SAAS,GAAG,MAAO/B,EAAP,IAAsB;AACpC,UAAMO,MAAM,GAAG,MAAMX,WAAW,CAACC,UAAZ,CAAuBmC,IAAvB,CAA4B,YAA5B,CAArB;AAEA,UAAM1B,KAAK,GAAGC,MAAM,CAAC0B,IAAP,CAAYC,CAAC,IAAIA,CAAC,CAAClC,EAAF,KAASA,EAA1B,CAAd;;AAEA,QAAI,CAACM,KAAL,EAAY;AACR,YAAM,IAAI6B,6BAAJ,CAAmB,cAAanC,EAAG,kBAAnC,CAAN;AACH;;AACD,WAAOM,KAAP;AACH,GATD;;AAWA,QAAM8B,UAAU,GAAG,MAAO9C,MAAP,IAAsC;AACrD,UAAM;AAAEmB,MAAAA;AAAF,QAAYnB,MAAM,IAAI,EAA5B;;AAEA,QAAI;AACA,aAAO,MAAMM,WAAW,CAACC,UAAZ,CAAuBmC,IAAvB,CAA4B,YAA5B,CAAb;AACH,KAFD,CAEE,OAAOK,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CAAgBD,EAAE,CAACE,OAAnB,EAA4BF,EAAE,CAACnC,IAAH,IAAW,YAAvC,kCACEmC,EAAE,CAACG,IAAH,IAAW,EADb;AAEF/B,QAAAA;AAFE,SAAN;AAIH;AACJ,GAXD;;AAaA,QAAMgC,cAAc,GAAG,0BAAvB;AACA,QAAMC,aAAa,GAAG,0BAAtB;AACA,QAAMC,cAAc,GAAG,0BAAvB;AACA,QAAMC,aAAa,GAAG,0BAAtB;AACA,QAAMC,cAAc,GAAG,0BAAvB;AACA,QAAMC,aAAa,GAAG,0BAAtB;AAEA;AACJ;AACA;;AACI,6CAAwB;AACpBL,IAAAA,cADoB;AAEpBzB,IAAAA,OAAO,EAAErB,OAAO,CAACqB,OAFG;AAGpBtB,IAAAA;AAHoB,GAAxB;AAKA,6CAAwB;AACpBiD,IAAAA,cADoB;AAEpB3B,IAAAA,OAAO,EAAErB,OAAO,CAACqB;AAFG,GAAxB;AAIA,6CAAwB;AACpB6B,IAAAA,cADoB;AAEpB7B,IAAAA,OAAO,EAAErB,OAAO,CAACqB,OAFG;AAGpBtB,IAAAA;AAHoB,GAAxB;AAMA,SAAO;AACHqD,IAAAA,mBAAmB,EAAEN,cADlB;AAEHO,IAAAA,kBAAkB,EAAEN,aAFjB;AAGHO,IAAAA,mBAAmB,EAAEN,cAHlB;AAIHO,IAAAA,kBAAkB,EAAEN,aAJjB;AAKHO,IAAAA,mBAAmB,EAAEN,cALlB;AAMHO,IAAAA,kBAAkB,EAAEN,aANjB;AAOHnC,IAAAA,gBAPG;AAQH0C,IAAAA,QAAQ,EAAE,MAAMrD,EAAN,IAAY;AAClB,YAAMsD,UAAU,GAAG,MAAM3B,gBAAgB,CAAC,GAAD,CAAzC;AAEA,YAAMrB,KAAK,GAAG,MAAMyB,SAAS,CAAC/B,EAAD,CAA7B;AACA6B,MAAAA,KAAK,CAAC0B,cAAN,CAAqB5D,OAArB,EAA8B2D,UAA9B,EAA0ChD,KAA1C;AACAuB,MAAAA,KAAK,CAAC2B,mBAAN,CAA0B7D,OAA1B,EAAmC2D,UAAnC,EAA+ChD,KAA/C;AAEA,aAAOA,KAAP;AACH,KAhBE;AAiBHT,IAAAA,UAAU,EAAE,MAAMP,MAAN,IAAgB;AACxB,YAAM;AAAEmB,QAAAA;AAAF,UAAYnB,MAAM,IAAI,EAA5B;AAEA,YAAM;AAAES,QAAAA,MAAF;AAAUE,QAAAA;AAAV,UAAqBQ,KAAK,IAAI,EAApC;AACA,YAAM6C,UAAU,GAAG,MAAM3B,gBAAgB,CAAC,GAAD,CAAzC;AAEA,YAAM8B,QAAQ,GAAG,MAAMrB,UAAU,iCACzB9C,MAAM,IAAI,EADe;AAE7BmB,QAAAA,KAAK,kCACGA,KAAK,IAAI,EADZ;AAEDV,UAAAA,MAAM,EAAEA,MAAM,IAAIR,SAAS,GAAGS,EAF7B;AAGDC,UAAAA,MAAM,EAAEA,MAAM,IAAIR,SAAS,GAAGS;AAH7B;AAFwB,SAAjC;AASA,aAAOuD,QAAQ,CAACrC,MAAT,CAAgBd,KAAK,IAAI;AAC5B,YAAI,CAACuB,KAAK,CAAC6B,iBAAN,CAAwB/D,OAAxB,EAAiC2D,UAAjC,EAA6ChD,KAA7C,CAAL,EAA0D;AACtD,iBAAO,KAAP;AACH;;AACD,eAAOuB,KAAK,CAAC2B,mBAAN,CAA0B7D,OAA1B,EAAmC2D,UAAnC,EAA+ChD,KAA/C,CAAP;AACH,OALM,CAAP;AAMH,KAtCE;AAuCHqD,IAAAA,WAAW,EAAE,MAAMC,SAAN,IAAmB;AAC5B,YAAMjC,gBAAgB,CAAC,GAAD,CAAtB;AAEA,YAAMkC,WAAW,GAAG,IAAIhF,4BAAJ,GAAmCiF,QAAnC,iCACbF,SADa;AAEhB3E,QAAAA,IAAI,EAAE2E,SAAS,CAAC3E,IAAV,GAAiB4C,KAAK,CAACkC,MAAN,CAAaH,SAAS,CAAC3E,IAAvB,CAAjB,GAAgD,EAFtC;AAGhBC,QAAAA,WAAW,EAAE0E,SAAS,CAAC1E,WAAV,IAAyB;AAHtB,SAApB;AAKA,YAAM2E,WAAW,CAACG,QAAZ,EAAN;AACA,YAAMC,KAAkE,GACpE,MAAMJ,WAAW,CAACK,MAAZ,EADV;AAGA,YAAMC,QAAQ,GAAG3E,WAAW,EAA5B;AAEA,YAAMQ,EAAE,GAAG,qBAAX;;AACA,YAAMM,KAAe,mCACd2D,KADc;AAEjBjE,QAAAA,EAFiB;AAGjBD,QAAAA,MAAM,EAAER,SAAS,GAAGS,EAHH;AAIjBC,QAAAA,MAAM,EAAER,SAAS,GAAGS,IAJH;AAKjBkE,QAAAA,SAAS,EAAE,IAAIC,IAAJ,GAAWC,WAAX,EALM;AAMjBC,QAAAA,OAAO,EAAE,IAAIF,IAAJ,GAAWC,WAAX,EANQ;AAOjBE,QAAAA,SAAS,EAAE;AACPxE,UAAAA,EAAE,EAAEmE,QAAQ,CAACnE,EADN;AAEPyE,UAAAA,WAAW,EAAEN,QAAQ,CAACM,WAFf;AAGPtD,UAAAA,IAAI,EAAEgD,QAAQ,CAAChD;AAHR,SAPM;AAYjBM,QAAAA,aAAa,EAAE9B,OAAO,CAAC+B;AAZN,QAArB;;AAcA,UAAI;AACA,cAAMe,cAAc,CAACiC,OAAf,CAAuB;AACzBpE,UAAAA;AADyB,SAAvB,CAAN;AAIA,cAAMqE,MAAM,GAAG,MAAMjF,iBAAiB,CAACa,MAAlB,CAAyBvB,MAAzB,CAAgC;AACjDsB,UAAAA;AADiD,SAAhC,CAArB;AAIAK,QAAAA,gBAAgB;AAEhB,cAAM+B,aAAa,CAACgC,OAAd,CAAsB;AACxBpE,UAAAA,KAAK,EAAEqE;AADiB,SAAtB,CAAN;AAIA,eAAOrE,KAAP;AACH,OAhBD,CAgBE,OAAO+B,EAAP,EAAW;AACT,cAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,kCADZ,EAEFF,EAAE,CAACnC,IAAH,IAAW,iBAFT,kCAIMmC,EAAE,CAACG,IAAH,IAAW,EAJjB;AAKElC,UAAAA,KALF;AAME2D,UAAAA;AANF,WAAN;AASH;AACJ,KA/FE;AAgGHW,IAAAA,WAAW,EAAE,OAAO5E,EAAP,EAAW4D,SAAX,KAAyB;AAClC,YAAMN,UAAU,GAAG,MAAM3B,gBAAgB,CAAC,GAAD,CAAzC;AAEA,YAAMkD,QAAQ,GAAG,MAAM9C,SAAS,CAAC/B,EAAD,CAAhC;AAEA6B,MAAAA,KAAK,CAAC0B,cAAN,CAAqB5D,OAArB,EAA8B2D,UAA9B,EAA0CuB,QAA1C;AAEA,YAAMZ,KAAK,GAAG,IAAI7E,4BAAJ,GAAmC0E,QAAnC,CAA4CF,SAA5C,CAAd;AACA,YAAMK,KAAK,CAACD,QAAN,EAAN;AAEA,YAAMc,eAAkC,GAAG,MAAMb,KAAK,CAACC,MAAN,CAAa;AAC1Da,QAAAA,SAAS,EAAE;AAD+C,OAAb,CAAjD;AAIA;AACZ;AACA;;AACY,UAAIlE,MAAM,CAACmE,IAAP,CAAYF,eAAZ,EAA6BG,MAA7B,KAAwC,CAA5C,EAA+C;AAC3C,eAAOJ,QAAP;AACH;;AAED,YAAMvE,KAAe,iDACduE,QADc,GAEdC,eAFc;AAGjB7E,QAAAA,MAAM,EAAER,SAAS,GAAGS,IAHH;AAIjBH,QAAAA,MAAM,EAAER,SAAS,GAAGS,EAJH;AAKjBuE,QAAAA,OAAO,EAAE,IAAIF,IAAJ,GAAWC,WAAX;AALQ,QAArB;;AAQA,UAAI;AACA,cAAM3B,cAAc,CAAC+B,OAAf,CAAuB;AACzBG,UAAAA,QADyB;AAEzBvE,UAAAA;AAFyB,SAAvB,CAAN;AAKA,cAAM4E,YAAY,GAAG,MAAMxF,iBAAiB,CAACa,MAAlB,CAAyB4E,MAAzB,CAAgC;AACvD7E,UAAAA;AADuD,SAAhC,CAA3B;AAGAK,QAAAA,gBAAgB;AAEhB,cAAMiC,aAAa,CAAC8B,OAAd,CAAsB;AACxBG,UAAAA,QADwB;AAExBvE,UAAAA,KAAK,EAAE4E;AAFiB,SAAtB,CAAN;AAKA,eAAOA,YAAP;AACH,OAjBD,CAiBE,OAAO7C,EAAP,EAAW;AACT,cAAM,IAAIC,cAAJ,CAAgBD,EAAE,CAACE,OAAnB,EAA4BF,EAAE,CAACnC,IAAH,IAAW,cAAvC,EAAuD;AACzDkF,UAAAA,KAAK,EAAE/C,EADkD;AAEzDwC,UAAAA,QAFyD;AAGzDvE,UAAAA,KAHyD;AAIzD2D,UAAAA;AAJyD,SAAvD,CAAN;AAMH;AACJ,KAtJE;AAuJHoB,IAAAA,WAAW,EAAE,MAAMrF,EAAN,IAAY;AACrB,YAAMsD,UAAU,GAAG,MAAM3B,gBAAgB,CAAC,GAAD,CAAzC;AAEA,YAAMrB,KAAK,GAAG,MAAMyB,SAAS,CAAC/B,EAAD,CAA7B;AAEA6B,MAAAA,KAAK,CAAC0B,cAAN,CAAqB5D,OAArB,EAA8B2D,UAA9B,EAA0ChD,KAA1C;;AAEA,UAAI;AACA,cAAMuC,cAAc,CAAC6B,OAAf,CAAuB;AACzBpE,UAAAA;AADyB,SAAvB,CAAN;AAIA,cAAMZ,iBAAiB,CAACa,MAAlB,CAAyB+E,MAAzB,CAAgC;AAAEhF,UAAAA;AAAF,SAAhC,CAAN;AACAK,QAAAA,gBAAgB;AAEhB,cAAMmC,aAAa,CAAC4B,OAAd,CAAsB;AACxBpE,UAAAA;AADwB,SAAtB,CAAN;AAGH,OAXD,CAWE,OAAO+B,EAAP,EAAW;AACT,cAAM,IAAIC,cAAJ,CAAgBD,EAAE,CAACE,OAAnB,EAA4BF,EAAE,CAACnC,IAAH,IAAW,cAAvC,kCACEmC,EAAE,CAACG,IAAH,IAAW,EADb;AAEFxC,UAAAA;AAFE,WAAN;AAIH;;AAED,aAAO,IAAP;AACH;AAjLE,GAAP;AAmLH,CAxSM","sourcesContent":["/**\n * Package @commodo/fields does not have types.\n */\n// @ts-ignore\nimport { withFields, string } from \"@commodo/fields\";\nimport { validation } from \"@webiny/validation\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n CmsGroupCreateInput,\n BeforeGroupCreateTopicParams,\n AfterGroupCreateTopicParams,\n BeforeGroupUpdateTopicParams,\n AfterGroupUpdateTopicParams,\n BeforeGroupDeleteTopicParams,\n AfterGroupDeleteTopicParams\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsGroupPlugin } from \"~/content/plugins/CmsGroupPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeGroupUpdate } from \"~/content/plugins/crud/contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"~/content/plugins/crud/contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"~/content/plugins/crud/contentModelGroup/beforeDelete\";\nimport DataLoader from \"dataloader\";\n\nconst CreateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"required,maxLength:100\") }),\n slug: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"required,maxLength:255\") })\n})();\n\nconst UpdateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"maxLength:255\") })\n})();\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const dataLoaders = {\n listGroups: new DataLoader(async () => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const pluginsGroups = getGroupsAsPlugins().map(group => {\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n });\n\n const groups = await storageOperations.groups.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n\n return [groups.concat(pluginsGroups)];\n })\n };\n\n const clearGroupsCache = (): void => {\n for (const loader of Object.values(dataLoaders)) {\n loader.clearAll();\n }\n };\n\n const getGroupsAsPlugins = (): CmsGroup[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n /**\n * We need to filter out groups that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return utils.checkPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const groupsGet = async (id: string) => {\n const groups = await dataLoaders.listGroups.load(\"listGroups\");\n\n const group = groups.find(g => g.id === id);\n\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return group;\n };\n\n const groupsList = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n\n try {\n return await dataLoaders.listGroups.load(\"listGroups\");\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"LIST_ERROR\", {\n ...(ex.data || {}),\n where\n });\n }\n };\n\n const onBeforeCreate = createTopic<BeforeGroupCreateTopicParams>();\n const onAfterCreate = createTopic<AfterGroupCreateTopicParams>();\n const onBeforeUpdate = createTopic<BeforeGroupUpdateTopicParams>();\n const onAfterUpdate = createTopic<AfterGroupUpdateTopicParams>();\n const onBeforeDelete = createTopic<BeforeGroupDeleteTopicParams>();\n const onAfterDelete = createTopic<AfterGroupDeleteTopicParams>();\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n\n return {\n onBeforeGroupCreate: onBeforeCreate,\n onAfterGroupCreate: onAfterCreate,\n onBeforeGroupUpdate: onBeforeUpdate,\n onAfterGroupUpdate: onAfterUpdate,\n onBeforeGroupDelete: onBeforeDelete,\n onAfterGroupDelete: onAfterDelete,\n clearGroupsCache,\n getGroup: async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await groupsGet(id);\n utils.checkOwnership(context, permission, group);\n utils.validateGroupAccess(context, permission, group);\n\n return group;\n },\n listGroups: async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await groupsList({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!utils.validateOwnership(context, permission, group)) {\n return false;\n }\n return utils.validateGroupAccess(context, permission, group);\n });\n },\n createGroup: async inputData => {\n await checkPermissions(\"w\");\n\n const createdData = new CreateContentModelGroupModel().populate({\n ...inputData,\n slug: inputData.slug ? utils.toSlug(inputData.slug) : \"\",\n description: inputData.description || \"\"\n });\n await createdData.validate();\n const input: CmsGroupCreateInput & { slug: string; description: string } =\n await createdData.toJSON();\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...input,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n },\n updateGroup: async (id, inputData) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await groupsGet(id);\n\n utils.checkOwnership(context, permission, original);\n\n const input = new UpdateContentModelGroupModel().populate(inputData);\n await input.validate();\n\n const updatedDataJson: Partial<CmsGroup> = await input.toJSON({\n onlyDirty: true\n });\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(updatedDataJson).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...updatedDataJson,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n },\n deleteGroup: async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await groupsGet(id);\n\n utils.checkOwnership(context, permission, group);\n\n try {\n await onBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onAfterDelete.publish({\n group\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n }\n };\n};\n"]}
@@ -60,8 +60,8 @@ const createContentCruds = params => {
60
60
  return context.tenancy.getCurrentTenant();
61
61
  };
62
62
 
63
- if (storageOperations.plugins && storageOperations.plugins.length > 0) {
64
- context.plugins.register(storageOperations.plugins);
63
+ if (storageOperations.beforeInit) {
64
+ await storageOperations.beforeInit(context);
65
65
  }
66
66
 
67
67
  context.cms = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, context.cms), {}, {
@@ -69,6 +69,7 @@ const createContentCruds = params => {
69
69
  }, (0, _system.createSystemCrud)({
70
70
  context,
71
71
  getTenant,
72
+ getLocale,
72
73
  getIdentity,
73
74
  storageOperations
74
75
  })), (0, _settings.createSettingsCrud)({
@@ -91,6 +92,7 @@ const createContentCruds = params => {
91
92
  })), (0, _contentEntry.createContentEntryCrud)({
92
93
  context,
93
94
  getIdentity,
95
+ getTenant,
94
96
  storageOperations
95
97
  }));
96
98
 
@@ -98,7 +100,7 @@ const createContentCruds = params => {
98
100
  return;
99
101
  }
100
102
 
101
- await storageOperations.init(context.cms);
103
+ await storageOperations.init(context);
102
104
  });
103
105
  };
104
106
 
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["debug","process","env","DEBUG","createContentCruds","params","storageOperations","ContextPlugin","context","http","request","method","cms","console","log","getLocale","getIdentity","security","getTenant","tenancy","getCurrentTenant","plugins","length","register","init"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,MAAMA,KAAK,GAAGC,OAAO,CAACC,GAAR,CAAYC,KAAZ,KAAsB,MAApC;;AAMO,MAAMC,kBAAkB,GAAIC,MAAD,IAAsC;AACpE,QAAM;AAAEC,IAAAA;AAAF,MAAwBD,MAA9B;AACA,SAAO,IAAIE,sBAAJ,CAA8B,MAAMC,OAAN,IAAiB;AAAA;;AAClD,QAAI,kBAAAA,OAAO,CAACC,IAAR,yFAAcC,OAAd,gFAAuBC,MAAvB,MAAkC,SAAtC,EAAiD;AAC7C;AACH;AAED;AACR;AACA;AACA;;;AACQ,QAAI,CAACH,OAAO,CAACI,GAAb,EAAkB;AACdZ,MAAAA,KAAK,IACDa,OAAO,CAACC,GAAR,CACK,mGADL,CADJ;AAIA;AACH;;AAED,UAAMC,SAAS,GAAG,MAAM;AACpB,aAAOP,OAAO,CAACI,GAAR,CAAYG,SAAZ,EAAP;AACH,KAFD;;AAIA,UAAMC,WAAW,GAAG,MAAM;AACtB,aAAOR,OAAO,CAACS,QAAR,CAAiBD,WAAjB,EAAP;AACH,KAFD;;AAIA,UAAME,SAAS,GAAG,MAAM;AACpB,aAAOV,OAAO,CAACW,OAAR,CAAgBC,gBAAhB,EAAP;AACH,KAFD;;AAIA,QAAId,iBAAiB,CAACe,OAAlB,IAA6Bf,iBAAiB,CAACe,OAAlB,CAA0BC,MAA1B,GAAmC,CAApE,EAAuE;AACnEd,MAAAA,OAAO,CAACa,OAAR,CAAgBE,QAAhB,CAAyBjB,iBAAiB,CAACe,OAA3C;AACH;;AAEDb,IAAAA,OAAO,CAACI,GAAR,2FACOJ,OAAO,CAACI,GADf;AAEIN,MAAAA;AAFJ,OAGO,8BAAiB;AAChBE,MAAAA,OADgB;AAEhBU,MAAAA,SAFgB;AAGhBF,MAAAA,WAHgB;AAIhBV,MAAAA;AAJgB,KAAjB,CAHP,GASO,kCAAmB;AAClBE,MAAAA,OADkB;AAElBU,MAAAA,SAFkB;AAGlBH,MAAAA,SAHkB;AAIlBT,MAAAA;AAJkB,KAAnB,CATP,GAeO,8CAAsB;AACrBE,MAAAA,OADqB;AAErBU,MAAAA,SAFqB;AAGrBH,MAAAA,SAHqB;AAIrBC,MAAAA,WAJqB;AAKrBV,MAAAA;AALqB,KAAtB,CAfP,GAsBO,oCAAiB;AAChBE,MAAAA,OADgB;AAEhBO,MAAAA,SAFgB;AAGhBG,MAAAA,SAHgB;AAIhBF,MAAAA,WAJgB;AAKhBV,MAAAA;AALgB,KAAjB,CAtBP,GA6BO,0CAAuB;AACtBE,MAAAA,OADsB;AAEtBQ,MAAAA,WAFsB;AAGtBV,MAAAA;AAHsB,KAAvB,CA7BP;;AAoCA,QAAI,CAACA,iBAAiB,CAACkB,IAAvB,EAA6B;AACzB;AACH;;AACD,UAAMlB,iBAAiB,CAACkB,IAAlB,CAAuBhB,OAAO,CAACI,GAA/B,CAAN;AACH,GAzEM,CAAP;AA0EH,CA5EM","sourcesContent":["import { ContextPlugin } from \"@webiny/handler\";\nimport { CmsContext, HeadlessCmsStorageOperations } from \"~/types\";\nimport { createModelGroupsCrud } from \"~/content/plugins/crud/contentModelGroup.crud\";\nimport { createModelsCrud } from \"~/content/plugins/crud/contentModel.crud\";\nimport { createContentEntryCrud } from \"~/content/plugins/crud/contentEntry.crud\";\nimport { createSystemCrud } from \"~/plugins/crud/system.crud\";\nimport { createSettingsCrud } from \"~/plugins/crud/settings.crud\";\n\nconst debug = process.env.DEBUG === \"true\";\n\nexport interface CreateContentCrudsParams {\n storageOperations: HeadlessCmsStorageOperations;\n}\n\nexport const createContentCruds = (params: CreateContentCrudsParams) => {\n const { storageOperations } = params;\n return new ContextPlugin<CmsContext>(async context => {\n if (context.http?.request?.method === \"OPTIONS\") {\n return;\n }\n\n /**\n * This should never happen in the actual project.\n * It is to make sure that we load setup context before the CRUD init in our internal code.\n */\n if (!context.cms) {\n debug &&\n console.log(\n `Missing initial \"cms\" on the context. Make sure that you set it up before creating Content CRUDs.`\n );\n return;\n }\n\n const getLocale = () => {\n return context.cms.getLocale();\n };\n\n const getIdentity = () => {\n return context.security.getIdentity();\n };\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n if (storageOperations.plugins && storageOperations.plugins.length > 0) {\n context.plugins.register(storageOperations.plugins);\n }\n\n context.cms = {\n ...context.cms,\n storageOperations,\n ...createSystemCrud({\n context,\n getTenant,\n getIdentity,\n storageOperations\n }),\n ...createSettingsCrud({\n context,\n getTenant,\n getLocale,\n storageOperations\n }),\n ...createModelGroupsCrud({\n context,\n getTenant,\n getLocale,\n getIdentity,\n storageOperations\n }),\n ...createModelsCrud({\n context,\n getLocale,\n getTenant,\n getIdentity,\n storageOperations\n }),\n ...createContentEntryCrud({\n context,\n getIdentity,\n storageOperations\n })\n };\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context.cms);\n });\n};\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["debug","process","env","DEBUG","createContentCruds","params","storageOperations","ContextPlugin","context","http","request","method","cms","console","log","getLocale","getIdentity","security","getTenant","tenancy","getCurrentTenant","beforeInit","init"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,MAAMA,KAAK,GAAGC,OAAO,CAACC,GAAR,CAAYC,KAAZ,KAAsB,MAApC;;AAMO,MAAMC,kBAAkB,GAAIC,MAAD,IAAsC;AACpE,QAAM;AAAEC,IAAAA;AAAF,MAAwBD,MAA9B;AACA,SAAO,IAAIE,sBAAJ,CAA8B,MAAMC,OAAN,IAAiB;AAAA;;AAClD,QAAI,kBAAAA,OAAO,CAACC,IAAR,yFAAcC,OAAd,gFAAuBC,MAAvB,MAAkC,SAAtC,EAAiD;AAC7C;AACH;AAED;AACR;AACA;AACA;;;AACQ,QAAI,CAACH,OAAO,CAACI,GAAb,EAAkB;AACdZ,MAAAA,KAAK,IACDa,OAAO,CAACC,GAAR,CACK,mGADL,CADJ;AAIA;AACH;;AAED,UAAMC,SAAS,GAAG,MAAM;AACpB,aAAOP,OAAO,CAACI,GAAR,CAAYG,SAAZ,EAAP;AACH,KAFD;;AAIA,UAAMC,WAAW,GAAG,MAAM;AACtB,aAAOR,OAAO,CAACS,QAAR,CAAiBD,WAAjB,EAAP;AACH,KAFD;;AAIA,UAAME,SAAS,GAAG,MAAM;AACpB,aAAOV,OAAO,CAACW,OAAR,CAAgBC,gBAAhB,EAAP;AACH,KAFD;;AAIA,QAAId,iBAAiB,CAACe,UAAtB,EAAkC;AAC9B,YAAMf,iBAAiB,CAACe,UAAlB,CAA6Bb,OAA7B,CAAN;AACH;;AAEDA,IAAAA,OAAO,CAACI,GAAR,2FACOJ,OAAO,CAACI,GADf;AAEIN,MAAAA;AAFJ,OAGO,8BAAiB;AAChBE,MAAAA,OADgB;AAEhBU,MAAAA,SAFgB;AAGhBH,MAAAA,SAHgB;AAIhBC,MAAAA,WAJgB;AAKhBV,MAAAA;AALgB,KAAjB,CAHP,GAUO,kCAAmB;AAClBE,MAAAA,OADkB;AAElBU,MAAAA,SAFkB;AAGlBH,MAAAA,SAHkB;AAIlBT,MAAAA;AAJkB,KAAnB,CAVP,GAgBO,8CAAsB;AACrBE,MAAAA,OADqB;AAErBU,MAAAA,SAFqB;AAGrBH,MAAAA,SAHqB;AAIrBC,MAAAA,WAJqB;AAKrBV,MAAAA;AALqB,KAAtB,CAhBP,GAuBO,oCAAiB;AAChBE,MAAAA,OADgB;AAEhBO,MAAAA,SAFgB;AAGhBG,MAAAA,SAHgB;AAIhBF,MAAAA,WAJgB;AAKhBV,MAAAA;AALgB,KAAjB,CAvBP,GA8BO,0CAAuB;AACtBE,MAAAA,OADsB;AAEtBQ,MAAAA,WAFsB;AAGtBE,MAAAA,SAHsB;AAItBZ,MAAAA;AAJsB,KAAvB,CA9BP;;AAsCA,QAAI,CAACA,iBAAiB,CAACgB,IAAvB,EAA6B;AACzB;AACH;;AACD,UAAMhB,iBAAiB,CAACgB,IAAlB,CAAuBd,OAAvB,CAAN;AACH,GA3EM,CAAP;AA4EH,CA9EM","sourcesContent":["import { ContextPlugin } from \"@webiny/handler\";\nimport { CmsContext, HeadlessCmsStorageOperations } from \"~/types\";\nimport { createModelGroupsCrud } from \"~/content/plugins/crud/contentModelGroup.crud\";\nimport { createModelsCrud } from \"~/content/plugins/crud/contentModel.crud\";\nimport { createContentEntryCrud } from \"~/content/plugins/crud/contentEntry.crud\";\nimport { createSystemCrud } from \"~/plugins/crud/system.crud\";\nimport { createSettingsCrud } from \"~/plugins/crud/settings.crud\";\n\nconst debug = process.env.DEBUG === \"true\";\n\nexport interface CreateContentCrudsParams {\n storageOperations: HeadlessCmsStorageOperations;\n}\n\nexport const createContentCruds = (params: CreateContentCrudsParams) => {\n const { storageOperations } = params;\n return new ContextPlugin<CmsContext>(async context => {\n if (context.http?.request?.method === \"OPTIONS\") {\n return;\n }\n\n /**\n * This should never happen in the actual project.\n * It is to make sure that we load setup context before the CRUD init in our internal code.\n */\n if (!context.cms) {\n debug &&\n console.log(\n `Missing initial \"cms\" on the context. Make sure that you set it up before creating Content CRUDs.`\n );\n return;\n }\n\n const getLocale = () => {\n return context.cms.getLocale();\n };\n\n const getIdentity = () => {\n return context.security.getIdentity();\n };\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n if (storageOperations.beforeInit) {\n await storageOperations.beforeInit(context);\n }\n\n context.cms = {\n ...context.cms,\n storageOperations,\n ...createSystemCrud({\n context,\n getTenant,\n getLocale,\n getIdentity,\n storageOperations\n }),\n ...createSettingsCrud({\n context,\n getTenant,\n getLocale,\n storageOperations\n }),\n ...createModelGroupsCrud({\n context,\n getTenant,\n getLocale,\n getIdentity,\n storageOperations\n }),\n ...createModelsCrud({\n context,\n getLocale,\n getTenant,\n getIdentity,\n storageOperations\n }),\n ...createContentEntryCrud({\n context,\n getIdentity,\n getTenant,\n storageOperations\n })\n };\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n};\n"]}
@@ -22,6 +22,7 @@ const plugin = {
22
22
  fieldType: "long-text",
23
23
  isSortable: false,
24
24
  isSearchable: true,
25
+ fullTextSearch: true,
25
26
  read: {
26
27
  createTypeField({
27
28
  field
@@ -1 +1 @@
1
- {"version":3,"sources":["longText.ts"],"names":["createListFilters","field","fieldId","plugin","name","type","fieldType","isSortable","isSearchable","read","createTypeField","multipleValues","manage","createInputField"],"mappings":";;;;;;;AACA;;AAKA,MAAMA,iBAAiB,GAAG,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAAwC;AAC9D,SAAQ;AACZ,UAAUA,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,KAHI;AAIH,CALD;;AAOA,MAAMC,MAAoC,GAAG;AACzCC,EAAAA,IAAI,EAAE,sCADmC;AAEzCC,EAAAA,IAAI,EAAE,4BAFmC;AAGzCC,EAAAA,SAAS,EAAE,WAH8B;AAIzCC,EAAAA,UAAU,EAAE,KAJ6B;AAKzCC,EAAAA,YAAY,EAAE,IAL2B;AAMzCC,EAAAA,IAAI,EAAE;AACFC,IAAAA,eAAe,CAAC;AAAET,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACU,cAAV,EAA0B;AACtB,eAAQ,GAAEV,KAAK,CAACC,OAAQ,YAAxB;AACH;;AAED,aAAQ,GAAED,KAAK,CAACC,OAAQ,UAAxB;AACH,KAPC;;AAQFF,IAAAA;AARE,GANmC;AAgBzCY,EAAAA,MAAM,EAAE;AACJZ,IAAAA,iBADI;;AAEJU,IAAAA,eAAe,CAAC;AAAET,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACU,cAAV,EAA0B;AACtB,eAAOV,KAAK,CAACC,OAAN,GAAgB,YAAvB;AACH;;AAED,aAAOD,KAAK,CAACC,OAAN,GAAgB,UAAvB;AACH,KARG;;AASJW,IAAAA,gBAAgB,CAAC;AAAEZ,MAAAA;AAAF,KAAD,EAAY;AACxB,aAAO,sCAAwBA,KAAxB,EAA+B,QAA/B,CAAP;AACH;;AAXG;AAhBiC,CAA7C;eA+BeE,M","sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { createGraphQLInputField } from \"./helpers\";\n\ninterface CreateListFiltersParams {\n field: CmsModelField;\n}\nconst createListFilters = ({ field }: CreateListFiltersParams) => {\n return `\n ${field.fieldId}_contains: String\n ${field.fieldId}_not_contains: String\n `;\n};\n\nconst plugin: CmsModelFieldToGraphQLPlugin = {\n name: \"cms-model-field-to-graphql-long-text\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"long-text\",\n isSortable: false,\n isSearchable: true,\n read: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [String]`;\n }\n\n return `${field.fieldId}: String`;\n },\n createListFilters\n },\n manage: {\n createListFilters,\n createTypeField({ field }) {\n if (field.multipleValues) {\n return field.fieldId + \": [String]\";\n }\n\n return field.fieldId + \": String\";\n },\n createInputField({ field }) {\n return createGraphQLInputField(field, \"String\");\n }\n }\n};\n\nexport default plugin;\n"]}
1
+ {"version":3,"sources":["longText.ts"],"names":["createListFilters","field","fieldId","plugin","name","type","fieldType","isSortable","isSearchable","fullTextSearch","read","createTypeField","multipleValues","manage","createInputField"],"mappings":";;;;;;;AACA;;AAKA,MAAMA,iBAAiB,GAAG,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAAwC;AAC9D,SAAQ;AACZ,UAAUA,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,KAHI;AAIH,CALD;;AAOA,MAAMC,MAAoC,GAAG;AACzCC,EAAAA,IAAI,EAAE,sCADmC;AAEzCC,EAAAA,IAAI,EAAE,4BAFmC;AAGzCC,EAAAA,SAAS,EAAE,WAH8B;AAIzCC,EAAAA,UAAU,EAAE,KAJ6B;AAKzCC,EAAAA,YAAY,EAAE,IAL2B;AAMzCC,EAAAA,cAAc,EAAE,IANyB;AAOzCC,EAAAA,IAAI,EAAE;AACFC,IAAAA,eAAe,CAAC;AAAEV,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACW,cAAV,EAA0B;AACtB,eAAQ,GAAEX,KAAK,CAACC,OAAQ,YAAxB;AACH;;AAED,aAAQ,GAAED,KAAK,CAACC,OAAQ,UAAxB;AACH,KAPC;;AAQFF,IAAAA;AARE,GAPmC;AAiBzCa,EAAAA,MAAM,EAAE;AACJb,IAAAA,iBADI;;AAEJW,IAAAA,eAAe,CAAC;AAAEV,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACW,cAAV,EAA0B;AACtB,eAAOX,KAAK,CAACC,OAAN,GAAgB,YAAvB;AACH;;AAED,aAAOD,KAAK,CAACC,OAAN,GAAgB,UAAvB;AACH,KARG;;AASJY,IAAAA,gBAAgB,CAAC;AAAEb,MAAAA;AAAF,KAAD,EAAY;AACxB,aAAO,sCAAwBA,KAAxB,EAA+B,QAA/B,CAAP;AACH;;AAXG;AAjBiC,CAA7C;eAgCeE,M","sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { createGraphQLInputField } from \"./helpers\";\n\ninterface CreateListFiltersParams {\n field: CmsModelField;\n}\nconst createListFilters = ({ field }: CreateListFiltersParams) => {\n return `\n ${field.fieldId}_contains: String\n ${field.fieldId}_not_contains: String\n `;\n};\n\nconst plugin: CmsModelFieldToGraphQLPlugin = {\n name: \"cms-model-field-to-graphql-long-text\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"long-text\",\n isSortable: false,\n isSearchable: true,\n fullTextSearch: true,\n read: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [String]`;\n }\n\n return `${field.fieldId}: String`;\n },\n createListFilters\n },\n manage: {\n createListFilters,\n createTypeField({ field }) {\n if (field.multipleValues) {\n return field.fieldId + \": [String]\";\n }\n\n return field.fieldId + \": String\";\n },\n createInputField({ field }) {\n return createGraphQLInputField(field, \"String\");\n }\n }\n};\n\nexport default plugin;\n"]}
@@ -26,6 +26,7 @@ const plugin = {
26
26
  fieldType: "text",
27
27
  isSortable: true,
28
28
  isSearchable: true,
29
+ fullTextSearch: true,
29
30
  read: {
30
31
  createTypeField({
31
32
  field
@@ -1 +1 @@
1
- {"version":3,"sources":["text.ts"],"names":["createListFilters","field","fieldId","plugin","name","type","fieldType","isSortable","isSearchable","read","createTypeField","multipleValues","createGetFilters","manage","createInputField"],"mappings":";;;;;;;AACA;;AAKA,MAAMA,iBAAiB,GAAG,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAAwC;AAC9D,SAAQ;AACZ,UAAUA,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,KAPI;AAQH,CATD;;AAWA,MAAMC,MAAoC,GAAG;AACzCC,EAAAA,IAAI,EAAE,iCADmC;AAEzCC,EAAAA,IAAI,EAAE,4BAFmC;AAGzCC,EAAAA,SAAS,EAAE,MAH8B;AAIzCC,EAAAA,UAAU,EAAE,IAJ6B;AAKzCC,EAAAA,YAAY,EAAE,IAL2B;AAMzCC,EAAAA,IAAI,EAAE;AACFC,IAAAA,eAAe,CAAC;AAAET,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACU,cAAV,EAA0B;AACtB,eAAQ,GAAEV,KAAK,CAACC,OAAQ,YAAxB;AACH;;AACD,aAAQ,GAAED,KAAK,CAACC,OAAQ,UAAxB;AACH,KANC;;AAOFU,IAAAA,gBAAgB,CAAC;AAAEX,MAAAA;AAAF,KAAD,EAAY;AACxB,aAAQ,GAAEA,KAAK,CAACC,OAAQ,UAAxB;AACH,KATC;;AAUFF,IAAAA;AAVE,GANmC;AAkBzCa,EAAAA,MAAM,EAAE;AACJb,IAAAA,iBADI;;AAEJU,IAAAA,eAAe,CAAC;AAAET,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACU,cAAV,EAA0B;AACtB,eAAQ,GAAEV,KAAK,CAACC,OAAQ,YAAxB;AACH;;AACD,aAAQ,GAAED,KAAK,CAACC,OAAQ,UAAxB;AACH,KAPG;;AAQJY,IAAAA,gBAAgB,CAAC;AAAEb,MAAAA;AAAF,KAAD,EAAY;AACxB,aAAO,sCAAwBA,KAAxB,EAA+B,QAA/B,CAAP;AACH;;AAVG;AAlBiC,CAA7C;eAgCeE,M","sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { createGraphQLInputField } from \"./helpers\";\n\ninterface CreateListFiltersParams {\n field: CmsModelField;\n}\nconst createListFilters = ({ field }: CreateListFiltersParams) => {\n return `\n ${field.fieldId}: String\n ${field.fieldId}_not: String\n ${field.fieldId}_in: [String]\n ${field.fieldId}_not_in: [String]\n ${field.fieldId}_contains: String\n ${field.fieldId}_not_contains: String\n `;\n};\n\nconst plugin: CmsModelFieldToGraphQLPlugin = {\n name: \"cms-model-field-to-graphql-text\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"text\",\n isSortable: true,\n isSearchable: true,\n read: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [String]`;\n }\n return `${field.fieldId}: String`;\n },\n createGetFilters({ field }) {\n return `${field.fieldId}: String`;\n },\n createListFilters\n },\n manage: {\n createListFilters,\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [String]`;\n }\n return `${field.fieldId}: String`;\n },\n createInputField({ field }) {\n return createGraphQLInputField(field, \"String\");\n }\n }\n};\n\nexport default plugin;\n"]}
1
+ {"version":3,"sources":["text.ts"],"names":["createListFilters","field","fieldId","plugin","name","type","fieldType","isSortable","isSearchable","fullTextSearch","read","createTypeField","multipleValues","createGetFilters","manage","createInputField"],"mappings":";;;;;;;AACA;;AAKA,MAAMA,iBAAiB,GAAG,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAAwC;AAC9D,SAAQ;AACZ,UAAUA,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,UAAUD,KAAK,CAACC,OAAQ;AACxB,KAPI;AAQH,CATD;;AAWA,MAAMC,MAAoC,GAAG;AACzCC,EAAAA,IAAI,EAAE,iCADmC;AAEzCC,EAAAA,IAAI,EAAE,4BAFmC;AAGzCC,EAAAA,SAAS,EAAE,MAH8B;AAIzCC,EAAAA,UAAU,EAAE,IAJ6B;AAKzCC,EAAAA,YAAY,EAAE,IAL2B;AAMzCC,EAAAA,cAAc,EAAE,IANyB;AAOzCC,EAAAA,IAAI,EAAE;AACFC,IAAAA,eAAe,CAAC;AAAEV,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACW,cAAV,EAA0B;AACtB,eAAQ,GAAEX,KAAK,CAACC,OAAQ,YAAxB;AACH;;AACD,aAAQ,GAAED,KAAK,CAACC,OAAQ,UAAxB;AACH,KANC;;AAOFW,IAAAA,gBAAgB,CAAC;AAAEZ,MAAAA;AAAF,KAAD,EAAY;AACxB,aAAQ,GAAEA,KAAK,CAACC,OAAQ,UAAxB;AACH,KATC;;AAUFF,IAAAA;AAVE,GAPmC;AAmBzCc,EAAAA,MAAM,EAAE;AACJd,IAAAA,iBADI;;AAEJW,IAAAA,eAAe,CAAC;AAAEV,MAAAA;AAAF,KAAD,EAAY;AACvB,UAAIA,KAAK,CAACW,cAAV,EAA0B;AACtB,eAAQ,GAAEX,KAAK,CAACC,OAAQ,YAAxB;AACH;;AACD,aAAQ,GAAED,KAAK,CAACC,OAAQ,UAAxB;AACH,KAPG;;AAQJa,IAAAA,gBAAgB,CAAC;AAAEd,MAAAA;AAAF,KAAD,EAAY;AACxB,aAAO,sCAAwBA,KAAxB,EAA+B,QAA/B,CAAP;AACH;;AAVG;AAnBiC,CAA7C;eAiCeE,M","sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { createGraphQLInputField } from \"./helpers\";\n\ninterface CreateListFiltersParams {\n field: CmsModelField;\n}\nconst createListFilters = ({ field }: CreateListFiltersParams) => {\n return `\n ${field.fieldId}: String\n ${field.fieldId}_not: String\n ${field.fieldId}_in: [String]\n ${field.fieldId}_not_in: [String]\n ${field.fieldId}_contains: String\n ${field.fieldId}_not_contains: String\n `;\n};\n\nconst plugin: CmsModelFieldToGraphQLPlugin = {\n name: \"cms-model-field-to-graphql-text\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"text\",\n isSortable: true,\n isSearchable: true,\n fullTextSearch: true,\n read: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [String]`;\n }\n return `${field.fieldId}: String`;\n },\n createGetFilters({ field }) {\n return `${field.fieldId}: String`;\n },\n createListFilters\n },\n manage: {\n createListFilters,\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [String]`;\n }\n return `${field.fieldId}: String`;\n },\n createInputField({ field }) {\n return createGraphQLInputField(field, \"String\");\n }\n }\n};\n\nexport default plugin;\n"]}
@@ -209,6 +209,7 @@ const plugin = context => {
209
209
  searchContentEntries(
210
210
  modelIds: [ID!]!
211
211
  query: String
212
+ fields: [String!]
212
213
  limit: Int
213
214
  ): CmsContentEntriesResponse
214
215
 
@@ -261,23 +262,19 @@ const plugin = context => {
261
262
  async searchContentEntries(_, args, context) {
262
263
  const {
263
264
  modelIds,
265
+ fields,
264
266
  query,
265
267
  limit = 10
266
268
  } = args;
267
269
  const models = await context.cms.listModels();
268
270
  const getters = models.filter(model => modelIds.includes(model.modelId)).map(async model => {
269
271
  const modelManager = await context.cms.getModelManager(model.modelId);
270
- const where = {
271
- tenant: model.tenant
272
- };
273
-
274
- if (!!query) {
275
- where[`${model.titleFieldId}_contains`] = query;
276
- }
277
-
272
+ const where = {};
278
273
  const [items] = await modelManager.listLatest({
279
274
  limit,
280
- where
275
+ where,
276
+ search: !!query ? query : undefined,
277
+ fields: fields || []
281
278
  });
282
279
  return items.map(entry => {
283
280
  return {