@webiny/api-headless-cms 0.0.0-unstable.6e5425ee89 → 0.0.0-unstable.78f581c1d2
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 +25 -2
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +59 -5
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry.crud.js +145 -27
- 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 +2 -0
- 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 +8 -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 +60 -8
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel.crud.js +96 -11
- 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 +47 -10
- 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/CmsModelObjectFieldConverterPlugin.js +53 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +4 -0
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.js +9 -5
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +28 -3
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.js +8 -1
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.js +9 -1
- 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 +18 -2
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +21 -3
- 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 +14 -1
- 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 +10 -0
- 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/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.js +11 -0
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +10 -0
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +12 -0
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +36 -6
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +51 -17
- 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.js +19 -0
- 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 +24 -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.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.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 +18 -0
- package/storage/object.js.map +1 -1
- package/types.js +62 -0
- 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 +32 -9
- 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/createTypeName.js +8 -0
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +26 -10
- 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/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 +8 -0
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +11 -0
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.js +8 -0
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +9 -1
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +7 -0
- 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/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 +15 -0
- 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
|
@@ -1,38 +1,57 @@
|
|
|
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
|
+
|
|
25
44
|
/**
|
|
26
45
|
* Package mdbid does not have types.
|
|
27
46
|
*/
|
|
28
47
|
// @ts-ignore
|
|
29
|
-
|
|
30
48
|
const STATUS_DRAFT = "draft";
|
|
31
49
|
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
32
50
|
const STATUS_PUBLISHED = "published";
|
|
33
51
|
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
34
52
|
const STATUS_UNPUBLISHED = "unpublished";
|
|
35
53
|
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
54
|
+
|
|
36
55
|
/**
|
|
37
56
|
* Used for some fields to convert their values.
|
|
38
57
|
*/
|
|
@@ -40,35 +59,45 @@ const convertDefaultValue = (field, value) => {
|
|
|
40
59
|
switch (field.type) {
|
|
41
60
|
case "boolean":
|
|
42
61
|
return Boolean(value);
|
|
62
|
+
|
|
43
63
|
case "number":
|
|
44
64
|
return Number(value);
|
|
65
|
+
|
|
45
66
|
default:
|
|
46
67
|
return value;
|
|
47
68
|
}
|
|
48
69
|
};
|
|
70
|
+
|
|
49
71
|
const getDefaultValue = field => {
|
|
50
72
|
const {
|
|
51
73
|
settings,
|
|
52
74
|
multipleValues
|
|
53
75
|
} = field;
|
|
76
|
+
|
|
54
77
|
if (settings && settings.defaultValue !== undefined) {
|
|
55
78
|
return convertDefaultValue(field, settings.defaultValue);
|
|
56
79
|
}
|
|
80
|
+
|
|
57
81
|
const {
|
|
58
82
|
predefinedValues
|
|
59
83
|
} = field;
|
|
84
|
+
|
|
60
85
|
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
61
86
|
return undefined;
|
|
62
87
|
}
|
|
88
|
+
|
|
63
89
|
if (!multipleValues) {
|
|
64
90
|
const selectedValue = predefinedValues.values.find(value => {
|
|
65
91
|
return !!value.selected;
|
|
66
92
|
});
|
|
93
|
+
|
|
67
94
|
if (selectedValue) {
|
|
68
95
|
return convertDefaultValue(field, selectedValue.value);
|
|
69
96
|
}
|
|
97
|
+
|
|
70
98
|
return undefined;
|
|
71
99
|
}
|
|
100
|
+
|
|
72
101
|
return predefinedValues.values.filter(({
|
|
73
102
|
selected
|
|
74
103
|
}) => !!selected).map(({
|
|
@@ -80,6 +109,8 @@ const getDefaultValue = field => {
|
|
|
80
109
|
/**
|
|
81
110
|
* Cleans and adds default values to create input data.
|
|
82
111
|
*/
|
|
112
|
+
|
|
113
|
+
|
|
83
114
|
const mapAndCleanCreateInputData = (model, input) => {
|
|
84
115
|
return model.fields.reduce((acc, field) => {
|
|
85
116
|
/**
|
|
@@ -91,10 +122,12 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
91
122
|
field
|
|
92
123
|
});
|
|
93
124
|
}
|
|
125
|
+
|
|
94
126
|
const value = input[field.fieldId];
|
|
95
127
|
/**
|
|
96
128
|
* We set the default value on create input if value is not defined.
|
|
97
129
|
*/
|
|
130
|
+
|
|
98
131
|
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
99
132
|
return acc;
|
|
100
133
|
}, {});
|
|
@@ -102,6 +135,8 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
102
135
|
/**
|
|
103
136
|
* Cleans the update input entry data.
|
|
104
137
|
*/
|
|
138
|
+
|
|
139
|
+
|
|
105
140
|
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
106
141
|
return model.fields.reduce((acc, field) => {
|
|
107
142
|
/**
|
|
@@ -116,10 +151,14 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
116
151
|
/**
|
|
117
152
|
* We cannot set default value here because user might want to update only certain field values.
|
|
118
153
|
*/
|
|
154
|
+
|
|
155
|
+
|
|
119
156
|
const value = input[field.fieldId];
|
|
157
|
+
|
|
120
158
|
if (value === undefined) {
|
|
121
159
|
return acc;
|
|
122
160
|
}
|
|
161
|
+
|
|
123
162
|
acc[field.fieldId] = value;
|
|
124
163
|
return acc;
|
|
125
164
|
}, {});
|
|
@@ -128,16 +167,22 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
128
167
|
* This method takes original entry meta and new input.
|
|
129
168
|
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
130
169
|
*/
|
|
170
|
+
|
|
171
|
+
|
|
131
172
|
const createEntryMeta = (input, original) => {
|
|
132
173
|
const meta = (0, _merge.default)(original || {}, input || {});
|
|
174
|
+
|
|
133
175
|
for (const key in meta) {
|
|
134
176
|
if (meta[key] !== undefined || meta[key] !== null) {
|
|
135
177
|
continue;
|
|
136
178
|
}
|
|
179
|
+
|
|
137
180
|
delete meta[key];
|
|
138
181
|
}
|
|
182
|
+
|
|
139
183
|
return meta;
|
|
140
184
|
};
|
|
185
|
+
|
|
141
186
|
const createEntryId = version => {
|
|
142
187
|
const entryId = (0, _mdbid.default)();
|
|
143
188
|
return {
|
|
@@ -149,16 +194,19 @@ const createEntryId = version => {
|
|
|
149
194
|
})
|
|
150
195
|
};
|
|
151
196
|
};
|
|
197
|
+
|
|
152
198
|
const increaseEntryIdVersion = id => {
|
|
153
199
|
const {
|
|
154
200
|
id: entryId,
|
|
155
201
|
version
|
|
156
202
|
} = (0, _utils.parseIdentifier)(id);
|
|
203
|
+
|
|
157
204
|
if (!version) {
|
|
158
205
|
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
159
206
|
id
|
|
160
207
|
});
|
|
161
208
|
}
|
|
209
|
+
|
|
162
210
|
return {
|
|
163
211
|
entryId,
|
|
164
212
|
version: version + 1,
|
|
@@ -168,6 +216,7 @@ const increaseEntryIdVersion = id => {
|
|
|
168
216
|
})
|
|
169
217
|
};
|
|
170
218
|
};
|
|
219
|
+
|
|
171
220
|
const getSearchableFields = params => {
|
|
172
221
|
const {
|
|
173
222
|
plugins,
|
|
@@ -182,7 +231,9 @@ const getSearchableFields = params => {
|
|
|
182
231
|
if (!field.fieldId) {
|
|
183
232
|
return false;
|
|
184
233
|
}
|
|
234
|
+
|
|
185
235
|
const plugin = fieldPluginMap[field.type];
|
|
236
|
+
|
|
186
237
|
if (!plugin) {
|
|
187
238
|
return false;
|
|
188
239
|
} else if (!plugin.fullTextSearch) {
|
|
@@ -190,13 +241,17 @@ const getSearchableFields = params => {
|
|
|
190
241
|
} else if (!fields || fields.length === 0) {
|
|
191
242
|
return true;
|
|
192
243
|
}
|
|
244
|
+
|
|
193
245
|
return fields.includes(field.fieldId);
|
|
194
246
|
}).map(field => field.fieldId);
|
|
195
247
|
};
|
|
248
|
+
|
|
196
249
|
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
250
|
+
|
|
197
251
|
const transformEntryStatus = status => {
|
|
198
252
|
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
199
253
|
};
|
|
254
|
+
|
|
200
255
|
const createContentEntryCrud = params => {
|
|
201
256
|
const {
|
|
202
257
|
storageOperations,
|
|
@@ -206,52 +261,43 @@ const createContentEntryCrud = params => {
|
|
|
206
261
|
} = params;
|
|
207
262
|
const {
|
|
208
263
|
plugins
|
|
209
|
-
} = context;
|
|
264
|
+
} = context; // create
|
|
210
265
|
|
|
211
|
-
// create
|
|
212
266
|
const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
|
|
213
267
|
const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
|
|
214
|
-
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
268
|
+
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError"); // create revision
|
|
215
269
|
|
|
216
|
-
// create revision
|
|
217
270
|
const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
|
|
218
271
|
const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
|
|
219
|
-
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
272
|
+
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError"); // update
|
|
220
273
|
|
|
221
|
-
// update
|
|
222
274
|
const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
|
|
223
275
|
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
224
|
-
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
276
|
+
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError"); // publish
|
|
225
277
|
|
|
226
|
-
// publish
|
|
227
278
|
const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
|
|
228
279
|
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublic");
|
|
229
|
-
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
280
|
+
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError"); // unpublish
|
|
230
281
|
|
|
231
|
-
// unpublish
|
|
232
282
|
const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
|
|
233
283
|
const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
|
|
234
|
-
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
284
|
+
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError"); // delete
|
|
235
285
|
|
|
236
|
-
// delete
|
|
237
286
|
const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
|
|
238
287
|
const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
|
|
239
|
-
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
288
|
+
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError"); // delete revision
|
|
240
289
|
|
|
241
|
-
// delete revision
|
|
242
290
|
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
243
291
|
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
244
|
-
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
292
|
+
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError"); // get
|
|
245
293
|
|
|
246
|
-
//
|
|
247
|
-
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
|
|
294
|
+
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet"); // list
|
|
248
295
|
|
|
249
|
-
// list
|
|
250
296
|
const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
|
|
251
|
-
|
|
252
297
|
/**
|
|
253
298
|
* We need to assign some default behaviors.
|
|
254
299
|
*/
|
|
300
|
+
|
|
255
301
|
(0, _beforeCreate.assignBeforeEntryCreate)({
|
|
256
302
|
context,
|
|
257
303
|
onEntryBeforeCreate
|
|
@@ -264,18 +310,21 @@ const createContentEntryCrud = params => {
|
|
|
264
310
|
context,
|
|
265
311
|
onEntryAfterDelete
|
|
266
312
|
});
|
|
313
|
+
|
|
267
314
|
const checkEntryPermissions = check => {
|
|
268
315
|
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
269
316
|
};
|
|
270
|
-
|
|
271
317
|
/**
|
|
272
318
|
* A helper to delete the entire entry.
|
|
273
319
|
*/
|
|
320
|
+
|
|
321
|
+
|
|
274
322
|
const deleteEntry = async params => {
|
|
275
323
|
const {
|
|
276
324
|
model,
|
|
277
325
|
entry
|
|
278
326
|
} = params;
|
|
327
|
+
|
|
279
328
|
try {
|
|
280
329
|
await onEntryBeforeDelete.publish({
|
|
281
330
|
entry,
|
|
@@ -302,6 +351,8 @@ const createContentEntryCrud = params => {
|
|
|
302
351
|
/**
|
|
303
352
|
* A helper to get entries by revision IDs
|
|
304
353
|
*/
|
|
354
|
+
|
|
355
|
+
|
|
305
356
|
const getEntriesByIds = async (initialModel, ids) => {
|
|
306
357
|
const permission = await checkEntryPermissions({
|
|
307
358
|
rwd: "r"
|
|
@@ -316,6 +367,7 @@ const createContentEntryCrud = params => {
|
|
|
316
367
|
});
|
|
317
368
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
318
369
|
};
|
|
370
|
+
|
|
319
371
|
return {
|
|
320
372
|
/**
|
|
321
373
|
* Deprecated - will be removed in 5.35.0
|
|
@@ -336,6 +388,7 @@ const createContentEntryCrud = params => {
|
|
|
336
388
|
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
337
389
|
onBeforeEntryGet: onEntryBeforeGet,
|
|
338
390
|
onBeforeEntryList: onEntryBeforeList,
|
|
391
|
+
|
|
339
392
|
/**
|
|
340
393
|
* Released in 5.34.0
|
|
341
394
|
*/
|
|
@@ -362,10 +415,12 @@ const createContentEntryCrud = params => {
|
|
|
362
415
|
onEntryUnpublishError,
|
|
363
416
|
onEntryBeforeGet,
|
|
364
417
|
onEntryBeforeList,
|
|
418
|
+
|
|
365
419
|
/**
|
|
366
420
|
* Get entries by exact revision IDs from the database.
|
|
367
421
|
*/
|
|
368
422
|
getEntriesByIds: getEntriesByIds,
|
|
423
|
+
|
|
369
424
|
/**
|
|
370
425
|
* Get a single entry by revision ID from the database.
|
|
371
426
|
*/
|
|
@@ -382,11 +437,14 @@ const createContentEntryCrud = params => {
|
|
|
382
437
|
model
|
|
383
438
|
});
|
|
384
439
|
const [entry] = await getEntriesByIds(model, [id]);
|
|
440
|
+
|
|
385
441
|
if (!entry) {
|
|
386
442
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
387
443
|
}
|
|
444
|
+
|
|
388
445
|
return entry;
|
|
389
446
|
},
|
|
447
|
+
|
|
390
448
|
/**
|
|
391
449
|
* Get published revisions by entry IDs.
|
|
392
450
|
*/
|
|
@@ -404,6 +462,7 @@ const createContentEntryCrud = params => {
|
|
|
404
462
|
});
|
|
405
463
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
406
464
|
},
|
|
465
|
+
|
|
407
466
|
/**
|
|
408
467
|
* Get latest revisions by entry IDs.
|
|
409
468
|
*/
|
|
@@ -421,6 +480,7 @@ const createContentEntryCrud = params => {
|
|
|
421
480
|
});
|
|
422
481
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
423
482
|
},
|
|
483
|
+
|
|
424
484
|
async getEntryRevisions(initialModel, entryId) {
|
|
425
485
|
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
426
486
|
model: initialModel,
|
|
@@ -430,6 +490,7 @@ const createContentEntryCrud = params => {
|
|
|
430
490
|
id: entryId
|
|
431
491
|
});
|
|
432
492
|
},
|
|
493
|
+
|
|
433
494
|
/**
|
|
434
495
|
* TODO determine if this method is required at all.
|
|
435
496
|
*
|
|
@@ -456,11 +517,14 @@ const createContentEntryCrud = params => {
|
|
|
456
517
|
sort,
|
|
457
518
|
limit: 1
|
|
458
519
|
});
|
|
520
|
+
|
|
459
521
|
if (items.length === 0) {
|
|
460
522
|
throw new _handlerGraphql.NotFoundError(`Entry not found!`);
|
|
461
523
|
}
|
|
524
|
+
|
|
462
525
|
return items[0];
|
|
463
526
|
},
|
|
527
|
+
|
|
464
528
|
/**
|
|
465
529
|
* @description Should not be used directly. Internal use only!
|
|
466
530
|
*
|
|
@@ -481,12 +545,15 @@ const createContentEntryCrud = params => {
|
|
|
481
545
|
/**
|
|
482
546
|
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
483
547
|
*/
|
|
548
|
+
|
|
484
549
|
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
485
550
|
/**
|
|
486
551
|
* Possibly only get records which are owned by current user.
|
|
487
552
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
488
553
|
*/
|
|
554
|
+
|
|
489
555
|
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
556
|
+
|
|
490
557
|
if (ownedBy !== undefined) {
|
|
491
558
|
where.ownedBy = ownedBy;
|
|
492
559
|
}
|
|
@@ -494,6 +561,8 @@ const createContentEntryCrud = params => {
|
|
|
494
561
|
* Where must contain either latest or published keys.
|
|
495
562
|
* We cannot list entries without one of those
|
|
496
563
|
*/
|
|
564
|
+
|
|
565
|
+
|
|
497
566
|
if (where.latest && where.published) {
|
|
498
567
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
499
568
|
where
|
|
@@ -503,11 +572,13 @@ const createContentEntryCrud = params => {
|
|
|
503
572
|
where
|
|
504
573
|
});
|
|
505
574
|
}
|
|
575
|
+
|
|
506
576
|
const fields = getSearchableFields({
|
|
507
577
|
model,
|
|
508
578
|
plugins: context.plugins,
|
|
509
579
|
fields: params.fields || []
|
|
510
580
|
});
|
|
581
|
+
|
|
511
582
|
try {
|
|
512
583
|
await onEntryBeforeList.publish({
|
|
513
584
|
where,
|
|
@@ -525,6 +596,7 @@ const createContentEntryCrud = params => {
|
|
|
525
596
|
const meta = {
|
|
526
597
|
hasMoreItems,
|
|
527
598
|
totalCount,
|
|
599
|
+
|
|
528
600
|
/**
|
|
529
601
|
* Cursor should be null if there are no more items to load.
|
|
530
602
|
* Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
|
|
@@ -545,6 +617,7 @@ const createContentEntryCrud = params => {
|
|
|
545
617
|
});
|
|
546
618
|
}
|
|
547
619
|
},
|
|
620
|
+
|
|
548
621
|
async listLatestEntries(model, params) {
|
|
549
622
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
550
623
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -555,6 +628,7 @@ const createContentEntryCrud = params => {
|
|
|
555
628
|
})
|
|
556
629
|
}));
|
|
557
630
|
},
|
|
631
|
+
|
|
558
632
|
async listPublishedEntries(model, params) {
|
|
559
633
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
560
634
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -565,6 +639,7 @@ const createContentEntryCrud = params => {
|
|
|
565
639
|
})
|
|
566
640
|
}));
|
|
567
641
|
},
|
|
642
|
+
|
|
568
643
|
async createEntry(initialModel, inputData) {
|
|
569
644
|
await checkEntryPermissions({
|
|
570
645
|
rwd: "w"
|
|
@@ -574,10 +649,10 @@ const createContentEntryCrud = params => {
|
|
|
574
649
|
model: initialModel,
|
|
575
650
|
plugins
|
|
576
651
|
});
|
|
577
|
-
|
|
578
652
|
/**
|
|
579
653
|
* Make sure we only work with fields that are defined in the model.
|
|
580
654
|
*/
|
|
655
|
+
|
|
581
656
|
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
582
657
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
583
658
|
context,
|
|
@@ -619,6 +694,7 @@ const createContentEntryCrud = params => {
|
|
|
619
694
|
values: input
|
|
620
695
|
};
|
|
621
696
|
let storageEntry = null;
|
|
697
|
+
|
|
622
698
|
try {
|
|
623
699
|
await onEntryBeforeCreate.publish({
|
|
624
700
|
entry,
|
|
@@ -652,6 +728,7 @@ const createContentEntryCrud = params => {
|
|
|
652
728
|
});
|
|
653
729
|
}
|
|
654
730
|
},
|
|
731
|
+
|
|
655
732
|
async createEntryRevisionFrom(initialModel, sourceId, inputData) {
|
|
656
733
|
const permission = await checkEntryPermissions({
|
|
657
734
|
rwd: "w"
|
|
@@ -661,15 +738,15 @@ const createContentEntryCrud = params => {
|
|
|
661
738
|
model: initialModel,
|
|
662
739
|
plugins
|
|
663
740
|
});
|
|
664
|
-
|
|
665
741
|
/**
|
|
666
742
|
* Make sure we only work with fields that are defined in the model.
|
|
667
743
|
*/
|
|
668
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
669
744
|
|
|
745
|
+
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
670
746
|
/**
|
|
671
747
|
* Entries are identified by a common parent ID + Revision number.
|
|
672
748
|
*/
|
|
749
|
+
|
|
673
750
|
const {
|
|
674
751
|
id: uniqueId
|
|
675
752
|
} = (0, _utils.parseIdentifier)(sourceId);
|
|
@@ -679,13 +756,15 @@ const createContentEntryCrud = params => {
|
|
|
679
756
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
680
757
|
id: uniqueId
|
|
681
758
|
});
|
|
759
|
+
|
|
682
760
|
if (!originalStorageEntry) {
|
|
683
761
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
684
762
|
}
|
|
685
|
-
|
|
686
763
|
/**
|
|
687
764
|
* We need to convert data from DB to its original form before using it further.
|
|
688
765
|
*/
|
|
766
|
+
|
|
767
|
+
|
|
689
768
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
690
769
|
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
691
770
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
@@ -723,6 +802,7 @@ const createContentEntryCrud = params => {
|
|
|
723
802
|
values
|
|
724
803
|
});
|
|
725
804
|
let storageEntry = null;
|
|
805
|
+
|
|
726
806
|
try {
|
|
727
807
|
await onEntryBeforeCreateRevision.publish({
|
|
728
808
|
input,
|
|
@@ -759,6 +839,7 @@ const createContentEntryCrud = params => {
|
|
|
759
839
|
});
|
|
760
840
|
}
|
|
761
841
|
},
|
|
842
|
+
|
|
762
843
|
async updateEntry(initialModel, id, inputData, metaInput) {
|
|
763
844
|
const permission = await checkEntryPermissions({
|
|
764
845
|
rwd: "w"
|
|
@@ -768,24 +849,27 @@ const createContentEntryCrud = params => {
|
|
|
768
849
|
model: initialModel,
|
|
769
850
|
plugins
|
|
770
851
|
});
|
|
771
|
-
|
|
772
852
|
/**
|
|
773
853
|
* Make sure we only work with fields that are defined in the model.
|
|
774
854
|
*/
|
|
775
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
776
855
|
|
|
856
|
+
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
777
857
|
/**
|
|
778
858
|
* The entry we are going to update.
|
|
779
859
|
*/
|
|
860
|
+
|
|
780
861
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
781
862
|
id
|
|
782
863
|
});
|
|
864
|
+
|
|
783
865
|
if (!originalStorageEntry) {
|
|
784
866
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
785
867
|
}
|
|
868
|
+
|
|
786
869
|
if (originalStorageEntry.locked) {
|
|
787
870
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
788
871
|
}
|
|
872
|
+
|
|
789
873
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
790
874
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
791
875
|
context,
|
|
@@ -804,10 +888,12 @@ const createContentEntryCrud = params => {
|
|
|
804
888
|
/**
|
|
805
889
|
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
806
890
|
*/
|
|
891
|
+
|
|
807
892
|
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
808
893
|
/**
|
|
809
894
|
* We always send the full entry to the hooks and storage operations update.
|
|
810
895
|
*/
|
|
896
|
+
|
|
811
897
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
812
898
|
savedOn: new Date().toISOString(),
|
|
813
899
|
values,
|
|
@@ -815,6 +901,7 @@ const createContentEntryCrud = params => {
|
|
|
815
901
|
status: transformEntryStatus(originalEntry.status)
|
|
816
902
|
});
|
|
817
903
|
let storageEntry = null;
|
|
904
|
+
|
|
818
905
|
try {
|
|
819
906
|
await onEntryBeforeUpdate.publish({
|
|
820
907
|
entry,
|
|
@@ -851,6 +938,7 @@ const createContentEntryCrud = params => {
|
|
|
851
938
|
});
|
|
852
939
|
}
|
|
853
940
|
},
|
|
941
|
+
|
|
854
942
|
async republishEntry(initialModel, id) {
|
|
855
943
|
await checkEntryPermissions({
|
|
856
944
|
rwd: "w"
|
|
@@ -863,22 +951,27 @@ const createContentEntryCrud = params => {
|
|
|
863
951
|
/**
|
|
864
952
|
* Fetch the entry from the storage.
|
|
865
953
|
*/
|
|
954
|
+
|
|
866
955
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
867
956
|
id
|
|
868
957
|
});
|
|
958
|
+
|
|
869
959
|
if (!originalStorageEntry) {
|
|
870
960
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
871
961
|
}
|
|
962
|
+
|
|
872
963
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
873
964
|
/**
|
|
874
965
|
* We can only process published entries.
|
|
875
966
|
*/
|
|
967
|
+
|
|
876
968
|
if (originalEntry.status !== "published") {
|
|
877
969
|
throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
|
|
878
970
|
id,
|
|
879
971
|
original: originalEntry
|
|
880
972
|
});
|
|
881
973
|
}
|
|
974
|
+
|
|
882
975
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
883
976
|
context,
|
|
884
977
|
model,
|
|
@@ -894,6 +987,7 @@ const createContentEntryCrud = params => {
|
|
|
894
987
|
/**
|
|
895
988
|
* First we need to update existing entry.
|
|
896
989
|
*/
|
|
990
|
+
|
|
897
991
|
try {
|
|
898
992
|
await storageOperations.entries.update(model, {
|
|
899
993
|
entry,
|
|
@@ -907,6 +1001,8 @@ const createContentEntryCrud = params => {
|
|
|
907
1001
|
/**
|
|
908
1002
|
* Then we move onto publishing it again.
|
|
909
1003
|
*/
|
|
1004
|
+
|
|
1005
|
+
|
|
910
1006
|
try {
|
|
911
1007
|
return await storageOperations.entries.publish(model, {
|
|
912
1008
|
entry,
|
|
@@ -918,6 +1014,7 @@ const createContentEntryCrud = params => {
|
|
|
918
1014
|
});
|
|
919
1015
|
}
|
|
920
1016
|
},
|
|
1017
|
+
|
|
921
1018
|
async deleteEntryRevision(initialModel, revisionId) {
|
|
922
1019
|
const permission = await checkEntryPermissions({
|
|
923
1020
|
rwd: "d"
|
|
@@ -941,9 +1038,11 @@ const createContentEntryCrud = params => {
|
|
|
941
1038
|
entryId,
|
|
942
1039
|
version: version
|
|
943
1040
|
});
|
|
1041
|
+
|
|
944
1042
|
if (!storageEntryToDelete) {
|
|
945
1043
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
946
1044
|
}
|
|
1045
|
+
|
|
947
1046
|
(0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
|
|
948
1047
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
949
1048
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
@@ -951,6 +1050,7 @@ const createContentEntryCrud = params => {
|
|
|
951
1050
|
* If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
|
|
952
1051
|
* At this point deleteRevision hooks are not fired.
|
|
953
1052
|
*/
|
|
1053
|
+
|
|
954
1054
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
955
1055
|
return await deleteEntry({
|
|
956
1056
|
model,
|
|
@@ -960,12 +1060,16 @@ const createContentEntryCrud = params => {
|
|
|
960
1060
|
/**
|
|
961
1061
|
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
962
1062
|
*/
|
|
1063
|
+
|
|
1064
|
+
|
|
963
1065
|
let entryToSetAsLatest = null;
|
|
964
1066
|
let storageEntryToSetAsLatest = null;
|
|
1067
|
+
|
|
965
1068
|
if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
|
|
966
1069
|
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
|
|
967
1070
|
storageEntryToSetAsLatest = previousStorageEntry;
|
|
968
1071
|
}
|
|
1072
|
+
|
|
969
1073
|
try {
|
|
970
1074
|
await onEntryRevisionBeforeDelete.publish({
|
|
971
1075
|
entry: entryToDelete,
|
|
@@ -996,6 +1100,7 @@ const createContentEntryCrud = params => {
|
|
|
996
1100
|
});
|
|
997
1101
|
}
|
|
998
1102
|
},
|
|
1103
|
+
|
|
999
1104
|
async deleteEntry(initialModel, entryId) {
|
|
1000
1105
|
const permission = await checkEntryPermissions({
|
|
1001
1106
|
rwd: "d"
|
|
@@ -1008,9 +1113,11 @@ const createContentEntryCrud = params => {
|
|
|
1008
1113
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1009
1114
|
id: entryId
|
|
1010
1115
|
});
|
|
1116
|
+
|
|
1011
1117
|
if (!storageEntry) {
|
|
1012
1118
|
throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
|
|
1013
1119
|
}
|
|
1120
|
+
|
|
1014
1121
|
(0, _ownership.checkOwnership)(context, permission, storageEntry);
|
|
1015
1122
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
1016
1123
|
return await deleteEntry({
|
|
@@ -1018,6 +1125,7 @@ const createContentEntryCrud = params => {
|
|
|
1018
1125
|
entry
|
|
1019
1126
|
});
|
|
1020
1127
|
},
|
|
1128
|
+
|
|
1021
1129
|
async publishEntry(initialModel, id) {
|
|
1022
1130
|
const permission = await checkEntryPermissions({
|
|
1023
1131
|
pw: "p"
|
|
@@ -1030,9 +1138,11 @@ const createContentEntryCrud = params => {
|
|
|
1030
1138
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1031
1139
|
id
|
|
1032
1140
|
});
|
|
1141
|
+
|
|
1033
1142
|
if (!originalStorageEntry) {
|
|
1034
1143
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1035
1144
|
}
|
|
1145
|
+
|
|
1036
1146
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1037
1147
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1038
1148
|
const currentDate = new Date().toISOString();
|
|
@@ -1043,6 +1153,7 @@ const createContentEntryCrud = params => {
|
|
|
1043
1153
|
publishedOn: currentDate
|
|
1044
1154
|
});
|
|
1045
1155
|
let storageEntry = null;
|
|
1156
|
+
|
|
1046
1157
|
try {
|
|
1047
1158
|
await onEntryBeforePublish.publish({
|
|
1048
1159
|
entry,
|
|
@@ -1074,6 +1185,7 @@ const createContentEntryCrud = params => {
|
|
|
1074
1185
|
});
|
|
1075
1186
|
}
|
|
1076
1187
|
},
|
|
1188
|
+
|
|
1077
1189
|
async unpublishEntry(initialModel, id) {
|
|
1078
1190
|
const permission = await checkEntryPermissions({
|
|
1079
1191
|
pw: "u"
|
|
@@ -1088,20 +1200,24 @@ const createContentEntryCrud = params => {
|
|
|
1088
1200
|
const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
|
|
1089
1201
|
id: entryId
|
|
1090
1202
|
});
|
|
1203
|
+
|
|
1091
1204
|
if (!originalStorageEntry) {
|
|
1092
1205
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1093
1206
|
}
|
|
1207
|
+
|
|
1094
1208
|
if (originalStorageEntry.id !== id) {
|
|
1095
1209
|
throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
|
|
1096
1210
|
entry: originalStorageEntry
|
|
1097
1211
|
});
|
|
1098
1212
|
}
|
|
1213
|
+
|
|
1099
1214
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1100
1215
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1101
1216
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1102
1217
|
status: STATUS_UNPUBLISHED
|
|
1103
1218
|
});
|
|
1104
1219
|
let storageEntry = null;
|
|
1220
|
+
|
|
1105
1221
|
try {
|
|
1106
1222
|
await onEntryBeforeUnpublish.publish({
|
|
1107
1223
|
entry,
|
|
@@ -1132,6 +1248,8 @@ const createContentEntryCrud = params => {
|
|
|
1132
1248
|
});
|
|
1133
1249
|
}
|
|
1134
1250
|
}
|
|
1251
|
+
|
|
1135
1252
|
};
|
|
1136
1253
|
};
|
|
1254
|
+
|
|
1137
1255
|
exports.createContentEntryCrud = createContentEntryCrud;
|