@webiny/api-headless-cms 0.0.0-unstable.3386f66516 → 0.0.0-unstable.496cf268ac
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/context.js +0 -25
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +0 -5
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +0 -3
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +0 -3
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +1 -40
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.d.ts +1 -1
- package/crud/contentEntry/markLockedFields.js +15 -28
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +5 -61
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.js +1 -12
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +2 -1
- package/crud/contentEntry.crud.js +59 -166
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.js +0 -2
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.js +0 -2
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.js +0 -2
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.js +0 -2
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.js +7 -32
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.js +0 -10
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.js +4 -5
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/compatibility/modelApiName.d.ts +3 -0
- package/crud/contentModel/compatibility/modelApiName.js +24 -0
- package/crud/contentModel/compatibility/modelApiName.js.map +1 -0
- package/crud/contentModel/contentModelManagerFactory.js +0 -7
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +0 -3
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/defaultFields.d.ts +5 -0
- package/crud/contentModel/defaultFields.js +58 -0
- package/crud/contentModel/defaultFields.js.map +1 -0
- package/crud/contentModel/fields/descriptionField.d.ts +2 -0
- package/crud/contentModel/fields/descriptionField.js +42 -0
- package/crud/contentModel/fields/descriptionField.js.map +1 -0
- package/crud/contentModel/fields/imageField.d.ts +2 -0
- package/crud/contentModel/fields/imageField.js +46 -0
- package/crud/contentModel/fields/imageField.js.map +1 -0
- package/crud/contentModel/fields/titleField.d.ts +2 -0
- package/crud/contentModel/fields/titleField.js +58 -0
- package/crud/contentModel/fields/titleField.js.map +1 -0
- package/crud/contentModel/validateLayout.js +0 -8
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.d.ts +1 -0
- package/crud/contentModel/validateModel.js +0 -8
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +2 -1
- package/crud/contentModel/validateModelFields.js +35 -128
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +85 -43
- package/crud/contentModel/validation.js +57 -21
- package/crud/contentModel/validation.js.map +1 -1
- package/crud/contentModel.crud.js +46 -110
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.js +0 -12
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +0 -8
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +0 -5
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup/validation.js +0 -9
- package/crud/contentModelGroup/validation.js.map +1 -1
- package/crud/contentModelGroup.crud.js +5 -47
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/settings.crud.js +0 -12
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +1 -96
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +0 -13
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +0 -36
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +0 -53
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +0 -5
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.js +4 -9
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/createExecutableSchema.js +2 -6
- package/graphql/createExecutableSchema.js.map +1 -1
- package/graphql/generateSchema.js +0 -7
- package/graphql/generateSchema.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +16 -39
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.js +0 -5
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.js +5 -17
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.js +1 -8
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +107 -102
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +3 -20
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +22 -25
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +5 -28
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.d.ts +1 -1
- package/graphql/schema/createManageResolvers.js +33 -43
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +1 -0
- package/graphql/schema/createManageSDL.js +57 -63
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +3 -17
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +4 -18
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +1 -0
- package/graphql/schema/createReadSDL.js +24 -32
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +3 -2
- package/graphql/schema/resolvers/commonFieldResolvers.js +2 -3
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +0 -6
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +0 -16
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveList.js +0 -3
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +0 -8
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +0 -3
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +0 -8
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +0 -3
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +16 -26
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +1 -30
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +0 -12
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +0 -17
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +15 -33
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +2 -18
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
- package/graphqlFields/dynamicZone/index.js +0 -2
- package/graphqlFields/dynamicZone/index.js.map +1 -1
- package/graphqlFields/file.js +0 -8
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.js +0 -10
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.js +0 -12
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +0 -10
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +0 -12
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +7 -37
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +59 -65
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +0 -9
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +0 -11
- package/graphqlFields/text.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -21
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +0 -16
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +0 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +24 -25
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +0 -11
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +1 -8
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +0 -11
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGraphQLSchemaPlugin.js +0 -5
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -1
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +0 -10
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +0 -8
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +0 -5
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +11 -1
- package/plugins/CmsModelPlugin.js +15 -40
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +0 -7
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.js +0 -9
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.js +0 -14
- package/plugins/index.js.map +1 -1
- package/storage/default.js +0 -3
- package/storage/default.js.map +1 -1
- package/storage/object.js +0 -19
- package/storage/object.js.map +1 -1
- package/types.d.ts +77 -22
- package/types.js +1 -80
- package/types.js.map +1 -1
- package/utils/access.js +11 -25
- package/utils/access.js.map +1 -1
- package/utils/converters/Converter.js +0 -13
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +9 -33
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +2 -27
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +1 -0
- package/utils/createTypeFromFields.js +11 -19
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/createTypeName.js +0 -9
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +10 -26
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +0 -5
- package/utils/filterAsync.js.map +1 -1
- package/utils/getBaseFieldType.js +0 -2
- package/utils/getBaseFieldType.js.map +1 -1
- package/utils/getEntryDescription.d.ts +2 -0
- package/utils/getEntryDescription.js +17 -0
- package/utils/getEntryDescription.js.map +1 -0
- package/utils/getEntryImage.d.ts +2 -0
- package/utils/getEntryImage.js +17 -0
- package/utils/getEntryImage.js.map +1 -0
- package/utils/getEntryTitle.js +0 -9
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.js +2 -11
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/ownership.d.ts +3 -3
- package/utils/ownership.js +0 -8
- package/utils/ownership.js.map +1 -1
- package/utils/permissions.js +8 -23
- package/utils/permissions.js.map +1 -1
- package/utils/removeNullValues.d.ts +1 -0
- package/utils/removeNullValues.js +17 -0
- package/utils/removeNullValues.js.map +1 -0
- package/utils/removeUndefinedValues.d.ts +1 -0
- package/utils/removeUndefinedValues.js +17 -0
- package/utils/removeUndefinedValues.js.map +1 -0
- package/utils/renderFields.d.ts +2 -1
- package/utils/renderFields.js +8 -10
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +0 -13
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +2 -1
- package/utils/renderInputFields.js +4 -9
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +1 -10
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +0 -9
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +0 -4
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +0 -7
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +0 -7
- package/validators/dateLte.js.map +1 -1
- package/validators/dynamicZone.js +0 -4
- package/validators/dynamicZone.js.map +1 -1
- package/validators/gte.js +0 -8
- package/validators/gte.js.map +1 -1
- package/validators/in.js +0 -8
- package/validators/in.js.map +1 -1
- package/validators/index.js +0 -16
- package/validators/index.js.map +1 -1
- package/validators/lte.js +0 -8
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +0 -8
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +0 -8
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +0 -9
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +0 -2
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +0 -8
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +0 -2
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +0 -2
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +0 -2
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +0 -2
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +0 -5
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +0 -8
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +0 -8
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +0 -7
- package/validators/unique.js.map +1 -1
|
@@ -1,59 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.STATUS_PUBLISHED = exports.STATUS_DRAFT = void 0;
|
|
9
|
-
|
|
10
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
12
9
|
var _mdbid = _interopRequireDefault(require("mdbid"));
|
|
13
|
-
|
|
14
10
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
-
|
|
16
11
|
var _entryDataValidation = require("./contentEntry/entryDataValidation");
|
|
17
|
-
|
|
18
12
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
19
|
-
|
|
20
13
|
var _pubsub = require("@webiny/pubsub");
|
|
21
|
-
|
|
22
14
|
var _beforeCreate = require("./contentEntry/beforeCreate");
|
|
23
|
-
|
|
24
15
|
var _beforeUpdate = require("./contentEntry/beforeUpdate");
|
|
25
|
-
|
|
26
16
|
var _utils = require("@webiny/utils");
|
|
27
|
-
|
|
28
17
|
var _afterDelete = require("./contentEntry/afterDelete");
|
|
29
|
-
|
|
30
18
|
var _referenceFieldsMapping = require("./contentEntry/referenceFieldsMapping");
|
|
31
|
-
|
|
32
19
|
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
33
|
-
|
|
34
20
|
var _permissions = require("../utils/permissions");
|
|
35
|
-
|
|
36
21
|
var _access = require("../utils/access");
|
|
37
|
-
|
|
38
22
|
var _ownership = require("../utils/ownership");
|
|
39
|
-
|
|
40
23
|
var _entryStorage = require("../utils/entryStorage");
|
|
41
|
-
|
|
42
24
|
var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
|
|
43
|
-
|
|
44
25
|
var _searchableFields = require("./contentEntry/searchableFields");
|
|
45
|
-
|
|
26
|
+
var _removeUndefinedValues = require("../utils/removeUndefinedValues");
|
|
27
|
+
var _removeNullValues = require("../utils/removeNullValues");
|
|
46
28
|
/**
|
|
47
29
|
* Package mdbid does not have types.
|
|
48
30
|
*/
|
|
49
31
|
// @ts-ignore
|
|
32
|
+
|
|
50
33
|
const STATUS_DRAFT = "draft";
|
|
51
34
|
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
52
35
|
const STATUS_PUBLISHED = "published";
|
|
53
36
|
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
54
37
|
const STATUS_UNPUBLISHED = "unpublished";
|
|
55
38
|
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
56
|
-
|
|
57
39
|
/**
|
|
58
40
|
* Used for some fields to convert their values.
|
|
59
41
|
*/
|
|
@@ -61,45 +43,35 @@ const convertDefaultValue = (field, value) => {
|
|
|
61
43
|
switch (field.type) {
|
|
62
44
|
case "boolean":
|
|
63
45
|
return Boolean(value);
|
|
64
|
-
|
|
65
46
|
case "number":
|
|
66
47
|
return Number(value);
|
|
67
|
-
|
|
68
48
|
default:
|
|
69
49
|
return value;
|
|
70
50
|
}
|
|
71
51
|
};
|
|
72
|
-
|
|
73
52
|
const getDefaultValue = field => {
|
|
74
53
|
const {
|
|
75
54
|
settings,
|
|
76
55
|
multipleValues
|
|
77
56
|
} = field;
|
|
78
|
-
|
|
79
57
|
if (settings && settings.defaultValue !== undefined) {
|
|
80
58
|
return convertDefaultValue(field, settings.defaultValue);
|
|
81
59
|
}
|
|
82
|
-
|
|
83
60
|
const {
|
|
84
61
|
predefinedValues
|
|
85
62
|
} = field;
|
|
86
|
-
|
|
87
63
|
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
88
64
|
return undefined;
|
|
89
65
|
}
|
|
90
|
-
|
|
91
66
|
if (!multipleValues) {
|
|
92
67
|
const selectedValue = predefinedValues.values.find(value => {
|
|
93
68
|
return !!value.selected;
|
|
94
69
|
});
|
|
95
|
-
|
|
96
70
|
if (selectedValue) {
|
|
97
71
|
return convertDefaultValue(field, selectedValue.value);
|
|
98
72
|
}
|
|
99
|
-
|
|
100
73
|
return undefined;
|
|
101
74
|
}
|
|
102
|
-
|
|
103
75
|
return predefinedValues.values.filter(({
|
|
104
76
|
selected
|
|
105
77
|
}) => !!selected).map(({
|
|
@@ -111,8 +83,6 @@ const getDefaultValue = field => {
|
|
|
111
83
|
/**
|
|
112
84
|
* Cleans and adds default values to create input data.
|
|
113
85
|
*/
|
|
114
|
-
|
|
115
|
-
|
|
116
86
|
const mapAndCleanCreateInputData = (model, input) => {
|
|
117
87
|
return model.fields.reduce((acc, field) => {
|
|
118
88
|
/**
|
|
@@ -124,12 +94,10 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
124
94
|
field
|
|
125
95
|
});
|
|
126
96
|
}
|
|
127
|
-
|
|
128
97
|
const value = input[field.fieldId];
|
|
129
98
|
/**
|
|
130
99
|
* We set the default value on create input if value is not defined.
|
|
131
100
|
*/
|
|
132
|
-
|
|
133
101
|
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
134
102
|
return acc;
|
|
135
103
|
}, {});
|
|
@@ -137,8 +105,6 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
137
105
|
/**
|
|
138
106
|
* Cleans the update input entry data.
|
|
139
107
|
*/
|
|
140
|
-
|
|
141
|
-
|
|
142
108
|
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
143
109
|
return model.fields.reduce((acc, field) => {
|
|
144
110
|
/**
|
|
@@ -153,14 +119,10 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
153
119
|
/**
|
|
154
120
|
* We cannot set default value here because user might want to update only certain field values.
|
|
155
121
|
*/
|
|
156
|
-
|
|
157
|
-
|
|
158
122
|
const value = input[field.fieldId];
|
|
159
|
-
|
|
160
123
|
if (value === undefined) {
|
|
161
124
|
return acc;
|
|
162
125
|
}
|
|
163
|
-
|
|
164
126
|
acc[field.fieldId] = value;
|
|
165
127
|
return acc;
|
|
166
128
|
}, {});
|
|
@@ -169,24 +131,21 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
169
131
|
* This method takes original entry meta and new input.
|
|
170
132
|
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
171
133
|
*/
|
|
172
|
-
|
|
173
|
-
|
|
174
134
|
const createEntryMeta = (input, original) => {
|
|
175
135
|
const meta = (0, _merge.default)(original || {}, input || {});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
136
|
+
return (0, _removeUndefinedValues.removeUndefinedValues)((0, _removeNullValues.removeNullValues)(meta));
|
|
137
|
+
};
|
|
138
|
+
const createEntryId = input => {
|
|
139
|
+
let entryId = (0, _mdbid.default)();
|
|
140
|
+
if (input.id) {
|
|
141
|
+
if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\-]+)([a-zA-Z0-9])$/) === null) {
|
|
142
|
+
throw new _error.default("The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.", "INVALID_ID", {
|
|
143
|
+
id: input.id
|
|
144
|
+
});
|
|
180
145
|
}
|
|
181
|
-
|
|
182
|
-
delete meta[key];
|
|
146
|
+
entryId = input.id;
|
|
183
147
|
}
|
|
184
|
-
|
|
185
|
-
return meta;
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
const createEntryId = version => {
|
|
189
|
-
const entryId = (0, _mdbid.default)();
|
|
148
|
+
const version = 1;
|
|
190
149
|
return {
|
|
191
150
|
entryId,
|
|
192
151
|
version,
|
|
@@ -196,19 +155,16 @@ const createEntryId = version => {
|
|
|
196
155
|
})
|
|
197
156
|
};
|
|
198
157
|
};
|
|
199
|
-
|
|
200
158
|
const increaseEntryIdVersion = id => {
|
|
201
159
|
const {
|
|
202
160
|
id: entryId,
|
|
203
161
|
version
|
|
204
162
|
} = (0, _utils.parseIdentifier)(id);
|
|
205
|
-
|
|
206
163
|
if (!version) {
|
|
207
164
|
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
208
165
|
id
|
|
209
166
|
});
|
|
210
167
|
}
|
|
211
|
-
|
|
212
168
|
return {
|
|
213
169
|
entryId,
|
|
214
170
|
version: version + 1,
|
|
@@ -218,13 +174,10 @@ const increaseEntryIdVersion = id => {
|
|
|
218
174
|
})
|
|
219
175
|
};
|
|
220
176
|
};
|
|
221
|
-
|
|
222
177
|
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
223
|
-
|
|
224
178
|
const transformEntryStatus = status => {
|
|
225
179
|
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
226
180
|
};
|
|
227
|
-
|
|
228
181
|
const createContentEntryCrud = params => {
|
|
229
182
|
const {
|
|
230
183
|
storageOperations,
|
|
@@ -235,67 +188,84 @@ const createContentEntryCrud = params => {
|
|
|
235
188
|
const {
|
|
236
189
|
plugins
|
|
237
190
|
} = context;
|
|
191
|
+
const getCreatedBy = () => {
|
|
192
|
+
const identity = getIdentity();
|
|
193
|
+
return {
|
|
194
|
+
id: identity.id,
|
|
195
|
+
displayName: identity.displayName,
|
|
196
|
+
type: identity.type
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
|
|
238
200
|
/**
|
|
239
201
|
* Create
|
|
240
202
|
*/
|
|
241
|
-
|
|
242
203
|
const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
|
|
243
204
|
const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
|
|
244
205
|
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
206
|
+
|
|
245
207
|
/**
|
|
246
208
|
* Create new revision
|
|
247
209
|
*/
|
|
248
|
-
|
|
249
210
|
const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
|
|
250
211
|
const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
|
|
251
212
|
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
213
|
+
|
|
252
214
|
/**
|
|
253
215
|
* Update
|
|
254
216
|
*/
|
|
255
|
-
|
|
256
217
|
const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
|
|
257
218
|
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
258
219
|
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
220
|
+
|
|
259
221
|
/**
|
|
260
222
|
* Publish
|
|
261
223
|
*/
|
|
262
|
-
|
|
263
224
|
const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
|
|
264
225
|
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublish");
|
|
265
226
|
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
227
|
+
|
|
266
228
|
/**
|
|
267
229
|
* Republish
|
|
268
230
|
*/
|
|
269
|
-
|
|
270
231
|
const onEntryBeforeRepublish = (0, _pubsub.createTopic)("cms.onEntryBeforeRepublish");
|
|
271
232
|
const onEntryAfterRepublish = (0, _pubsub.createTopic)("cms.onEntryAfterRepublish");
|
|
272
233
|
const onEntryRepublishError = (0, _pubsub.createTopic)("cms.onEntryRepublishError");
|
|
234
|
+
|
|
273
235
|
/**
|
|
274
236
|
* Unpublish
|
|
275
237
|
*/
|
|
276
|
-
|
|
277
238
|
const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
|
|
278
239
|
const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
|
|
279
240
|
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
241
|
+
|
|
280
242
|
/**
|
|
281
243
|
* Delete
|
|
282
244
|
*/
|
|
283
|
-
|
|
284
245
|
const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
|
|
285
246
|
const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
|
|
286
|
-
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
247
|
+
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
287
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Delete revision
|
|
251
|
+
*/
|
|
288
252
|
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
289
253
|
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
290
|
-
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
254
|
+
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
291
255
|
|
|
292
|
-
|
|
256
|
+
/**
|
|
257
|
+
* Get entry
|
|
258
|
+
*/
|
|
259
|
+
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
|
|
293
260
|
|
|
261
|
+
/**
|
|
262
|
+
* List entries
|
|
263
|
+
*/
|
|
294
264
|
const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
|
|
265
|
+
|
|
295
266
|
/**
|
|
296
267
|
* We need to assign some default behaviors.
|
|
297
268
|
*/
|
|
298
|
-
|
|
299
269
|
(0, _beforeCreate.assignBeforeEntryCreate)({
|
|
300
270
|
context,
|
|
301
271
|
onEntryBeforeCreate
|
|
@@ -308,21 +278,18 @@ const createContentEntryCrud = params => {
|
|
|
308
278
|
context,
|
|
309
279
|
onEntryAfterDelete
|
|
310
280
|
});
|
|
311
|
-
|
|
312
281
|
const checkEntryPermissions = check => {
|
|
313
282
|
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
314
283
|
};
|
|
284
|
+
|
|
315
285
|
/**
|
|
316
286
|
* A helper to delete the entire entry.
|
|
317
287
|
*/
|
|
318
|
-
|
|
319
|
-
|
|
320
288
|
const deleteEntry = async params => {
|
|
321
289
|
const {
|
|
322
290
|
model,
|
|
323
291
|
entry
|
|
324
292
|
} = params;
|
|
325
|
-
|
|
326
293
|
try {
|
|
327
294
|
await onEntryBeforeDelete.publish({
|
|
328
295
|
entry,
|
|
@@ -349,8 +316,6 @@ const createContentEntryCrud = params => {
|
|
|
349
316
|
/**
|
|
350
317
|
* A helper to get entries by revision IDs
|
|
351
318
|
*/
|
|
352
|
-
|
|
353
|
-
|
|
354
319
|
const getEntriesByIds = async (initialModel, ids) => {
|
|
355
320
|
const permission = await checkEntryPermissions({
|
|
356
321
|
rwd: "r"
|
|
@@ -365,7 +330,6 @@ const createContentEntryCrud = params => {
|
|
|
365
330
|
});
|
|
366
331
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
367
332
|
};
|
|
368
|
-
|
|
369
333
|
return {
|
|
370
334
|
/**
|
|
371
335
|
* Deprecated - will be removed in 5.35.0
|
|
@@ -386,7 +350,6 @@ const createContentEntryCrud = params => {
|
|
|
386
350
|
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
387
351
|
onBeforeEntryGet: onEntryBeforeGet,
|
|
388
352
|
onBeforeEntryList: onEntryBeforeList,
|
|
389
|
-
|
|
390
353
|
/**
|
|
391
354
|
* Released in 5.34.0
|
|
392
355
|
*
|
|
@@ -395,49 +358,42 @@ const createContentEntryCrud = params => {
|
|
|
395
358
|
onEntryBeforeCreate,
|
|
396
359
|
onEntryAfterCreate,
|
|
397
360
|
onEntryCreateError,
|
|
398
|
-
|
|
399
361
|
/**
|
|
400
362
|
* Create revision
|
|
401
363
|
*/
|
|
402
364
|
onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
|
|
403
365
|
onEntryRevisionAfterCreate,
|
|
404
366
|
onEntryRevisionCreateError: onEntryCreateRevisionError,
|
|
405
|
-
|
|
406
367
|
/**
|
|
407
368
|
* Update
|
|
408
369
|
*/
|
|
409
370
|
onEntryBeforeUpdate,
|
|
410
371
|
onEntryAfterUpdate,
|
|
411
372
|
onEntryUpdateError,
|
|
412
|
-
|
|
413
373
|
/**
|
|
414
374
|
* Delete whole entry
|
|
415
375
|
*/
|
|
416
376
|
onEntryBeforeDelete,
|
|
417
377
|
onEntryAfterDelete,
|
|
418
378
|
onEntryDeleteError,
|
|
419
|
-
|
|
420
379
|
/**
|
|
421
380
|
* Delete entry revision
|
|
422
381
|
*/
|
|
423
382
|
onEntryRevisionBeforeDelete,
|
|
424
383
|
onEntryRevisionAfterDelete,
|
|
425
384
|
onEntryRevisionDeleteError,
|
|
426
|
-
|
|
427
385
|
/**
|
|
428
386
|
* Publish
|
|
429
387
|
*/
|
|
430
388
|
onEntryBeforePublish,
|
|
431
389
|
onEntryAfterPublish,
|
|
432
390
|
onEntryPublishError,
|
|
433
|
-
|
|
434
391
|
/**
|
|
435
392
|
* Republish
|
|
436
393
|
*/
|
|
437
394
|
onEntryBeforeRepublish,
|
|
438
395
|
onEntryAfterRepublish,
|
|
439
396
|
onEntryRepublishError,
|
|
440
|
-
|
|
441
397
|
/**
|
|
442
398
|
* Unpublish
|
|
443
399
|
*/
|
|
@@ -446,12 +402,10 @@ const createContentEntryCrud = params => {
|
|
|
446
402
|
onEntryUnpublishError,
|
|
447
403
|
onEntryBeforeGet,
|
|
448
404
|
onEntryBeforeList,
|
|
449
|
-
|
|
450
405
|
/**
|
|
451
406
|
* Get entries by exact revision IDs from the database.
|
|
452
407
|
*/
|
|
453
408
|
getEntriesByIds: getEntriesByIds,
|
|
454
|
-
|
|
455
409
|
/**
|
|
456
410
|
* Get a single entry by revision ID from the database.
|
|
457
411
|
*/
|
|
@@ -468,14 +422,11 @@ const createContentEntryCrud = params => {
|
|
|
468
422
|
model
|
|
469
423
|
});
|
|
470
424
|
const [entry] = await getEntriesByIds(model, [id]);
|
|
471
|
-
|
|
472
425
|
if (!entry) {
|
|
473
426
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
474
427
|
}
|
|
475
|
-
|
|
476
428
|
return entry;
|
|
477
429
|
},
|
|
478
|
-
|
|
479
430
|
/**
|
|
480
431
|
* Get published revisions by entry IDs.
|
|
481
432
|
*/
|
|
@@ -493,7 +444,6 @@ const createContentEntryCrud = params => {
|
|
|
493
444
|
});
|
|
494
445
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
495
446
|
},
|
|
496
|
-
|
|
497
447
|
/**
|
|
498
448
|
* Get the latest revisions by entry IDs.
|
|
499
449
|
*/
|
|
@@ -511,7 +461,6 @@ const createContentEntryCrud = params => {
|
|
|
511
461
|
});
|
|
512
462
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
513
463
|
},
|
|
514
|
-
|
|
515
464
|
async getEntryRevisions(initialModel, entryId) {
|
|
516
465
|
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
517
466
|
model: initialModel,
|
|
@@ -521,7 +470,6 @@ const createContentEntryCrud = params => {
|
|
|
521
470
|
id: entryId
|
|
522
471
|
});
|
|
523
472
|
},
|
|
524
|
-
|
|
525
473
|
/**
|
|
526
474
|
* TODO determine if this method is required at all.
|
|
527
475
|
*
|
|
@@ -548,14 +496,11 @@ const createContentEntryCrud = params => {
|
|
|
548
496
|
sort,
|
|
549
497
|
limit: 1
|
|
550
498
|
});
|
|
551
|
-
|
|
552
499
|
if (items.length === 0) {
|
|
553
500
|
throw new _handlerGraphql.NotFoundError(`Entry not found!`);
|
|
554
501
|
}
|
|
555
|
-
|
|
556
502
|
return items[0];
|
|
557
503
|
},
|
|
558
|
-
|
|
559
504
|
/**
|
|
560
505
|
* @description Should not be used directly. Internal use only!
|
|
561
506
|
*
|
|
@@ -578,15 +523,12 @@ const createContentEntryCrud = params => {
|
|
|
578
523
|
/**
|
|
579
524
|
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
580
525
|
*/
|
|
581
|
-
|
|
582
526
|
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
583
527
|
/**
|
|
584
528
|
* Possibly only get records which are owned by current user.
|
|
585
529
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
586
530
|
*/
|
|
587
|
-
|
|
588
531
|
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
589
|
-
|
|
590
532
|
if (ownedBy !== undefined) {
|
|
591
533
|
where.ownedBy = ownedBy;
|
|
592
534
|
}
|
|
@@ -594,8 +536,6 @@ const createContentEntryCrud = params => {
|
|
|
594
536
|
* Where must contain either latest or published keys.
|
|
595
537
|
* We cannot list entries without one of those
|
|
596
538
|
*/
|
|
597
|
-
|
|
598
|
-
|
|
599
539
|
if (where.latest && where.published) {
|
|
600
540
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
601
541
|
where
|
|
@@ -605,13 +545,11 @@ const createContentEntryCrud = params => {
|
|
|
605
545
|
where
|
|
606
546
|
});
|
|
607
547
|
}
|
|
608
|
-
|
|
609
548
|
const fields = (0, _searchableFields.getSearchableFields)({
|
|
610
549
|
fields: model.fields,
|
|
611
550
|
plugins: context.plugins,
|
|
612
551
|
input: params.fields || []
|
|
613
552
|
});
|
|
614
|
-
|
|
615
553
|
try {
|
|
616
554
|
await onEntryBeforeList.publish({
|
|
617
555
|
where,
|
|
@@ -630,7 +568,6 @@ const createContentEntryCrud = params => {
|
|
|
630
568
|
const meta = {
|
|
631
569
|
hasMoreItems,
|
|
632
570
|
totalCount,
|
|
633
|
-
|
|
634
571
|
/**
|
|
635
572
|
* Cursor should be null if there are no more items to load.
|
|
636
573
|
* Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
|
|
@@ -651,7 +588,6 @@ const createContentEntryCrud = params => {
|
|
|
651
588
|
});
|
|
652
589
|
}
|
|
653
590
|
},
|
|
654
|
-
|
|
655
591
|
async listLatestEntries(model, params) {
|
|
656
592
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
657
593
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -662,7 +598,6 @@ const createContentEntryCrud = params => {
|
|
|
662
598
|
})
|
|
663
599
|
}));
|
|
664
600
|
},
|
|
665
|
-
|
|
666
601
|
async listPublishedEntries(model, params) {
|
|
667
602
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
668
603
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -673,7 +608,6 @@ const createContentEntryCrud = params => {
|
|
|
673
608
|
})
|
|
674
609
|
}));
|
|
675
610
|
},
|
|
676
|
-
|
|
677
611
|
async createEntry(initialModel, inputData) {
|
|
678
612
|
await checkEntryPermissions({
|
|
679
613
|
rwd: "w"
|
|
@@ -683,10 +617,10 @@ const createContentEntryCrud = params => {
|
|
|
683
617
|
model: initialModel,
|
|
684
618
|
plugins
|
|
685
619
|
});
|
|
620
|
+
|
|
686
621
|
/**
|
|
687
622
|
* Make sure we only work with fields that are defined in the model.
|
|
688
623
|
*/
|
|
689
|
-
|
|
690
624
|
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
691
625
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
692
626
|
context,
|
|
@@ -699,18 +633,17 @@ const createContentEntryCrud = params => {
|
|
|
699
633
|
input: initialInput,
|
|
700
634
|
validateEntries: true
|
|
701
635
|
});
|
|
702
|
-
const identity = context.security.getIdentity();
|
|
703
636
|
const locale = this.getLocale();
|
|
704
|
-
const owner =
|
|
705
|
-
id: identity.id,
|
|
706
|
-
displayName: identity.displayName,
|
|
707
|
-
type: identity.type
|
|
708
|
-
};
|
|
637
|
+
const owner = getCreatedBy();
|
|
709
638
|
const {
|
|
710
639
|
id,
|
|
711
640
|
entryId,
|
|
712
641
|
version
|
|
713
|
-
} = createEntryId(
|
|
642
|
+
} = createEntryId(inputData);
|
|
643
|
+
/**
|
|
644
|
+
* There is a possibility that user sends an ID in the input, so we will use that one.
|
|
645
|
+
* There is no check if the ID is unique or not, that is up to the user.
|
|
646
|
+
*/
|
|
714
647
|
const entry = {
|
|
715
648
|
webinyVersion: context.WEBINY_VERSION,
|
|
716
649
|
tenant: getTenant().id,
|
|
@@ -722,13 +655,13 @@ const createContentEntryCrud = params => {
|
|
|
722
655
|
savedOn: new Date().toISOString(),
|
|
723
656
|
createdBy: owner,
|
|
724
657
|
ownedBy: owner,
|
|
658
|
+
modifiedBy: null,
|
|
725
659
|
version,
|
|
726
660
|
locked: false,
|
|
727
661
|
status: STATUS_DRAFT,
|
|
728
662
|
values: input
|
|
729
663
|
};
|
|
730
664
|
let storageEntry = null;
|
|
731
|
-
|
|
732
665
|
try {
|
|
733
666
|
await onEntryBeforeCreate.publish({
|
|
734
667
|
entry,
|
|
@@ -762,7 +695,6 @@ const createContentEntryCrud = params => {
|
|
|
762
695
|
});
|
|
763
696
|
}
|
|
764
697
|
},
|
|
765
|
-
|
|
766
698
|
async createEntryRevisionFrom(initialModel, sourceId, inputData) {
|
|
767
699
|
const permission = await checkEntryPermissions({
|
|
768
700
|
rwd: "w"
|
|
@@ -772,15 +704,15 @@ const createContentEntryCrud = params => {
|
|
|
772
704
|
model: initialModel,
|
|
773
705
|
plugins
|
|
774
706
|
});
|
|
707
|
+
|
|
775
708
|
/**
|
|
776
709
|
* Make sure we only work with fields that are defined in the model.
|
|
777
710
|
*/
|
|
778
|
-
|
|
779
711
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
712
|
+
|
|
780
713
|
/**
|
|
781
714
|
* Entries are identified by a common parent ID + Revision number.
|
|
782
715
|
*/
|
|
783
|
-
|
|
784
716
|
const {
|
|
785
717
|
id: uniqueId
|
|
786
718
|
} = (0, _utils.parseIdentifier)(sourceId);
|
|
@@ -790,15 +722,13 @@ const createContentEntryCrud = params => {
|
|
|
790
722
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
791
723
|
id: uniqueId
|
|
792
724
|
});
|
|
793
|
-
|
|
794
725
|
if (!originalStorageEntry) {
|
|
795
726
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
796
727
|
}
|
|
728
|
+
|
|
797
729
|
/**
|
|
798
730
|
* We need to convert data from DB to its original form before using it further.
|
|
799
731
|
*/
|
|
800
|
-
|
|
801
|
-
|
|
802
732
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
803
733
|
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
804
734
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
@@ -814,7 +744,7 @@ const createContentEntryCrud = params => {
|
|
|
814
744
|
validateEntries: false
|
|
815
745
|
});
|
|
816
746
|
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
817
|
-
const identity =
|
|
747
|
+
const identity = getIdentity();
|
|
818
748
|
const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;
|
|
819
749
|
const {
|
|
820
750
|
id,
|
|
@@ -830,13 +760,13 @@ const createContentEntryCrud = params => {
|
|
|
830
760
|
displayName: identity.displayName,
|
|
831
761
|
type: identity.type
|
|
832
762
|
},
|
|
763
|
+
modifiedBy: null,
|
|
833
764
|
locked: false,
|
|
834
765
|
publishedOn: undefined,
|
|
835
766
|
status: STATUS_DRAFT,
|
|
836
767
|
values
|
|
837
768
|
});
|
|
838
769
|
let storageEntry = null;
|
|
839
|
-
|
|
840
770
|
try {
|
|
841
771
|
await onEntryBeforeCreateRevision.publish({
|
|
842
772
|
input,
|
|
@@ -874,7 +804,6 @@ const createContentEntryCrud = params => {
|
|
|
874
804
|
});
|
|
875
805
|
}
|
|
876
806
|
},
|
|
877
|
-
|
|
878
807
|
async updateEntry(initialModel, id, inputData, metaInput) {
|
|
879
808
|
const permission = await checkEntryPermissions({
|
|
880
809
|
rwd: "w"
|
|
@@ -884,27 +813,24 @@ const createContentEntryCrud = params => {
|
|
|
884
813
|
model: initialModel,
|
|
885
814
|
plugins
|
|
886
815
|
});
|
|
816
|
+
|
|
887
817
|
/**
|
|
888
818
|
* Make sure we only work with fields that are defined in the model.
|
|
889
819
|
*/
|
|
890
|
-
|
|
891
820
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
821
|
+
|
|
892
822
|
/**
|
|
893
823
|
* The entry we are going to update.
|
|
894
824
|
*/
|
|
895
|
-
|
|
896
825
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
897
826
|
id
|
|
898
827
|
});
|
|
899
|
-
|
|
900
828
|
if (!originalStorageEntry) {
|
|
901
829
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
902
830
|
}
|
|
903
|
-
|
|
904
831
|
if (originalStorageEntry.locked) {
|
|
905
832
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
906
833
|
}
|
|
907
|
-
|
|
908
834
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
909
835
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
910
836
|
context,
|
|
@@ -923,20 +849,18 @@ const createContentEntryCrud = params => {
|
|
|
923
849
|
/**
|
|
924
850
|
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
925
851
|
*/
|
|
926
|
-
|
|
927
852
|
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
928
853
|
/**
|
|
929
854
|
* We always send the full entry to the hooks and storage operations update.
|
|
930
855
|
*/
|
|
931
|
-
|
|
932
856
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
933
857
|
savedOn: new Date().toISOString(),
|
|
858
|
+
modifiedBy: getCreatedBy(),
|
|
934
859
|
values,
|
|
935
860
|
meta,
|
|
936
861
|
status: transformEntryStatus(originalEntry.status)
|
|
937
862
|
});
|
|
938
863
|
let storageEntry = null;
|
|
939
|
-
|
|
940
864
|
try {
|
|
941
865
|
await onEntryBeforeUpdate.publish({
|
|
942
866
|
entry,
|
|
@@ -973,7 +897,6 @@ const createContentEntryCrud = params => {
|
|
|
973
897
|
});
|
|
974
898
|
}
|
|
975
899
|
},
|
|
976
|
-
|
|
977
900
|
/**
|
|
978
901
|
* Method used internally. Not documented and should not be used in users systems.
|
|
979
902
|
* @internal
|
|
@@ -990,27 +913,22 @@ const createContentEntryCrud = params => {
|
|
|
990
913
|
/**
|
|
991
914
|
* Fetch the entry from the storage.
|
|
992
915
|
*/
|
|
993
|
-
|
|
994
916
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
995
917
|
id
|
|
996
918
|
});
|
|
997
|
-
|
|
998
919
|
if (!originalStorageEntry) {
|
|
999
920
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
1000
921
|
}
|
|
1001
|
-
|
|
1002
922
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1003
923
|
/**
|
|
1004
924
|
* We can only process published entries.
|
|
1005
925
|
*/
|
|
1006
|
-
|
|
1007
926
|
if (originalEntry.status !== "published") {
|
|
1008
927
|
throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
|
|
1009
928
|
id,
|
|
1010
929
|
original: originalEntry
|
|
1011
930
|
});
|
|
1012
931
|
}
|
|
1013
|
-
|
|
1014
932
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
1015
933
|
context,
|
|
1016
934
|
model,
|
|
@@ -1026,7 +944,6 @@ const createContentEntryCrud = params => {
|
|
|
1026
944
|
/**
|
|
1027
945
|
* First we need to update existing entry.
|
|
1028
946
|
*/
|
|
1029
|
-
|
|
1030
947
|
try {
|
|
1031
948
|
await storageOperations.entries.update(model, {
|
|
1032
949
|
entry,
|
|
@@ -1040,8 +957,6 @@ const createContentEntryCrud = params => {
|
|
|
1040
957
|
/**
|
|
1041
958
|
* Then we move onto publishing it again.
|
|
1042
959
|
*/
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
960
|
try {
|
|
1046
961
|
await onEntryBeforeRepublish.publish({
|
|
1047
962
|
entry,
|
|
@@ -1068,7 +983,6 @@ const createContentEntryCrud = params => {
|
|
|
1068
983
|
});
|
|
1069
984
|
}
|
|
1070
985
|
},
|
|
1071
|
-
|
|
1072
986
|
async deleteEntryRevision(initialModel, revisionId) {
|
|
1073
987
|
const permission = await checkEntryPermissions({
|
|
1074
988
|
rwd: "d"
|
|
@@ -1092,11 +1006,9 @@ const createContentEntryCrud = params => {
|
|
|
1092
1006
|
entryId,
|
|
1093
1007
|
version: version
|
|
1094
1008
|
});
|
|
1095
|
-
|
|
1096
1009
|
if (!storageEntryToDelete) {
|
|
1097
1010
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
1098
1011
|
}
|
|
1099
|
-
|
|
1100
1012
|
(0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
|
|
1101
1013
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
1102
1014
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
@@ -1104,7 +1016,6 @@ const createContentEntryCrud = params => {
|
|
|
1104
1016
|
* If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
|
|
1105
1017
|
* At this point deleteRevision hooks are not fired.
|
|
1106
1018
|
*/
|
|
1107
|
-
|
|
1108
1019
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
1109
1020
|
return await deleteEntry({
|
|
1110
1021
|
model,
|
|
@@ -1114,16 +1025,12 @@ const createContentEntryCrud = params => {
|
|
|
1114
1025
|
/**
|
|
1115
1026
|
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
1116
1027
|
*/
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
1028
|
let entryToSetAsLatest = null;
|
|
1120
1029
|
let storageEntryToSetAsLatest = null;
|
|
1121
|
-
|
|
1122
1030
|
if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
|
|
1123
1031
|
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
|
|
1124
1032
|
storageEntryToSetAsLatest = previousStorageEntry;
|
|
1125
1033
|
}
|
|
1126
|
-
|
|
1127
1034
|
try {
|
|
1128
1035
|
await onEntryRevisionBeforeDelete.publish({
|
|
1129
1036
|
entry: entryToDelete,
|
|
@@ -1154,7 +1061,6 @@ const createContentEntryCrud = params => {
|
|
|
1154
1061
|
});
|
|
1155
1062
|
}
|
|
1156
1063
|
},
|
|
1157
|
-
|
|
1158
1064
|
async deleteEntry(initialModel, entryId) {
|
|
1159
1065
|
const permission = await checkEntryPermissions({
|
|
1160
1066
|
rwd: "d"
|
|
@@ -1167,11 +1073,9 @@ const createContentEntryCrud = params => {
|
|
|
1167
1073
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1168
1074
|
id: entryId
|
|
1169
1075
|
});
|
|
1170
|
-
|
|
1171
1076
|
if (!storageEntry) {
|
|
1172
1077
|
throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
|
|
1173
1078
|
}
|
|
1174
|
-
|
|
1175
1079
|
(0, _ownership.checkOwnership)(context, permission, storageEntry);
|
|
1176
1080
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
1177
1081
|
return await deleteEntry({
|
|
@@ -1179,7 +1083,6 @@ const createContentEntryCrud = params => {
|
|
|
1179
1083
|
entry
|
|
1180
1084
|
});
|
|
1181
1085
|
},
|
|
1182
|
-
|
|
1183
1086
|
async publishEntry(initialModel, id) {
|
|
1184
1087
|
const permission = await checkEntryPermissions({
|
|
1185
1088
|
pw: "p"
|
|
@@ -1192,11 +1095,9 @@ const createContentEntryCrud = params => {
|
|
|
1192
1095
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1193
1096
|
id
|
|
1194
1097
|
});
|
|
1195
|
-
|
|
1196
1098
|
if (!originalStorageEntry) {
|
|
1197
1099
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1198
1100
|
}
|
|
1199
|
-
|
|
1200
1101
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1201
1102
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1202
1103
|
const currentDate = new Date().toISOString();
|
|
@@ -1207,7 +1108,6 @@ const createContentEntryCrud = params => {
|
|
|
1207
1108
|
publishedOn: currentDate
|
|
1208
1109
|
});
|
|
1209
1110
|
let storageEntry = null;
|
|
1210
|
-
|
|
1211
1111
|
try {
|
|
1212
1112
|
await onEntryBeforePublish.publish({
|
|
1213
1113
|
entry,
|
|
@@ -1239,7 +1139,6 @@ const createContentEntryCrud = params => {
|
|
|
1239
1139
|
});
|
|
1240
1140
|
}
|
|
1241
1141
|
},
|
|
1242
|
-
|
|
1243
1142
|
async unpublishEntry(initialModel, id) {
|
|
1244
1143
|
const permission = await checkEntryPermissions({
|
|
1245
1144
|
pw: "u"
|
|
@@ -1254,24 +1153,20 @@ const createContentEntryCrud = params => {
|
|
|
1254
1153
|
const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
|
|
1255
1154
|
id: entryId
|
|
1256
1155
|
});
|
|
1257
|
-
|
|
1258
1156
|
if (!originalStorageEntry) {
|
|
1259
1157
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1260
1158
|
}
|
|
1261
|
-
|
|
1262
1159
|
if (originalStorageEntry.id !== id) {
|
|
1263
1160
|
throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
|
|
1264
1161
|
entry: originalStorageEntry
|
|
1265
1162
|
});
|
|
1266
1163
|
}
|
|
1267
|
-
|
|
1268
1164
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1269
1165
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1270
1166
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1271
1167
|
status: STATUS_UNPUBLISHED
|
|
1272
1168
|
});
|
|
1273
1169
|
let storageEntry = null;
|
|
1274
|
-
|
|
1275
1170
|
try {
|
|
1276
1171
|
await onEntryBeforeUnpublish.publish({
|
|
1277
1172
|
entry,
|
|
@@ -1302,8 +1197,6 @@ const createContentEntryCrud = params => {
|
|
|
1302
1197
|
});
|
|
1303
1198
|
}
|
|
1304
1199
|
}
|
|
1305
|
-
|
|
1306
1200
|
};
|
|
1307
1201
|
};
|
|
1308
|
-
|
|
1309
1202
|
exports.createContentEntryCrud = createContentEntryCrud;
|