@webiny/api-headless-cms 0.0.0-unstable.611c5af35e → 0.0.0-unstable.615a930a68
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/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 +146 -55
- 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 +17 -2
- 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 +13 -1
- 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 +16 -0
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +137 -21
- 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.d.ts +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.d.ts +9 -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 +11 -2
- 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,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,
|
|
@@ -206,52 +234,43 @@ const createContentEntryCrud = params => {
|
|
|
206
234
|
} = params;
|
|
207
235
|
const {
|
|
208
236
|
plugins
|
|
209
|
-
} = context;
|
|
237
|
+
} = context; // create
|
|
210
238
|
|
|
211
|
-
// create
|
|
212
239
|
const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
|
|
213
240
|
const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
|
|
214
|
-
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
241
|
+
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError"); // create revision
|
|
215
242
|
|
|
216
|
-
// create revision
|
|
217
243
|
const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
|
|
218
244
|
const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
|
|
219
|
-
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
245
|
+
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError"); // update
|
|
220
246
|
|
|
221
|
-
// update
|
|
222
247
|
const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
|
|
223
248
|
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
224
|
-
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
249
|
+
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError"); // publish
|
|
225
250
|
|
|
226
|
-
// publish
|
|
227
251
|
const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
|
|
228
252
|
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublic");
|
|
229
|
-
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
253
|
+
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError"); // unpublish
|
|
230
254
|
|
|
231
|
-
// unpublish
|
|
232
255
|
const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
|
|
233
256
|
const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
|
|
234
|
-
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
257
|
+
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError"); // delete
|
|
235
258
|
|
|
236
|
-
// delete
|
|
237
259
|
const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
|
|
238
260
|
const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
|
|
239
|
-
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
261
|
+
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError"); // delete revision
|
|
240
262
|
|
|
241
|
-
// delete revision
|
|
242
263
|
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
243
264
|
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
244
|
-
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
265
|
+
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError"); // get
|
|
245
266
|
|
|
246
|
-
//
|
|
247
|
-
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
|
|
267
|
+
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet"); // list
|
|
248
268
|
|
|
249
|
-
// list
|
|
250
269
|
const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
|
|
251
|
-
|
|
252
270
|
/**
|
|
253
271
|
* We need to assign some default behaviors.
|
|
254
272
|
*/
|
|
273
|
+
|
|
255
274
|
(0, _beforeCreate.assignBeforeEntryCreate)({
|
|
256
275
|
context,
|
|
257
276
|
onEntryBeforeCreate
|
|
@@ -264,18 +283,21 @@ const createContentEntryCrud = params => {
|
|
|
264
283
|
context,
|
|
265
284
|
onEntryAfterDelete
|
|
266
285
|
});
|
|
286
|
+
|
|
267
287
|
const checkEntryPermissions = check => {
|
|
268
288
|
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
269
289
|
};
|
|
270
|
-
|
|
271
290
|
/**
|
|
272
291
|
* A helper to delete the entire entry.
|
|
273
292
|
*/
|
|
293
|
+
|
|
294
|
+
|
|
274
295
|
const deleteEntry = async params => {
|
|
275
296
|
const {
|
|
276
297
|
model,
|
|
277
298
|
entry
|
|
278
299
|
} = params;
|
|
300
|
+
|
|
279
301
|
try {
|
|
280
302
|
await onEntryBeforeDelete.publish({
|
|
281
303
|
entry,
|
|
@@ -302,6 +324,8 @@ const createContentEntryCrud = params => {
|
|
|
302
324
|
/**
|
|
303
325
|
* A helper to get entries by revision IDs
|
|
304
326
|
*/
|
|
327
|
+
|
|
328
|
+
|
|
305
329
|
const getEntriesByIds = async (initialModel, ids) => {
|
|
306
330
|
const permission = await checkEntryPermissions({
|
|
307
331
|
rwd: "r"
|
|
@@ -316,6 +340,7 @@ const createContentEntryCrud = params => {
|
|
|
316
340
|
});
|
|
317
341
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
318
342
|
};
|
|
343
|
+
|
|
319
344
|
return {
|
|
320
345
|
/**
|
|
321
346
|
* Deprecated - will be removed in 5.35.0
|
|
@@ -336,6 +361,7 @@ const createContentEntryCrud = params => {
|
|
|
336
361
|
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
337
362
|
onBeforeEntryGet: onEntryBeforeGet,
|
|
338
363
|
onBeforeEntryList: onEntryBeforeList,
|
|
364
|
+
|
|
339
365
|
/**
|
|
340
366
|
* Released in 5.34.0
|
|
341
367
|
*/
|
|
@@ -362,10 +388,12 @@ const createContentEntryCrud = params => {
|
|
|
362
388
|
onEntryUnpublishError,
|
|
363
389
|
onEntryBeforeGet,
|
|
364
390
|
onEntryBeforeList,
|
|
391
|
+
|
|
365
392
|
/**
|
|
366
393
|
* Get entries by exact revision IDs from the database.
|
|
367
394
|
*/
|
|
368
395
|
getEntriesByIds: getEntriesByIds,
|
|
396
|
+
|
|
369
397
|
/**
|
|
370
398
|
* Get a single entry by revision ID from the database.
|
|
371
399
|
*/
|
|
@@ -382,11 +410,14 @@ const createContentEntryCrud = params => {
|
|
|
382
410
|
model
|
|
383
411
|
});
|
|
384
412
|
const [entry] = await getEntriesByIds(model, [id]);
|
|
413
|
+
|
|
385
414
|
if (!entry) {
|
|
386
415
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
387
416
|
}
|
|
417
|
+
|
|
388
418
|
return entry;
|
|
389
419
|
},
|
|
420
|
+
|
|
390
421
|
/**
|
|
391
422
|
* Get published revisions by entry IDs.
|
|
392
423
|
*/
|
|
@@ -404,6 +435,7 @@ const createContentEntryCrud = params => {
|
|
|
404
435
|
});
|
|
405
436
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
406
437
|
},
|
|
438
|
+
|
|
407
439
|
/**
|
|
408
440
|
* Get latest revisions by entry IDs.
|
|
409
441
|
*/
|
|
@@ -421,6 +453,7 @@ const createContentEntryCrud = params => {
|
|
|
421
453
|
});
|
|
422
454
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
423
455
|
},
|
|
456
|
+
|
|
424
457
|
async getEntryRevisions(initialModel, entryId) {
|
|
425
458
|
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
426
459
|
model: initialModel,
|
|
@@ -430,6 +463,7 @@ const createContentEntryCrud = params => {
|
|
|
430
463
|
id: entryId
|
|
431
464
|
});
|
|
432
465
|
},
|
|
466
|
+
|
|
433
467
|
/**
|
|
434
468
|
* TODO determine if this method is required at all.
|
|
435
469
|
*
|
|
@@ -456,11 +490,14 @@ const createContentEntryCrud = params => {
|
|
|
456
490
|
sort,
|
|
457
491
|
limit: 1
|
|
458
492
|
});
|
|
493
|
+
|
|
459
494
|
if (items.length === 0) {
|
|
460
495
|
throw new _handlerGraphql.NotFoundError(`Entry not found!`);
|
|
461
496
|
}
|
|
497
|
+
|
|
462
498
|
return items[0];
|
|
463
499
|
},
|
|
500
|
+
|
|
464
501
|
/**
|
|
465
502
|
* @description Should not be used directly. Internal use only!
|
|
466
503
|
*
|
|
@@ -481,12 +518,15 @@ const createContentEntryCrud = params => {
|
|
|
481
518
|
/**
|
|
482
519
|
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
483
520
|
*/
|
|
521
|
+
|
|
484
522
|
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
485
523
|
/**
|
|
486
524
|
* Possibly only get records which are owned by current user.
|
|
487
525
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
488
526
|
*/
|
|
527
|
+
|
|
489
528
|
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
529
|
+
|
|
490
530
|
if (ownedBy !== undefined) {
|
|
491
531
|
where.ownedBy = ownedBy;
|
|
492
532
|
}
|
|
@@ -494,6 +534,8 @@ const createContentEntryCrud = params => {
|
|
|
494
534
|
* Where must contain either latest or published keys.
|
|
495
535
|
* We cannot list entries without one of those
|
|
496
536
|
*/
|
|
537
|
+
|
|
538
|
+
|
|
497
539
|
if (where.latest && where.published) {
|
|
498
540
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
499
541
|
where
|
|
@@ -503,11 +545,13 @@ const createContentEntryCrud = params => {
|
|
|
503
545
|
where
|
|
504
546
|
});
|
|
505
547
|
}
|
|
506
|
-
|
|
507
|
-
|
|
548
|
+
|
|
549
|
+
const fields = (0, _searchableFields.getSearchableFields)({
|
|
550
|
+
fields: model.fields,
|
|
508
551
|
plugins: context.plugins,
|
|
509
|
-
|
|
552
|
+
input: params.fields || []
|
|
510
553
|
});
|
|
554
|
+
|
|
511
555
|
try {
|
|
512
556
|
await onEntryBeforeList.publish({
|
|
513
557
|
where,
|
|
@@ -525,6 +569,7 @@ const createContentEntryCrud = params => {
|
|
|
525
569
|
const meta = {
|
|
526
570
|
hasMoreItems,
|
|
527
571
|
totalCount,
|
|
572
|
+
|
|
528
573
|
/**
|
|
529
574
|
* Cursor should be null if there are no more items to load.
|
|
530
575
|
* Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
|
|
@@ -545,6 +590,7 @@ const createContentEntryCrud = params => {
|
|
|
545
590
|
});
|
|
546
591
|
}
|
|
547
592
|
},
|
|
593
|
+
|
|
548
594
|
async listLatestEntries(model, params) {
|
|
549
595
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
550
596
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -555,6 +601,7 @@ const createContentEntryCrud = params => {
|
|
|
555
601
|
})
|
|
556
602
|
}));
|
|
557
603
|
},
|
|
604
|
+
|
|
558
605
|
async listPublishedEntries(model, params) {
|
|
559
606
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
560
607
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -565,6 +612,7 @@ const createContentEntryCrud = params => {
|
|
|
565
612
|
})
|
|
566
613
|
}));
|
|
567
614
|
},
|
|
615
|
+
|
|
568
616
|
async createEntry(initialModel, inputData) {
|
|
569
617
|
await checkEntryPermissions({
|
|
570
618
|
rwd: "w"
|
|
@@ -574,10 +622,10 @@ const createContentEntryCrud = params => {
|
|
|
574
622
|
model: initialModel,
|
|
575
623
|
plugins
|
|
576
624
|
});
|
|
577
|
-
|
|
578
625
|
/**
|
|
579
626
|
* Make sure we only work with fields that are defined in the model.
|
|
580
627
|
*/
|
|
628
|
+
|
|
581
629
|
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
582
630
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
583
631
|
context,
|
|
@@ -619,6 +667,7 @@ const createContentEntryCrud = params => {
|
|
|
619
667
|
values: input
|
|
620
668
|
};
|
|
621
669
|
let storageEntry = null;
|
|
670
|
+
|
|
622
671
|
try {
|
|
623
672
|
await onEntryBeforeCreate.publish({
|
|
624
673
|
entry,
|
|
@@ -652,6 +701,7 @@ const createContentEntryCrud = params => {
|
|
|
652
701
|
});
|
|
653
702
|
}
|
|
654
703
|
},
|
|
704
|
+
|
|
655
705
|
async createEntryRevisionFrom(initialModel, sourceId, inputData) {
|
|
656
706
|
const permission = await checkEntryPermissions({
|
|
657
707
|
rwd: "w"
|
|
@@ -661,15 +711,15 @@ const createContentEntryCrud = params => {
|
|
|
661
711
|
model: initialModel,
|
|
662
712
|
plugins
|
|
663
713
|
});
|
|
664
|
-
|
|
665
714
|
/**
|
|
666
715
|
* Make sure we only work with fields that are defined in the model.
|
|
667
716
|
*/
|
|
668
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
669
717
|
|
|
718
|
+
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
670
719
|
/**
|
|
671
720
|
* Entries are identified by a common parent ID + Revision number.
|
|
672
721
|
*/
|
|
722
|
+
|
|
673
723
|
const {
|
|
674
724
|
id: uniqueId
|
|
675
725
|
} = (0, _utils.parseIdentifier)(sourceId);
|
|
@@ -679,13 +729,15 @@ const createContentEntryCrud = params => {
|
|
|
679
729
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
680
730
|
id: uniqueId
|
|
681
731
|
});
|
|
732
|
+
|
|
682
733
|
if (!originalStorageEntry) {
|
|
683
734
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
684
735
|
}
|
|
685
|
-
|
|
686
736
|
/**
|
|
687
737
|
* We need to convert data from DB to its original form before using it further.
|
|
688
738
|
*/
|
|
739
|
+
|
|
740
|
+
|
|
689
741
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
690
742
|
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
691
743
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
@@ -723,6 +775,7 @@ const createContentEntryCrud = params => {
|
|
|
723
775
|
values
|
|
724
776
|
});
|
|
725
777
|
let storageEntry = null;
|
|
778
|
+
|
|
726
779
|
try {
|
|
727
780
|
await onEntryBeforeCreateRevision.publish({
|
|
728
781
|
input,
|
|
@@ -759,6 +812,7 @@ const createContentEntryCrud = params => {
|
|
|
759
812
|
});
|
|
760
813
|
}
|
|
761
814
|
},
|
|
815
|
+
|
|
762
816
|
async updateEntry(initialModel, id, inputData, metaInput) {
|
|
763
817
|
const permission = await checkEntryPermissions({
|
|
764
818
|
rwd: "w"
|
|
@@ -768,24 +822,27 @@ const createContentEntryCrud = params => {
|
|
|
768
822
|
model: initialModel,
|
|
769
823
|
plugins
|
|
770
824
|
});
|
|
771
|
-
|
|
772
825
|
/**
|
|
773
826
|
* Make sure we only work with fields that are defined in the model.
|
|
774
827
|
*/
|
|
775
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
776
828
|
|
|
829
|
+
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
777
830
|
/**
|
|
778
831
|
* The entry we are going to update.
|
|
779
832
|
*/
|
|
833
|
+
|
|
780
834
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
781
835
|
id
|
|
782
836
|
});
|
|
837
|
+
|
|
783
838
|
if (!originalStorageEntry) {
|
|
784
839
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
785
840
|
}
|
|
841
|
+
|
|
786
842
|
if (originalStorageEntry.locked) {
|
|
787
843
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
788
844
|
}
|
|
845
|
+
|
|
789
846
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
790
847
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
791
848
|
context,
|
|
@@ -804,10 +861,12 @@ const createContentEntryCrud = params => {
|
|
|
804
861
|
/**
|
|
805
862
|
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
806
863
|
*/
|
|
864
|
+
|
|
807
865
|
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
808
866
|
/**
|
|
809
867
|
* We always send the full entry to the hooks and storage operations update.
|
|
810
868
|
*/
|
|
869
|
+
|
|
811
870
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
812
871
|
savedOn: new Date().toISOString(),
|
|
813
872
|
values,
|
|
@@ -815,6 +874,7 @@ const createContentEntryCrud = params => {
|
|
|
815
874
|
status: transformEntryStatus(originalEntry.status)
|
|
816
875
|
});
|
|
817
876
|
let storageEntry = null;
|
|
877
|
+
|
|
818
878
|
try {
|
|
819
879
|
await onEntryBeforeUpdate.publish({
|
|
820
880
|
entry,
|
|
@@ -851,6 +911,7 @@ const createContentEntryCrud = params => {
|
|
|
851
911
|
});
|
|
852
912
|
}
|
|
853
913
|
},
|
|
914
|
+
|
|
854
915
|
async republishEntry(initialModel, id) {
|
|
855
916
|
await checkEntryPermissions({
|
|
856
917
|
rwd: "w"
|
|
@@ -863,22 +924,27 @@ const createContentEntryCrud = params => {
|
|
|
863
924
|
/**
|
|
864
925
|
* Fetch the entry from the storage.
|
|
865
926
|
*/
|
|
927
|
+
|
|
866
928
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
867
929
|
id
|
|
868
930
|
});
|
|
931
|
+
|
|
869
932
|
if (!originalStorageEntry) {
|
|
870
933
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
871
934
|
}
|
|
935
|
+
|
|
872
936
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
873
937
|
/**
|
|
874
938
|
* We can only process published entries.
|
|
875
939
|
*/
|
|
940
|
+
|
|
876
941
|
if (originalEntry.status !== "published") {
|
|
877
942
|
throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
|
|
878
943
|
id,
|
|
879
944
|
original: originalEntry
|
|
880
945
|
});
|
|
881
946
|
}
|
|
947
|
+
|
|
882
948
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
883
949
|
context,
|
|
884
950
|
model,
|
|
@@ -894,6 +960,7 @@ const createContentEntryCrud = params => {
|
|
|
894
960
|
/**
|
|
895
961
|
* First we need to update existing entry.
|
|
896
962
|
*/
|
|
963
|
+
|
|
897
964
|
try {
|
|
898
965
|
await storageOperations.entries.update(model, {
|
|
899
966
|
entry,
|
|
@@ -907,6 +974,8 @@ const createContentEntryCrud = params => {
|
|
|
907
974
|
/**
|
|
908
975
|
* Then we move onto publishing it again.
|
|
909
976
|
*/
|
|
977
|
+
|
|
978
|
+
|
|
910
979
|
try {
|
|
911
980
|
return await storageOperations.entries.publish(model, {
|
|
912
981
|
entry,
|
|
@@ -918,6 +987,7 @@ const createContentEntryCrud = params => {
|
|
|
918
987
|
});
|
|
919
988
|
}
|
|
920
989
|
},
|
|
990
|
+
|
|
921
991
|
async deleteEntryRevision(initialModel, revisionId) {
|
|
922
992
|
const permission = await checkEntryPermissions({
|
|
923
993
|
rwd: "d"
|
|
@@ -941,9 +1011,11 @@ const createContentEntryCrud = params => {
|
|
|
941
1011
|
entryId,
|
|
942
1012
|
version: version
|
|
943
1013
|
});
|
|
1014
|
+
|
|
944
1015
|
if (!storageEntryToDelete) {
|
|
945
1016
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
946
1017
|
}
|
|
1018
|
+
|
|
947
1019
|
(0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
|
|
948
1020
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
949
1021
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
@@ -951,6 +1023,7 @@ const createContentEntryCrud = params => {
|
|
|
951
1023
|
* If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
|
|
952
1024
|
* At this point deleteRevision hooks are not fired.
|
|
953
1025
|
*/
|
|
1026
|
+
|
|
954
1027
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
955
1028
|
return await deleteEntry({
|
|
956
1029
|
model,
|
|
@@ -960,12 +1033,16 @@ const createContentEntryCrud = params => {
|
|
|
960
1033
|
/**
|
|
961
1034
|
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
962
1035
|
*/
|
|
1036
|
+
|
|
1037
|
+
|
|
963
1038
|
let entryToSetAsLatest = null;
|
|
964
1039
|
let storageEntryToSetAsLatest = null;
|
|
1040
|
+
|
|
965
1041
|
if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
|
|
966
1042
|
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
|
|
967
1043
|
storageEntryToSetAsLatest = previousStorageEntry;
|
|
968
1044
|
}
|
|
1045
|
+
|
|
969
1046
|
try {
|
|
970
1047
|
await onEntryRevisionBeforeDelete.publish({
|
|
971
1048
|
entry: entryToDelete,
|
|
@@ -996,6 +1073,7 @@ const createContentEntryCrud = params => {
|
|
|
996
1073
|
});
|
|
997
1074
|
}
|
|
998
1075
|
},
|
|
1076
|
+
|
|
999
1077
|
async deleteEntry(initialModel, entryId) {
|
|
1000
1078
|
const permission = await checkEntryPermissions({
|
|
1001
1079
|
rwd: "d"
|
|
@@ -1008,9 +1086,11 @@ const createContentEntryCrud = params => {
|
|
|
1008
1086
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1009
1087
|
id: entryId
|
|
1010
1088
|
});
|
|
1089
|
+
|
|
1011
1090
|
if (!storageEntry) {
|
|
1012
1091
|
throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
|
|
1013
1092
|
}
|
|
1093
|
+
|
|
1014
1094
|
(0, _ownership.checkOwnership)(context, permission, storageEntry);
|
|
1015
1095
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
1016
1096
|
return await deleteEntry({
|
|
@@ -1018,6 +1098,7 @@ const createContentEntryCrud = params => {
|
|
|
1018
1098
|
entry
|
|
1019
1099
|
});
|
|
1020
1100
|
},
|
|
1101
|
+
|
|
1021
1102
|
async publishEntry(initialModel, id) {
|
|
1022
1103
|
const permission = await checkEntryPermissions({
|
|
1023
1104
|
pw: "p"
|
|
@@ -1030,9 +1111,11 @@ const createContentEntryCrud = params => {
|
|
|
1030
1111
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1031
1112
|
id
|
|
1032
1113
|
});
|
|
1114
|
+
|
|
1033
1115
|
if (!originalStorageEntry) {
|
|
1034
1116
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1035
1117
|
}
|
|
1118
|
+
|
|
1036
1119
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1037
1120
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1038
1121
|
const currentDate = new Date().toISOString();
|
|
@@ -1043,6 +1126,7 @@ const createContentEntryCrud = params => {
|
|
|
1043
1126
|
publishedOn: currentDate
|
|
1044
1127
|
});
|
|
1045
1128
|
let storageEntry = null;
|
|
1129
|
+
|
|
1046
1130
|
try {
|
|
1047
1131
|
await onEntryBeforePublish.publish({
|
|
1048
1132
|
entry,
|
|
@@ -1074,6 +1158,7 @@ const createContentEntryCrud = params => {
|
|
|
1074
1158
|
});
|
|
1075
1159
|
}
|
|
1076
1160
|
},
|
|
1161
|
+
|
|
1077
1162
|
async unpublishEntry(initialModel, id) {
|
|
1078
1163
|
const permission = await checkEntryPermissions({
|
|
1079
1164
|
pw: "u"
|
|
@@ -1088,20 +1173,24 @@ const createContentEntryCrud = params => {
|
|
|
1088
1173
|
const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
|
|
1089
1174
|
id: entryId
|
|
1090
1175
|
});
|
|
1176
|
+
|
|
1091
1177
|
if (!originalStorageEntry) {
|
|
1092
1178
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1093
1179
|
}
|
|
1180
|
+
|
|
1094
1181
|
if (originalStorageEntry.id !== id) {
|
|
1095
1182
|
throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
|
|
1096
1183
|
entry: originalStorageEntry
|
|
1097
1184
|
});
|
|
1098
1185
|
}
|
|
1186
|
+
|
|
1099
1187
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1100
1188
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1101
1189
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1102
1190
|
status: STATUS_UNPUBLISHED
|
|
1103
1191
|
});
|
|
1104
1192
|
let storageEntry = null;
|
|
1193
|
+
|
|
1105
1194
|
try {
|
|
1106
1195
|
await onEntryBeforeUnpublish.publish({
|
|
1107
1196
|
entry,
|
|
@@ -1132,6 +1221,8 @@ const createContentEntryCrud = params => {
|
|
|
1132
1221
|
});
|
|
1133
1222
|
}
|
|
1134
1223
|
}
|
|
1224
|
+
|
|
1135
1225
|
};
|
|
1136
1226
|
};
|
|
1227
|
+
|
|
1137
1228
|
exports.createContentEntryCrud = createContentEntryCrud;
|