@webiny/api-headless-cms 0.0.0-unstable.990c3ab1b6 → 0.0.0-unstable.d16f688daf
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 +15 -0
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +5 -0
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +3 -0
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +3 -0
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +40 -1
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +30 -4
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +68 -10
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.d.ts +9 -0
- package/crud/contentEntry/searchableFields.js +83 -0
- package/crud/contentEntry/searchableFields.js.map +1 -0
- package/crud/contentEntry.crud.js +190 -50
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.js +2 -0
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.js +2 -0
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.js +2 -0
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.js +2 -0
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.js +32 -4
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.js +10 -0
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.js +5 -0
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/contentModelManagerFactory.js +7 -0
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldModels.js +6 -0
- package/crud/contentModel/createFieldModels.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +7 -1
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/fieldIdValidation.js +5 -0
- package/crud/contentModel/fieldIdValidation.js.map +1 -1
- package/crud/contentModel/idValidation.js +5 -0
- package/crud/contentModel/idValidation.js.map +1 -1
- package/crud/contentModel/models.js +20 -1
- package/crud/contentModel/models.js.map +1 -1
- package/crud/contentModel/systemFields.js.map +1 -1
- package/crud/contentModel/validateLayout.js +8 -0
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.js +8 -0
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +97 -33
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel.crud.js +251 -121
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.js +12 -0
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +8 -0
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +5 -0
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup.crud.js +74 -7
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/index.js +16 -0
- package/crud/index.js.map +1 -1
- package/crud/settings.crud.js +12 -0
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +37 -2
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +13 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +239 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +53 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.d.ts +2 -1
- package/fieldConverters/index.js +7 -1
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.js +9 -5
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +86 -17
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +8 -1
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.js +10 -2
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +42 -2
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +19 -2
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +41 -6
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +1 -1
- package/graphql/schema/createFieldResolvers.js +30 -8
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +26 -0
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +19 -5
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +10 -0
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +10 -0
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +15 -3
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.js +2 -0
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +3 -0
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +3 -0
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +6 -0
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +16 -0
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -0
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -0
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveList.js +3 -0
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js +3 -0
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -0
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -0
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +3 -0
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +8 -0
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +3 -0
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +8 -0
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +3 -0
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +19 -5
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +14 -1
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +12 -0
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +17 -0
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js +234 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +79 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
- package/graphqlFields/dynamicZone/index.d.ts +2 -0
- package/graphqlFields/dynamicZone/index.js +21 -0
- package/graphqlFields/dynamicZone/index.js.map +1 -0
- package/graphqlFields/file.js +8 -0
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.js +10 -0
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.d.ts +1 -1
- package/graphqlFields/index.js +14 -1
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +10 -0
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +16 -0
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +148 -68
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +77 -61
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +9 -0
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +11 -0
- package/graphqlFields/text.js.map +1 -1
- package/index.d.ts +2 -2
- package/index.js +22 -1
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +16 -0
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +4 -0
- package/modelManager/index.js.map +1 -1
- package/package.json +25 -24
- package/parameters/context.js +4 -0
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +11 -0
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +8 -0
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +8 -1
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +11 -0
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +8 -0
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
- package/plugins/CmsModelFieldConverterPlugin.js +5 -0
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.js +38 -2
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +7 -0
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.d.ts +11 -11
- package/plugins/StorageTransformPlugin.js +9 -0
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.js +10 -0
- package/plugins/index.js.map +1 -1
- package/storage/default.js +3 -0
- package/storage/default.js.map +1 -1
- package/storage/object.js +23 -2
- package/storage/object.js.map +1 -1
- package/types.d.ts +185 -42
- package/types.js +112 -7
- package/types.js.map +1 -1
- package/upgrades/5.33.0/index.js +26 -3
- package/upgrades/5.33.0/index.js.map +1 -1
- package/upgrades/index.js +3 -0
- package/upgrades/index.js.map +1 -1
- package/utils/access.js +25 -11
- package/utils/access.js.map +1 -1
- package/utils/converters/Converter.js +13 -0
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +38 -11
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +26 -0
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +15 -0
- package/utils/createTypeFromFields.js +75 -0
- package/utils/createTypeFromFields.js.map +1 -0
- package/utils/createTypeName.js +11 -1
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +38 -19
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +5 -0
- package/utils/filterAsync.js.map +1 -1
- package/utils/filterModelFields.js +9 -3
- package/utils/filterModelFields.js.map +1 -1
- package/utils/getBaseFieldType.d.ts +4 -0
- package/utils/getBaseFieldType.js +12 -0
- package/utils/getBaseFieldType.js.map +1 -0
- package/utils/getEntryTitle.js +9 -0
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.js +6 -2
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/ownership.js +8 -0
- package/utils/ownership.js.map +1 -1
- package/utils/permissions.js +23 -8
- package/utils/permissions.js.map +1 -1
- package/utils/pluralizedTypeName.js +6 -0
- package/utils/pluralizedTypeName.js.map +1 -1
- package/utils/renderFields.js +11 -1
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +19 -3
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.js +11 -1
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +13 -2
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +10 -1
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +4 -0
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +7 -0
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +7 -0
- package/validators/dateLte.js.map +1 -1
- package/validators/dynamicZone.d.ts +2 -0
- package/validators/dynamicZone.js +24 -0
- package/validators/dynamicZone.js.map +1 -0
- package/validators/gte.js +8 -0
- package/validators/gte.js.map +1 -1
- package/validators/in.js +8 -0
- package/validators/in.js.map +1 -1
- package/validators/index.js +18 -1
- package/validators/index.js.map +1 -1
- package/validators/lte.js +8 -0
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +8 -0
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +8 -0
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +9 -0
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +2 -0
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +8 -0
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +2 -0
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +2 -0
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +2 -0
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +2 -0
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +2 -0
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +5 -0
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +8 -0
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +8 -0
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +7 -0
- package/validators/unique.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
- package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
- package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
- package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
- package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
- package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
|
@@ -1,38 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.STATUS_PUBLISHED = exports.STATUS_DRAFT = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _mdbid = _interopRequireDefault(require("mdbid"));
|
|
13
|
+
|
|
10
14
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
+
|
|
11
16
|
var _entryDataValidation = require("./contentEntry/entryDataValidation");
|
|
17
|
+
|
|
12
18
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
19
|
+
|
|
13
20
|
var _pubsub = require("@webiny/pubsub");
|
|
21
|
+
|
|
14
22
|
var _beforeCreate = require("./contentEntry/beforeCreate");
|
|
23
|
+
|
|
15
24
|
var _beforeUpdate = require("./contentEntry/beforeUpdate");
|
|
25
|
+
|
|
16
26
|
var _utils = require("@webiny/utils");
|
|
27
|
+
|
|
17
28
|
var _afterDelete = require("./contentEntry/afterDelete");
|
|
29
|
+
|
|
18
30
|
var _referenceFieldsMapping = require("./contentEntry/referenceFieldsMapping");
|
|
31
|
+
|
|
19
32
|
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
33
|
+
|
|
20
34
|
var _permissions = require("../utils/permissions");
|
|
35
|
+
|
|
21
36
|
var _access = require("../utils/access");
|
|
37
|
+
|
|
22
38
|
var _ownership = require("../utils/ownership");
|
|
39
|
+
|
|
23
40
|
var _entryStorage = require("../utils/entryStorage");
|
|
41
|
+
|
|
24
42
|
var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
|
|
43
|
+
|
|
44
|
+
var _searchableFields = require("./contentEntry/searchableFields");
|
|
45
|
+
|
|
25
46
|
/**
|
|
26
47
|
* Package mdbid does not have types.
|
|
27
48
|
*/
|
|
28
49
|
// @ts-ignore
|
|
29
|
-
|
|
30
50
|
const STATUS_DRAFT = "draft";
|
|
31
51
|
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
32
52
|
const STATUS_PUBLISHED = "published";
|
|
33
53
|
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
34
54
|
const STATUS_UNPUBLISHED = "unpublished";
|
|
35
55
|
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
56
|
+
|
|
36
57
|
/**
|
|
37
58
|
* Used for some fields to convert their values.
|
|
38
59
|
*/
|
|
@@ -40,35 +61,45 @@ const convertDefaultValue = (field, value) => {
|
|
|
40
61
|
switch (field.type) {
|
|
41
62
|
case "boolean":
|
|
42
63
|
return Boolean(value);
|
|
64
|
+
|
|
43
65
|
case "number":
|
|
44
66
|
return Number(value);
|
|
67
|
+
|
|
45
68
|
default:
|
|
46
69
|
return value;
|
|
47
70
|
}
|
|
48
71
|
};
|
|
72
|
+
|
|
49
73
|
const getDefaultValue = field => {
|
|
50
74
|
const {
|
|
51
75
|
settings,
|
|
52
76
|
multipleValues
|
|
53
77
|
} = field;
|
|
78
|
+
|
|
54
79
|
if (settings && settings.defaultValue !== undefined) {
|
|
55
80
|
return convertDefaultValue(field, settings.defaultValue);
|
|
56
81
|
}
|
|
82
|
+
|
|
57
83
|
const {
|
|
58
84
|
predefinedValues
|
|
59
85
|
} = field;
|
|
86
|
+
|
|
60
87
|
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
61
88
|
return undefined;
|
|
62
89
|
}
|
|
90
|
+
|
|
63
91
|
if (!multipleValues) {
|
|
64
92
|
const selectedValue = predefinedValues.values.find(value => {
|
|
65
93
|
return !!value.selected;
|
|
66
94
|
});
|
|
95
|
+
|
|
67
96
|
if (selectedValue) {
|
|
68
97
|
return convertDefaultValue(field, selectedValue.value);
|
|
69
98
|
}
|
|
99
|
+
|
|
70
100
|
return undefined;
|
|
71
101
|
}
|
|
102
|
+
|
|
72
103
|
return predefinedValues.values.filter(({
|
|
73
104
|
selected
|
|
74
105
|
}) => !!selected).map(({
|
|
@@ -80,6 +111,8 @@ const getDefaultValue = field => {
|
|
|
80
111
|
/**
|
|
81
112
|
* Cleans and adds default values to create input data.
|
|
82
113
|
*/
|
|
114
|
+
|
|
115
|
+
|
|
83
116
|
const mapAndCleanCreateInputData = (model, input) => {
|
|
84
117
|
return model.fields.reduce((acc, field) => {
|
|
85
118
|
/**
|
|
@@ -91,10 +124,12 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
91
124
|
field
|
|
92
125
|
});
|
|
93
126
|
}
|
|
127
|
+
|
|
94
128
|
const value = input[field.fieldId];
|
|
95
129
|
/**
|
|
96
130
|
* We set the default value on create input if value is not defined.
|
|
97
131
|
*/
|
|
132
|
+
|
|
98
133
|
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
99
134
|
return acc;
|
|
100
135
|
}, {});
|
|
@@ -102,6 +137,8 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
102
137
|
/**
|
|
103
138
|
* Cleans the update input entry data.
|
|
104
139
|
*/
|
|
140
|
+
|
|
141
|
+
|
|
105
142
|
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
106
143
|
return model.fields.reduce((acc, field) => {
|
|
107
144
|
/**
|
|
@@ -116,10 +153,14 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
116
153
|
/**
|
|
117
154
|
* We cannot set default value here because user might want to update only certain field values.
|
|
118
155
|
*/
|
|
156
|
+
|
|
157
|
+
|
|
119
158
|
const value = input[field.fieldId];
|
|
159
|
+
|
|
120
160
|
if (value === undefined) {
|
|
121
161
|
return acc;
|
|
122
162
|
}
|
|
163
|
+
|
|
123
164
|
acc[field.fieldId] = value;
|
|
124
165
|
return acc;
|
|
125
166
|
}, {});
|
|
@@ -128,16 +169,22 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
128
169
|
* This method takes original entry meta and new input.
|
|
129
170
|
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
130
171
|
*/
|
|
172
|
+
|
|
173
|
+
|
|
131
174
|
const createEntryMeta = (input, original) => {
|
|
132
175
|
const meta = (0, _merge.default)(original || {}, input || {});
|
|
176
|
+
|
|
133
177
|
for (const key in meta) {
|
|
134
178
|
if (meta[key] !== undefined || meta[key] !== null) {
|
|
135
179
|
continue;
|
|
136
180
|
}
|
|
181
|
+
|
|
137
182
|
delete meta[key];
|
|
138
183
|
}
|
|
184
|
+
|
|
139
185
|
return meta;
|
|
140
186
|
};
|
|
187
|
+
|
|
141
188
|
const createEntryId = version => {
|
|
142
189
|
const entryId = (0, _mdbid.default)();
|
|
143
190
|
return {
|
|
@@ -149,16 +196,19 @@ const createEntryId = version => {
|
|
|
149
196
|
})
|
|
150
197
|
};
|
|
151
198
|
};
|
|
199
|
+
|
|
152
200
|
const increaseEntryIdVersion = id => {
|
|
153
201
|
const {
|
|
154
202
|
id: entryId,
|
|
155
203
|
version
|
|
156
204
|
} = (0, _utils.parseIdentifier)(id);
|
|
205
|
+
|
|
157
206
|
if (!version) {
|
|
158
207
|
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
159
208
|
id
|
|
160
209
|
});
|
|
161
210
|
}
|
|
211
|
+
|
|
162
212
|
return {
|
|
163
213
|
entryId,
|
|
164
214
|
version: version + 1,
|
|
@@ -168,35 +218,13 @@ const increaseEntryIdVersion = id => {
|
|
|
168
218
|
})
|
|
169
219
|
};
|
|
170
220
|
};
|
|
171
|
-
|
|
172
|
-
const {
|
|
173
|
-
plugins,
|
|
174
|
-
model,
|
|
175
|
-
fields
|
|
176
|
-
} = params;
|
|
177
|
-
const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
|
|
178
|
-
collection[field.fieldType] = field;
|
|
179
|
-
return collection;
|
|
180
|
-
}, {});
|
|
181
|
-
return model.fields.filter(field => {
|
|
182
|
-
if (!field.fieldId) {
|
|
183
|
-
return false;
|
|
184
|
-
}
|
|
185
|
-
const plugin = fieldPluginMap[field.type];
|
|
186
|
-
if (!plugin) {
|
|
187
|
-
return false;
|
|
188
|
-
} else if (!plugin.fullTextSearch) {
|
|
189
|
-
return false;
|
|
190
|
-
} else if (!fields || fields.length === 0) {
|
|
191
|
-
return true;
|
|
192
|
-
}
|
|
193
|
-
return fields.includes(field.fieldId);
|
|
194
|
-
}).map(field => field.fieldId);
|
|
195
|
-
};
|
|
221
|
+
|
|
196
222
|
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
223
|
+
|
|
197
224
|
const transformEntryStatus = status => {
|
|
198
225
|
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
199
226
|
};
|
|
227
|
+
|
|
200
228
|
const createContentEntryCrud = params => {
|
|
201
229
|
const {
|
|
202
230
|
storageOperations,
|
|
@@ -207,51 +235,60 @@ const createContentEntryCrud = params => {
|
|
|
207
235
|
const {
|
|
208
236
|
plugins
|
|
209
237
|
} = context;
|
|
238
|
+
/**
|
|
239
|
+
* Create
|
|
240
|
+
*/
|
|
210
241
|
|
|
211
|
-
// create
|
|
212
242
|
const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
|
|
213
243
|
const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
|
|
214
244
|
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
245
|
+
/**
|
|
246
|
+
* Create new revision
|
|
247
|
+
*/
|
|
215
248
|
|
|
216
|
-
// create revision
|
|
217
249
|
const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
|
|
218
250
|
const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
|
|
219
251
|
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
252
|
+
/**
|
|
253
|
+
* Update
|
|
254
|
+
*/
|
|
220
255
|
|
|
221
|
-
// update
|
|
222
256
|
const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
|
|
223
257
|
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
224
258
|
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
259
|
+
/**
|
|
260
|
+
* Publish
|
|
261
|
+
*/
|
|
225
262
|
|
|
226
|
-
// publish
|
|
227
263
|
const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
|
|
228
264
|
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublic");
|
|
229
265
|
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
266
|
+
/**
|
|
267
|
+
* Unpublish
|
|
268
|
+
*/
|
|
230
269
|
|
|
231
|
-
// unpublish
|
|
232
270
|
const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
|
|
233
271
|
const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
|
|
234
272
|
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
273
|
+
/**
|
|
274
|
+
* Delete
|
|
275
|
+
*/
|
|
235
276
|
|
|
236
|
-
// delete
|
|
237
277
|
const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
|
|
238
278
|
const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
|
|
239
|
-
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
279
|
+
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError"); // delete revision
|
|
240
280
|
|
|
241
|
-
// delete revision
|
|
242
281
|
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
243
282
|
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
244
|
-
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
283
|
+
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError"); // get
|
|
245
284
|
|
|
246
|
-
//
|
|
247
|
-
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
|
|
285
|
+
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet"); // list
|
|
248
286
|
|
|
249
|
-
// list
|
|
250
287
|
const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
|
|
251
|
-
|
|
252
288
|
/**
|
|
253
289
|
* We need to assign some default behaviors.
|
|
254
290
|
*/
|
|
291
|
+
|
|
255
292
|
(0, _beforeCreate.assignBeforeEntryCreate)({
|
|
256
293
|
context,
|
|
257
294
|
onEntryBeforeCreate
|
|
@@ -264,18 +301,21 @@ const createContentEntryCrud = params => {
|
|
|
264
301
|
context,
|
|
265
302
|
onEntryAfterDelete
|
|
266
303
|
});
|
|
304
|
+
|
|
267
305
|
const checkEntryPermissions = check => {
|
|
268
306
|
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
269
307
|
};
|
|
270
|
-
|
|
271
308
|
/**
|
|
272
309
|
* A helper to delete the entire entry.
|
|
273
310
|
*/
|
|
311
|
+
|
|
312
|
+
|
|
274
313
|
const deleteEntry = async params => {
|
|
275
314
|
const {
|
|
276
315
|
model,
|
|
277
316
|
entry
|
|
278
317
|
} = params;
|
|
318
|
+
|
|
279
319
|
try {
|
|
280
320
|
await onEntryBeforeDelete.publish({
|
|
281
321
|
entry,
|
|
@@ -302,6 +342,8 @@ const createContentEntryCrud = params => {
|
|
|
302
342
|
/**
|
|
303
343
|
* A helper to get entries by revision IDs
|
|
304
344
|
*/
|
|
345
|
+
|
|
346
|
+
|
|
305
347
|
const getEntriesByIds = async (initialModel, ids) => {
|
|
306
348
|
const permission = await checkEntryPermissions({
|
|
307
349
|
rwd: "r"
|
|
@@ -316,6 +358,7 @@ const createContentEntryCrud = params => {
|
|
|
316
358
|
});
|
|
317
359
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
318
360
|
};
|
|
361
|
+
|
|
319
362
|
return {
|
|
320
363
|
/**
|
|
321
364
|
* Deprecated - will be removed in 5.35.0
|
|
@@ -336,36 +379,65 @@ const createContentEntryCrud = params => {
|
|
|
336
379
|
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
337
380
|
onBeforeEntryGet: onEntryBeforeGet,
|
|
338
381
|
onBeforeEntryList: onEntryBeforeList,
|
|
382
|
+
|
|
339
383
|
/**
|
|
340
384
|
* Released in 5.34.0
|
|
385
|
+
*
|
|
386
|
+
* Create
|
|
341
387
|
*/
|
|
342
388
|
onEntryBeforeCreate,
|
|
343
389
|
onEntryAfterCreate,
|
|
344
390
|
onEntryCreateError,
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Create revision
|
|
394
|
+
*/
|
|
345
395
|
onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
|
|
346
396
|
onEntryRevisionAfterCreate,
|
|
347
397
|
onEntryRevisionCreateError: onEntryCreateRevisionError,
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Update
|
|
401
|
+
*/
|
|
348
402
|
onEntryBeforeUpdate,
|
|
349
403
|
onEntryAfterUpdate,
|
|
350
404
|
onEntryUpdateError,
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Delete whole entry
|
|
408
|
+
*/
|
|
351
409
|
onEntryBeforeDelete,
|
|
352
410
|
onEntryAfterDelete,
|
|
353
411
|
onEntryDeleteError,
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Delete entry revision
|
|
415
|
+
*/
|
|
354
416
|
onEntryRevisionBeforeDelete,
|
|
355
417
|
onEntryRevisionAfterDelete,
|
|
356
418
|
onEntryRevisionDeleteError,
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Publish
|
|
422
|
+
*/
|
|
357
423
|
onEntryBeforePublish,
|
|
358
424
|
onEntryAfterPublish,
|
|
359
425
|
onEntryPublishError,
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Unpublish
|
|
429
|
+
*/
|
|
360
430
|
onEntryBeforeUnpublish,
|
|
361
431
|
onEntryAfterUnpublish,
|
|
362
432
|
onEntryUnpublishError,
|
|
363
433
|
onEntryBeforeGet,
|
|
364
434
|
onEntryBeforeList,
|
|
435
|
+
|
|
365
436
|
/**
|
|
366
437
|
* Get entries by exact revision IDs from the database.
|
|
367
438
|
*/
|
|
368
439
|
getEntriesByIds: getEntriesByIds,
|
|
440
|
+
|
|
369
441
|
/**
|
|
370
442
|
* Get a single entry by revision ID from the database.
|
|
371
443
|
*/
|
|
@@ -382,11 +454,14 @@ const createContentEntryCrud = params => {
|
|
|
382
454
|
model
|
|
383
455
|
});
|
|
384
456
|
const [entry] = await getEntriesByIds(model, [id]);
|
|
457
|
+
|
|
385
458
|
if (!entry) {
|
|
386
459
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
387
460
|
}
|
|
461
|
+
|
|
388
462
|
return entry;
|
|
389
463
|
},
|
|
464
|
+
|
|
390
465
|
/**
|
|
391
466
|
* Get published revisions by entry IDs.
|
|
392
467
|
*/
|
|
@@ -404,8 +479,9 @@ const createContentEntryCrud = params => {
|
|
|
404
479
|
});
|
|
405
480
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
406
481
|
},
|
|
482
|
+
|
|
407
483
|
/**
|
|
408
|
-
* Get latest revisions by entry IDs.
|
|
484
|
+
* Get the latest revisions by entry IDs.
|
|
409
485
|
*/
|
|
410
486
|
async getLatestEntriesByIds(initialModel, ids) {
|
|
411
487
|
const permission = await checkEntryPermissions({
|
|
@@ -421,6 +497,7 @@ const createContentEntryCrud = params => {
|
|
|
421
497
|
});
|
|
422
498
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
423
499
|
},
|
|
500
|
+
|
|
424
501
|
async getEntryRevisions(initialModel, entryId) {
|
|
425
502
|
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
426
503
|
model: initialModel,
|
|
@@ -430,6 +507,7 @@ const createContentEntryCrud = params => {
|
|
|
430
507
|
id: entryId
|
|
431
508
|
});
|
|
432
509
|
},
|
|
510
|
+
|
|
433
511
|
/**
|
|
434
512
|
* TODO determine if this method is required at all.
|
|
435
513
|
*
|
|
@@ -456,11 +534,14 @@ const createContentEntryCrud = params => {
|
|
|
456
534
|
sort,
|
|
457
535
|
limit: 1
|
|
458
536
|
});
|
|
537
|
+
|
|
459
538
|
if (items.length === 0) {
|
|
460
539
|
throw new _handlerGraphql.NotFoundError(`Entry not found!`);
|
|
461
540
|
}
|
|
541
|
+
|
|
462
542
|
return items[0];
|
|
463
543
|
},
|
|
544
|
+
|
|
464
545
|
/**
|
|
465
546
|
* @description Should not be used directly. Internal use only!
|
|
466
547
|
*
|
|
@@ -481,12 +562,15 @@ const createContentEntryCrud = params => {
|
|
|
481
562
|
/**
|
|
482
563
|
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
483
564
|
*/
|
|
565
|
+
|
|
484
566
|
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
485
567
|
/**
|
|
486
568
|
* Possibly only get records which are owned by current user.
|
|
487
569
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
488
570
|
*/
|
|
571
|
+
|
|
489
572
|
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
573
|
+
|
|
490
574
|
if (ownedBy !== undefined) {
|
|
491
575
|
where.ownedBy = ownedBy;
|
|
492
576
|
}
|
|
@@ -494,6 +578,8 @@ const createContentEntryCrud = params => {
|
|
|
494
578
|
* Where must contain either latest or published keys.
|
|
495
579
|
* We cannot list entries without one of those
|
|
496
580
|
*/
|
|
581
|
+
|
|
582
|
+
|
|
497
583
|
if (where.latest && where.published) {
|
|
498
584
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
499
585
|
where
|
|
@@ -503,11 +589,13 @@ const createContentEntryCrud = params => {
|
|
|
503
589
|
where
|
|
504
590
|
});
|
|
505
591
|
}
|
|
506
|
-
|
|
507
|
-
|
|
592
|
+
|
|
593
|
+
const fields = (0, _searchableFields.getSearchableFields)({
|
|
594
|
+
fields: model.fields,
|
|
508
595
|
plugins: context.plugins,
|
|
509
|
-
|
|
596
|
+
input: params.fields || []
|
|
510
597
|
});
|
|
598
|
+
|
|
511
599
|
try {
|
|
512
600
|
await onEntryBeforeList.publish({
|
|
513
601
|
where,
|
|
@@ -525,6 +613,7 @@ const createContentEntryCrud = params => {
|
|
|
525
613
|
const meta = {
|
|
526
614
|
hasMoreItems,
|
|
527
615
|
totalCount,
|
|
616
|
+
|
|
528
617
|
/**
|
|
529
618
|
* Cursor should be null if there are no more items to load.
|
|
530
619
|
* Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
|
|
@@ -545,6 +634,7 @@ const createContentEntryCrud = params => {
|
|
|
545
634
|
});
|
|
546
635
|
}
|
|
547
636
|
},
|
|
637
|
+
|
|
548
638
|
async listLatestEntries(model, params) {
|
|
549
639
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
550
640
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -555,6 +645,7 @@ const createContentEntryCrud = params => {
|
|
|
555
645
|
})
|
|
556
646
|
}));
|
|
557
647
|
},
|
|
648
|
+
|
|
558
649
|
async listPublishedEntries(model, params) {
|
|
559
650
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
560
651
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -565,6 +656,7 @@ const createContentEntryCrud = params => {
|
|
|
565
656
|
})
|
|
566
657
|
}));
|
|
567
658
|
},
|
|
659
|
+
|
|
568
660
|
async createEntry(initialModel, inputData) {
|
|
569
661
|
await checkEntryPermissions({
|
|
570
662
|
rwd: "w"
|
|
@@ -574,10 +666,10 @@ const createContentEntryCrud = params => {
|
|
|
574
666
|
model: initialModel,
|
|
575
667
|
plugins
|
|
576
668
|
});
|
|
577
|
-
|
|
578
669
|
/**
|
|
579
670
|
* Make sure we only work with fields that are defined in the model.
|
|
580
671
|
*/
|
|
672
|
+
|
|
581
673
|
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
582
674
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
583
675
|
context,
|
|
@@ -619,6 +711,7 @@ const createContentEntryCrud = params => {
|
|
|
619
711
|
values: input
|
|
620
712
|
};
|
|
621
713
|
let storageEntry = null;
|
|
714
|
+
|
|
622
715
|
try {
|
|
623
716
|
await onEntryBeforeCreate.publish({
|
|
624
717
|
entry,
|
|
@@ -652,6 +745,7 @@ const createContentEntryCrud = params => {
|
|
|
652
745
|
});
|
|
653
746
|
}
|
|
654
747
|
},
|
|
748
|
+
|
|
655
749
|
async createEntryRevisionFrom(initialModel, sourceId, inputData) {
|
|
656
750
|
const permission = await checkEntryPermissions({
|
|
657
751
|
rwd: "w"
|
|
@@ -661,15 +755,15 @@ const createContentEntryCrud = params => {
|
|
|
661
755
|
model: initialModel,
|
|
662
756
|
plugins
|
|
663
757
|
});
|
|
664
|
-
|
|
665
758
|
/**
|
|
666
759
|
* Make sure we only work with fields that are defined in the model.
|
|
667
760
|
*/
|
|
668
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
669
761
|
|
|
762
|
+
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
670
763
|
/**
|
|
671
764
|
* Entries are identified by a common parent ID + Revision number.
|
|
672
765
|
*/
|
|
766
|
+
|
|
673
767
|
const {
|
|
674
768
|
id: uniqueId
|
|
675
769
|
} = (0, _utils.parseIdentifier)(sourceId);
|
|
@@ -679,13 +773,15 @@ const createContentEntryCrud = params => {
|
|
|
679
773
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
680
774
|
id: uniqueId
|
|
681
775
|
});
|
|
776
|
+
|
|
682
777
|
if (!originalStorageEntry) {
|
|
683
778
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
684
779
|
}
|
|
685
|
-
|
|
686
780
|
/**
|
|
687
781
|
* We need to convert data from DB to its original form before using it further.
|
|
688
782
|
*/
|
|
783
|
+
|
|
784
|
+
|
|
689
785
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
690
786
|
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
691
787
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
@@ -723,6 +819,7 @@ const createContentEntryCrud = params => {
|
|
|
723
819
|
values
|
|
724
820
|
});
|
|
725
821
|
let storageEntry = null;
|
|
822
|
+
|
|
726
823
|
try {
|
|
727
824
|
await onEntryBeforeCreateRevision.publish({
|
|
728
825
|
input,
|
|
@@ -746,6 +843,7 @@ const createContentEntryCrud = params => {
|
|
|
746
843
|
} catch (ex) {
|
|
747
844
|
await onEntryCreateRevisionError.publish({
|
|
748
845
|
entry,
|
|
846
|
+
original: originalEntry,
|
|
749
847
|
model,
|
|
750
848
|
input,
|
|
751
849
|
error: ex
|
|
@@ -759,6 +857,7 @@ const createContentEntryCrud = params => {
|
|
|
759
857
|
});
|
|
760
858
|
}
|
|
761
859
|
},
|
|
860
|
+
|
|
762
861
|
async updateEntry(initialModel, id, inputData, metaInput) {
|
|
763
862
|
const permission = await checkEntryPermissions({
|
|
764
863
|
rwd: "w"
|
|
@@ -768,24 +867,27 @@ const createContentEntryCrud = params => {
|
|
|
768
867
|
model: initialModel,
|
|
769
868
|
plugins
|
|
770
869
|
});
|
|
771
|
-
|
|
772
870
|
/**
|
|
773
871
|
* Make sure we only work with fields that are defined in the model.
|
|
774
872
|
*/
|
|
775
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
776
873
|
|
|
874
|
+
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
777
875
|
/**
|
|
778
876
|
* The entry we are going to update.
|
|
779
877
|
*/
|
|
878
|
+
|
|
780
879
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
781
880
|
id
|
|
782
881
|
});
|
|
882
|
+
|
|
783
883
|
if (!originalStorageEntry) {
|
|
784
884
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
785
885
|
}
|
|
886
|
+
|
|
786
887
|
if (originalStorageEntry.locked) {
|
|
787
888
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
788
889
|
}
|
|
890
|
+
|
|
789
891
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
790
892
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
791
893
|
context,
|
|
@@ -804,10 +906,12 @@ const createContentEntryCrud = params => {
|
|
|
804
906
|
/**
|
|
805
907
|
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
806
908
|
*/
|
|
909
|
+
|
|
807
910
|
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
808
911
|
/**
|
|
809
912
|
* We always send the full entry to the hooks and storage operations update.
|
|
810
913
|
*/
|
|
914
|
+
|
|
811
915
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
812
916
|
savedOn: new Date().toISOString(),
|
|
813
917
|
values,
|
|
@@ -815,6 +919,7 @@ const createContentEntryCrud = params => {
|
|
|
815
919
|
status: transformEntryStatus(originalEntry.status)
|
|
816
920
|
});
|
|
817
921
|
let storageEntry = null;
|
|
922
|
+
|
|
818
923
|
try {
|
|
819
924
|
await onEntryBeforeUpdate.publish({
|
|
820
925
|
entry,
|
|
@@ -851,6 +956,11 @@ const createContentEntryCrud = params => {
|
|
|
851
956
|
});
|
|
852
957
|
}
|
|
853
958
|
},
|
|
959
|
+
|
|
960
|
+
/**
|
|
961
|
+
* Method used internally. Not documented and should not be used in users systems.
|
|
962
|
+
* @internal
|
|
963
|
+
*/
|
|
854
964
|
async republishEntry(initialModel, id) {
|
|
855
965
|
await checkEntryPermissions({
|
|
856
966
|
rwd: "w"
|
|
@@ -863,22 +973,27 @@ const createContentEntryCrud = params => {
|
|
|
863
973
|
/**
|
|
864
974
|
* Fetch the entry from the storage.
|
|
865
975
|
*/
|
|
976
|
+
|
|
866
977
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
867
978
|
id
|
|
868
979
|
});
|
|
980
|
+
|
|
869
981
|
if (!originalStorageEntry) {
|
|
870
982
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
871
983
|
}
|
|
984
|
+
|
|
872
985
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
873
986
|
/**
|
|
874
987
|
* We can only process published entries.
|
|
875
988
|
*/
|
|
989
|
+
|
|
876
990
|
if (originalEntry.status !== "published") {
|
|
877
991
|
throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
|
|
878
992
|
id,
|
|
879
993
|
original: originalEntry
|
|
880
994
|
});
|
|
881
995
|
}
|
|
996
|
+
|
|
882
997
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
883
998
|
context,
|
|
884
999
|
model,
|
|
@@ -894,6 +1009,7 @@ const createContentEntryCrud = params => {
|
|
|
894
1009
|
/**
|
|
895
1010
|
* First we need to update existing entry.
|
|
896
1011
|
*/
|
|
1012
|
+
|
|
897
1013
|
try {
|
|
898
1014
|
await storageOperations.entries.update(model, {
|
|
899
1015
|
entry,
|
|
@@ -907,6 +1023,8 @@ const createContentEntryCrud = params => {
|
|
|
907
1023
|
/**
|
|
908
1024
|
* Then we move onto publishing it again.
|
|
909
1025
|
*/
|
|
1026
|
+
|
|
1027
|
+
|
|
910
1028
|
try {
|
|
911
1029
|
return await storageOperations.entries.publish(model, {
|
|
912
1030
|
entry,
|
|
@@ -918,6 +1036,7 @@ const createContentEntryCrud = params => {
|
|
|
918
1036
|
});
|
|
919
1037
|
}
|
|
920
1038
|
},
|
|
1039
|
+
|
|
921
1040
|
async deleteEntryRevision(initialModel, revisionId) {
|
|
922
1041
|
const permission = await checkEntryPermissions({
|
|
923
1042
|
rwd: "d"
|
|
@@ -941,9 +1060,11 @@ const createContentEntryCrud = params => {
|
|
|
941
1060
|
entryId,
|
|
942
1061
|
version: version
|
|
943
1062
|
});
|
|
1063
|
+
|
|
944
1064
|
if (!storageEntryToDelete) {
|
|
945
1065
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
946
1066
|
}
|
|
1067
|
+
|
|
947
1068
|
(0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
|
|
948
1069
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
949
1070
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
@@ -951,6 +1072,7 @@ const createContentEntryCrud = params => {
|
|
|
951
1072
|
* If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
|
|
952
1073
|
* At this point deleteRevision hooks are not fired.
|
|
953
1074
|
*/
|
|
1075
|
+
|
|
954
1076
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
955
1077
|
return await deleteEntry({
|
|
956
1078
|
model,
|
|
@@ -960,12 +1082,16 @@ const createContentEntryCrud = params => {
|
|
|
960
1082
|
/**
|
|
961
1083
|
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
962
1084
|
*/
|
|
1085
|
+
|
|
1086
|
+
|
|
963
1087
|
let entryToSetAsLatest = null;
|
|
964
1088
|
let storageEntryToSetAsLatest = null;
|
|
1089
|
+
|
|
965
1090
|
if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
|
|
966
1091
|
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
|
|
967
1092
|
storageEntryToSetAsLatest = previousStorageEntry;
|
|
968
1093
|
}
|
|
1094
|
+
|
|
969
1095
|
try {
|
|
970
1096
|
await onEntryRevisionBeforeDelete.publish({
|
|
971
1097
|
entry: entryToDelete,
|
|
@@ -996,6 +1122,7 @@ const createContentEntryCrud = params => {
|
|
|
996
1122
|
});
|
|
997
1123
|
}
|
|
998
1124
|
},
|
|
1125
|
+
|
|
999
1126
|
async deleteEntry(initialModel, entryId) {
|
|
1000
1127
|
const permission = await checkEntryPermissions({
|
|
1001
1128
|
rwd: "d"
|
|
@@ -1008,9 +1135,11 @@ const createContentEntryCrud = params => {
|
|
|
1008
1135
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1009
1136
|
id: entryId
|
|
1010
1137
|
});
|
|
1138
|
+
|
|
1011
1139
|
if (!storageEntry) {
|
|
1012
1140
|
throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
|
|
1013
1141
|
}
|
|
1142
|
+
|
|
1014
1143
|
(0, _ownership.checkOwnership)(context, permission, storageEntry);
|
|
1015
1144
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
1016
1145
|
return await deleteEntry({
|
|
@@ -1018,6 +1147,7 @@ const createContentEntryCrud = params => {
|
|
|
1018
1147
|
entry
|
|
1019
1148
|
});
|
|
1020
1149
|
},
|
|
1150
|
+
|
|
1021
1151
|
async publishEntry(initialModel, id) {
|
|
1022
1152
|
const permission = await checkEntryPermissions({
|
|
1023
1153
|
pw: "p"
|
|
@@ -1030,9 +1160,11 @@ const createContentEntryCrud = params => {
|
|
|
1030
1160
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1031
1161
|
id
|
|
1032
1162
|
});
|
|
1163
|
+
|
|
1033
1164
|
if (!originalStorageEntry) {
|
|
1034
1165
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1035
1166
|
}
|
|
1167
|
+
|
|
1036
1168
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1037
1169
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1038
1170
|
const currentDate = new Date().toISOString();
|
|
@@ -1043,6 +1175,7 @@ const createContentEntryCrud = params => {
|
|
|
1043
1175
|
publishedOn: currentDate
|
|
1044
1176
|
});
|
|
1045
1177
|
let storageEntry = null;
|
|
1178
|
+
|
|
1046
1179
|
try {
|
|
1047
1180
|
await onEntryBeforePublish.publish({
|
|
1048
1181
|
entry,
|
|
@@ -1074,6 +1207,7 @@ const createContentEntryCrud = params => {
|
|
|
1074
1207
|
});
|
|
1075
1208
|
}
|
|
1076
1209
|
},
|
|
1210
|
+
|
|
1077
1211
|
async unpublishEntry(initialModel, id) {
|
|
1078
1212
|
const permission = await checkEntryPermissions({
|
|
1079
1213
|
pw: "u"
|
|
@@ -1088,20 +1222,24 @@ const createContentEntryCrud = params => {
|
|
|
1088
1222
|
const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
|
|
1089
1223
|
id: entryId
|
|
1090
1224
|
});
|
|
1225
|
+
|
|
1091
1226
|
if (!originalStorageEntry) {
|
|
1092
1227
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1093
1228
|
}
|
|
1229
|
+
|
|
1094
1230
|
if (originalStorageEntry.id !== id) {
|
|
1095
1231
|
throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
|
|
1096
1232
|
entry: originalStorageEntry
|
|
1097
1233
|
});
|
|
1098
1234
|
}
|
|
1235
|
+
|
|
1099
1236
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1100
1237
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1101
1238
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1102
1239
|
status: STATUS_UNPUBLISHED
|
|
1103
1240
|
});
|
|
1104
1241
|
let storageEntry = null;
|
|
1242
|
+
|
|
1105
1243
|
try {
|
|
1106
1244
|
await onEntryBeforeUnpublish.publish({
|
|
1107
1245
|
entry,
|
|
@@ -1132,6 +1270,8 @@ const createContentEntryCrud = params => {
|
|
|
1132
1270
|
});
|
|
1133
1271
|
}
|
|
1134
1272
|
}
|
|
1273
|
+
|
|
1135
1274
|
};
|
|
1136
1275
|
};
|
|
1276
|
+
|
|
1137
1277
|
exports.createContentEntryCrud = createContentEntryCrud;
|