@webiny/api-headless-cms 5.39.0-beta.0 → 5.39.0-beta.2
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/constants.d.ts +31 -0
- package/constants.js +48 -1
- package/constants.js.map +1 -1
- package/context.js +40 -34
- package/context.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryData.d.ts +20 -0
- package/crud/contentEntry/entryDataFactories/createEntryData.js +228 -0
- package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.d.ts +21 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +114 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.d.ts +13 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +61 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.d.ts +12 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +57 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.d.ts +12 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +38 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.d.ts +20 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +122 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/index.d.ts +8 -0
- package/crud/contentEntry/entryDataFactories/index.js +95 -0
- package/crud/contentEntry/entryDataFactories/index.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.d.ts +5 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js +36 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/statuses.d.ts +4 -0
- package/crud/contentEntry/entryDataFactories/statuses.js +15 -0
- package/crud/contentEntry/entryDataFactories/statuses.js.map +1 -0
- package/crud/contentEntry/entryDataValidation.js +29 -24
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +14 -9
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +10 -12
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.js +2 -3
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +1 -4
- package/crud/contentEntry.crud.js +140 -383
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/fields/descriptionField.js +1 -1
- package/crud/contentModel/fields/descriptionField.js.map +1 -1
- package/crud/contentModel/fields/imageField.js +3 -7
- package/crud/contentModel/fields/imageField.js.map +1 -1
- package/crud/contentModel/fields/titleField.js +1 -1
- package/crud/contentModel/fields/titleField.js.map +1 -1
- package/crud/contentModel/listModelsFromDatabase.js +3 -4
- package/crud/contentModel/listModelsFromDatabase.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +4 -5
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +96 -96
- package/crud/contentModel.crud.js +28 -26
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +1 -1
- package/crud/contentModelGroup.crud.js +18 -15
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/system.crud.js +4 -4
- package/crud/system.crud.js.map +1 -1
- package/export/crud/exporting.js +2 -3
- package/export/crud/exporting.js.map +1 -1
- package/export/crud/importing.js +3 -3
- package/export/crud/importing.js.map +1 -1
- package/export/crud/imports/importData.js +30 -3
- package/export/crud/imports/importData.js.map +1 -1
- package/export/crud/imports/importGroups.js +15 -10
- package/export/crud/imports/importGroups.js.map +1 -1
- package/export/crud/imports/importModels.js +14 -12
- package/export/crud/imports/importModels.js.map +1 -1
- package/export/crud/imports/validateGroups.js +13 -7
- package/export/crud/imports/validateGroups.js.map +1 -1
- package/export/crud/imports/validateInput.js +15 -9
- package/export/crud/imports/validateInput.js.map +1 -1
- package/export/crud/imports/validateModels.d.ts +4 -1
- package/export/crud/imports/validateModels.js +24 -25
- package/export/crud/imports/validateModels.js.map +1 -1
- package/export/types.d.ts +2 -0
- package/export/types.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -6
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +2 -7
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +44 -37
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/graphql/getSchema.js +15 -9
- package/graphql/getSchema.js.map +1 -1
- package/graphql/index.d.ts +1 -1
- package/graphql/schema/baseContentSchema.js +6 -7
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.js +1 -8
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +44 -13
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +1 -1
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +5 -5
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +11 -11
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +6 -9
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +30 -24
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +4 -5
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +4 -5
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +9 -4
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +1 -1
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +9 -4
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.d.ts +1 -2
- package/graphql/schema/resolvers/manage/resolvePublish.js +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +3 -4
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +3 -4
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphqlFields/datetime.js +1 -2
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +13 -13
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +6 -6
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
- package/graphqlFields/index.js +2 -1
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/json.d.ts +2 -0
- package/graphqlFields/json.js +49 -0
- package/graphqlFields/json.js.map +1 -0
- package/graphqlFields/object.js +20 -28
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +24 -14
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText/RichTextPluginsProcessor.d.ts +6 -0
- package/graphqlFields/richText/RichTextPluginsProcessor.js +34 -0
- package/graphqlFields/richText/RichTextPluginsProcessor.js.map +1 -0
- package/graphqlFields/richText/richTextResolver.d.ts +7 -0
- package/graphqlFields/richText/richTextResolver.js +39 -0
- package/graphqlFields/richText/richTextResolver.js.map +1 -0
- package/graphqlFields/richText.js +8 -2
- package/graphqlFields/richText.js.map +1 -1
- package/htmlRenderer/LexicalRenderer.d.ts +5 -0
- package/htmlRenderer/LexicalRenderer.js +28 -0
- package/htmlRenderer/LexicalRenderer.js.map +1 -0
- package/htmlRenderer/createLexicalHTMLRenderer.d.ts +2 -0
- package/htmlRenderer/createLexicalHTMLRenderer.js +31 -0
- package/htmlRenderer/createLexicalHTMLRenderer.js.map +1 -0
- package/index.d.ts +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +0 -4
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/package.json +21 -19
- package/parameters/context.js +1 -1
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +1 -2
- package/parameters/header.js.map +1 -1
- package/parameters/manual.js +6 -3
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +1 -2
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGraphQLSchemaPlugin.js +3 -4
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -1
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +1 -4
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +4 -7
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +3 -4
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +6 -4
- package/plugins/CmsModelPlugin.js +52 -27
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +1 -4
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/CmsRichTextRendererPlugin.d.ts +24 -0
- package/plugins/CmsRichTextRendererPlugin.js +28 -0
- package/plugins/CmsRichTextRendererPlugin.js.map +1 -0
- package/plugins/StorageOperationsCmsModelPlugin.js +3 -6
- package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.d.ts +2 -2
- package/plugins/StorageTransformPlugin.js +1 -4
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.d.ts +1 -0
- package/plugins/index.js +11 -0
- package/plugins/index.js.map +1 -1
- package/storage/index.d.ts +1 -0
- package/storage/index.js +15 -0
- package/storage/index.js.map +1 -0
- package/storage/json.d.ts +2 -0
- package/storage/json.js +27 -0
- package/storage/json.js.map +1 -0
- package/storage/object.js +5 -7
- package/storage/object.js.map +1 -1
- package/types.d.ts +182 -53
- package/types.js +0 -3
- package/types.js.map +1 -1
- package/utils/access.d.ts +0 -1
- package/utils/access.js +1 -10
- package/utils/access.js.map +1 -1
- package/utils/caching/Cache.js +3 -5
- package/utils/caching/Cache.js.map +1 -1
- package/utils/caching/CacheKey.js +0 -3
- package/utils/caching/CacheKey.js.map +1 -1
- package/utils/converters/Converter.js +1 -4
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +10 -6
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +3 -3
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/date.d.ts +2 -2
- package/utils/date.js +1 -1
- package/utils/date.js.map +1 -1
- package/utils/entryStorage.js +3 -3
- package/utils/entryStorage.js.map +1 -1
- package/utils/identity.d.ts +2 -0
- package/utils/identity.js +20 -0
- package/utils/identity.js.map +1 -0
- package/utils/permissions/ModelsPermissions.js +0 -3
- package/utils/permissions/ModelsPermissions.js.map +1 -1
- package/utils/renderGetFilterFields.js +2 -3
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderListFilterFields.js +9 -3
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +2 -1
- package/utils/renderSortEnum.js.map +1 -1
- package/validators/gte.js +1 -2
- package/validators/gte.js.map +1 -1
- package/validators/in.js +1 -2
- package/validators/in.js.map +1 -1
- package/validators/lte.js +1 -2
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +1 -2
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +1 -2
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +2 -2
- package/validators/pattern.js.map +1 -1
- package/validators/timeGte.js +1 -2
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +1 -2
- package/validators/timeLte.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +0 -7
- package/graphql/schema/resolvers/commonFieldResolvers.js +0 -15
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +0 -1
|
@@ -4,191 +4,26 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.createContentEntryCrud =
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
-
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
7
|
+
exports.createContentEntryCrud = void 0;
|
|
10
8
|
var _utils = require("@webiny/utils");
|
|
11
9
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
12
10
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
13
|
-
var _types = require("../types");
|
|
14
11
|
var _entryDataValidation = require("./contentEntry/entryDataValidation");
|
|
15
12
|
var _pubsub = require("@webiny/pubsub");
|
|
16
13
|
var _beforeCreate = require("./contentEntry/beforeCreate");
|
|
17
14
|
var _beforeUpdate = require("./contentEntry/beforeUpdate");
|
|
18
15
|
var _afterDelete = require("./contentEntry/afterDelete");
|
|
19
|
-
var _referenceFieldsMapping = require("./contentEntry/referenceFieldsMapping");
|
|
20
16
|
var _entryStorage = require("../utils/entryStorage");
|
|
21
17
|
var _searchableFields = require("./contentEntry/searchableFields");
|
|
22
18
|
var _filterAsync = require("../utils/filterAsync");
|
|
23
|
-
var _apiSecurity = require("@webiny/api-security
|
|
19
|
+
var _apiSecurity = require("@webiny/api-security");
|
|
24
20
|
var _constants = require("../constants");
|
|
25
|
-
var
|
|
26
|
-
const STATUS_DRAFT = _types.CONTENT_ENTRY_STATUS.DRAFT;
|
|
27
|
-
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
28
|
-
const STATUS_PUBLISHED = _types.CONTENT_ENTRY_STATUS.PUBLISHED;
|
|
29
|
-
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
30
|
-
const STATUS_UNPUBLISHED = _types.CONTENT_ENTRY_STATUS.UNPUBLISHED;
|
|
31
|
-
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
32
|
-
/**
|
|
33
|
-
* Used for some fields to convert their values.
|
|
34
|
-
*/
|
|
35
|
-
const convertDefaultValue = (field, value) => {
|
|
36
|
-
switch (field.type) {
|
|
37
|
-
case "boolean":
|
|
38
|
-
return Boolean(value);
|
|
39
|
-
case "number":
|
|
40
|
-
return Number(value);
|
|
41
|
-
default:
|
|
42
|
-
return value;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
const getDefaultValue = field => {
|
|
46
|
-
const {
|
|
47
|
-
settings,
|
|
48
|
-
multipleValues
|
|
49
|
-
} = field;
|
|
50
|
-
if (settings && settings.defaultValue !== undefined) {
|
|
51
|
-
return convertDefaultValue(field, settings.defaultValue);
|
|
52
|
-
}
|
|
53
|
-
const {
|
|
54
|
-
predefinedValues
|
|
55
|
-
} = field;
|
|
56
|
-
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
57
|
-
return undefined;
|
|
58
|
-
}
|
|
59
|
-
if (!multipleValues) {
|
|
60
|
-
const selectedValue = predefinedValues.values.find(value => {
|
|
61
|
-
return !!value.selected;
|
|
62
|
-
});
|
|
63
|
-
if (selectedValue) {
|
|
64
|
-
return convertDefaultValue(field, selectedValue.value);
|
|
65
|
-
}
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
return predefinedValues.values.filter(({
|
|
69
|
-
selected
|
|
70
|
-
}) => !!selected).map(({
|
|
71
|
-
value
|
|
72
|
-
}) => {
|
|
73
|
-
return convertDefaultValue(field, value);
|
|
74
|
-
});
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* Cleans and adds default values to create input data.
|
|
78
|
-
*/
|
|
79
|
-
const mapAndCleanCreateInputData = (model, input) => {
|
|
80
|
-
return model.fields.reduce((acc, field) => {
|
|
81
|
-
/**
|
|
82
|
-
* This should never happen, but let's make it sure.
|
|
83
|
-
* The fix would be for the user to add the fieldId on the field definition.
|
|
84
|
-
*/
|
|
85
|
-
if (!field.fieldId) {
|
|
86
|
-
throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
|
|
87
|
-
field
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
const value = input[field.fieldId];
|
|
91
|
-
/**
|
|
92
|
-
* We set the default value on create input if value is not defined.
|
|
93
|
-
*/
|
|
94
|
-
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
95
|
-
return acc;
|
|
96
|
-
}, {});
|
|
97
|
-
};
|
|
98
|
-
/**
|
|
99
|
-
* Cleans the update input entry data.
|
|
100
|
-
*/
|
|
101
|
-
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
102
|
-
return model.fields.reduce((acc, field) => {
|
|
103
|
-
/**
|
|
104
|
-
* This should never happen, but let's make it sure.
|
|
105
|
-
* The fix would be for the user to add the fieldId on the field definition.
|
|
106
|
-
*/
|
|
107
|
-
if (!field.fieldId) {
|
|
108
|
-
throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
|
|
109
|
-
field
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* We cannot set default value here because user might want to update only certain field values.
|
|
114
|
-
*/
|
|
115
|
-
const value = input[field.fieldId];
|
|
116
|
-
if (value === undefined) {
|
|
117
|
-
return acc;
|
|
118
|
-
}
|
|
119
|
-
acc[field.fieldId] = value;
|
|
120
|
-
return acc;
|
|
121
|
-
}, {});
|
|
122
|
-
};
|
|
123
|
-
/**
|
|
124
|
-
* This method takes original entry meta and new input.
|
|
125
|
-
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
126
|
-
*/
|
|
127
|
-
const createEntryMeta = (input, original) => {
|
|
128
|
-
const meta = (0, _merge.default)(original || {}, input || {});
|
|
129
|
-
return (0, _utils.removeUndefinedValues)((0, _utils.removeNullValues)(meta));
|
|
130
|
-
};
|
|
131
|
-
const createEntryId = input => {
|
|
132
|
-
let entryId = (0, _utils.mdbid)();
|
|
133
|
-
if (input.id) {
|
|
134
|
-
if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\-]+)([a-zA-Z0-9])$/) === null) {
|
|
135
|
-
throw new _error.default("The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.", "INVALID_ID", {
|
|
136
|
-
id: input.id
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
entryId = input.id;
|
|
140
|
-
}
|
|
141
|
-
const version = 1;
|
|
142
|
-
return {
|
|
143
|
-
entryId,
|
|
144
|
-
version,
|
|
145
|
-
id: (0, _utils.createIdentifier)({
|
|
146
|
-
id: entryId,
|
|
147
|
-
version
|
|
148
|
-
})
|
|
149
|
-
};
|
|
150
|
-
};
|
|
151
|
-
const increaseEntryIdVersion = id => {
|
|
152
|
-
const {
|
|
153
|
-
id: entryId,
|
|
154
|
-
version
|
|
155
|
-
} = (0, _utils.parseIdentifier)(id);
|
|
156
|
-
if (!version) {
|
|
157
|
-
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
158
|
-
id
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
return {
|
|
162
|
-
entryId,
|
|
163
|
-
version: version + 1,
|
|
164
|
-
id: (0, _utils.createIdentifier)({
|
|
165
|
-
id: entryId,
|
|
166
|
-
version: version + 1
|
|
167
|
-
})
|
|
168
|
-
};
|
|
169
|
-
};
|
|
170
|
-
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
171
|
-
const transformEntryStatus = status => {
|
|
172
|
-
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
173
|
-
};
|
|
21
|
+
var _entryDataFactories = require("./contentEntry/entryDataFactories");
|
|
174
22
|
const createSort = sort => {
|
|
175
|
-
if (
|
|
176
|
-
return
|
|
177
|
-
} else if (sort.filter(s => !!s).length === 0) {
|
|
178
|
-
return ["createdOn_DESC"];
|
|
179
|
-
}
|
|
180
|
-
return sort;
|
|
181
|
-
};
|
|
182
|
-
const getIdentity = (input, defaultValue) => {
|
|
183
|
-
const identity = input !== null && input !== void 0 && input.id && input !== null && input !== void 0 && input.displayName && input !== null && input !== void 0 && input.type ? input : defaultValue;
|
|
184
|
-
if (!identity) {
|
|
185
|
-
return null;
|
|
23
|
+
if (Array.isArray(sort) && sort.filter(Boolean).length > 0) {
|
|
24
|
+
return sort;
|
|
186
25
|
}
|
|
187
|
-
return
|
|
188
|
-
id: identity.id,
|
|
189
|
-
displayName: identity.displayName,
|
|
190
|
-
type: identity.type
|
|
191
|
-
};
|
|
26
|
+
return ["revisionCreatedOn_DESC"];
|
|
192
27
|
};
|
|
193
28
|
const createContentEntryCrud = params => {
|
|
194
29
|
const {
|
|
@@ -343,7 +178,7 @@ const createContentEntryCrud = params => {
|
|
|
343
178
|
});
|
|
344
179
|
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
345
180
|
return entriesPermissions.ensure({
|
|
346
|
-
owns: entry.
|
|
181
|
+
owns: entry.revisionCreatedBy
|
|
347
182
|
}, {
|
|
348
183
|
throw: false
|
|
349
184
|
});
|
|
@@ -376,7 +211,7 @@ const createContentEntryCrud = params => {
|
|
|
376
211
|
});
|
|
377
212
|
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
378
213
|
return entriesPermissions.ensure({
|
|
379
|
-
owns: entry.
|
|
214
|
+
owns: entry.revisionCreatedBy
|
|
380
215
|
}, {
|
|
381
216
|
throw: false
|
|
382
217
|
});
|
|
@@ -394,7 +229,7 @@ const createContentEntryCrud = params => {
|
|
|
394
229
|
});
|
|
395
230
|
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
396
231
|
return entriesPermissions.ensure({
|
|
397
|
-
owns: entry.
|
|
232
|
+
owns: entry.revisionCreatedBy
|
|
398
233
|
}, {
|
|
399
234
|
throw: false
|
|
400
235
|
});
|
|
@@ -448,13 +283,15 @@ const createContentEntryCrud = params => {
|
|
|
448
283
|
limit: initialLimit
|
|
449
284
|
} = params;
|
|
450
285
|
const limit = initialLimit && initialLimit > 0 ? initialLimit : 50;
|
|
451
|
-
const where =
|
|
286
|
+
const where = {
|
|
287
|
+
...initialWhere
|
|
288
|
+
};
|
|
452
289
|
/**
|
|
453
290
|
* Possibly only get records which are owned by current user.
|
|
454
291
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
455
292
|
*/
|
|
456
293
|
if (await entriesPermissions.canAccessOnlyOwnRecords()) {
|
|
457
|
-
where.
|
|
294
|
+
where.createdBy = getSecurityIdentity().id;
|
|
458
295
|
}
|
|
459
296
|
|
|
460
297
|
/**
|
|
@@ -485,12 +322,13 @@ const createContentEntryCrud = params => {
|
|
|
485
322
|
totalCount,
|
|
486
323
|
cursor,
|
|
487
324
|
items
|
|
488
|
-
} = await storageOperations.entries.list(model,
|
|
325
|
+
} = await storageOperations.entries.list(model, {
|
|
326
|
+
...params,
|
|
489
327
|
sort: createSort(params.sort),
|
|
490
328
|
limit,
|
|
491
329
|
where,
|
|
492
330
|
fields
|
|
493
|
-
})
|
|
331
|
+
});
|
|
494
332
|
const meta = {
|
|
495
333
|
hasMoreItems,
|
|
496
334
|
totalCount,
|
|
@@ -515,63 +353,25 @@ const createContentEntryCrud = params => {
|
|
|
515
353
|
}
|
|
516
354
|
};
|
|
517
355
|
const createEntry = async (model, rawInput, options) => {
|
|
518
|
-
var _rawInput$wbyAco_loca;
|
|
519
356
|
await entriesPermissions.ensure({
|
|
520
357
|
rwd: "w"
|
|
521
358
|
});
|
|
522
359
|
await modelsPermissions.ensureCanAccessModel({
|
|
523
360
|
model
|
|
524
361
|
});
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
const initialInput = mapAndCleanCreateInputData(model, rawInput);
|
|
530
|
-
await (0, _entryDataValidation.validateModelEntryDataOrThrow)({
|
|
531
|
-
context,
|
|
532
|
-
model,
|
|
533
|
-
data: initialInput,
|
|
534
|
-
skipValidators: options === null || options === void 0 ? void 0 : options.skipValidators
|
|
535
|
-
});
|
|
536
|
-
const input = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
362
|
+
const {
|
|
363
|
+
entry,
|
|
364
|
+
input
|
|
365
|
+
} = await (0, _entryDataFactories.createEntryData)({
|
|
537
366
|
context,
|
|
538
367
|
model,
|
|
539
|
-
|
|
540
|
-
|
|
368
|
+
options,
|
|
369
|
+
rawInput,
|
|
370
|
+
getLocale,
|
|
371
|
+
getTenant,
|
|
372
|
+
getIdentity: getSecurityIdentity,
|
|
373
|
+
entriesPermissions
|
|
541
374
|
});
|
|
542
|
-
const locale = getLocale();
|
|
543
|
-
const identity = getSecurityIdentity();
|
|
544
|
-
const {
|
|
545
|
-
id,
|
|
546
|
-
entryId,
|
|
547
|
-
version
|
|
548
|
-
} = createEntryId(rawInput);
|
|
549
|
-
/**
|
|
550
|
-
* There is a possibility that user sends an ID in the input, so we will use that one.
|
|
551
|
-
* There is no check if the ID is unique or not, that is up to the user.
|
|
552
|
-
*/
|
|
553
|
-
const currentDate = new Date();
|
|
554
|
-
const entry = {
|
|
555
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
556
|
-
tenant: getTenant().id,
|
|
557
|
-
entryId,
|
|
558
|
-
id,
|
|
559
|
-
modelId: model.modelId,
|
|
560
|
-
locale: locale.code,
|
|
561
|
-
createdOn: (0, _date.getDate)(rawInput.createdOn, currentDate),
|
|
562
|
-
savedOn: (0, _date.getDate)(rawInput.savedOn, currentDate),
|
|
563
|
-
publishedOn: (0, _date.getDate)(rawInput.publishedOn),
|
|
564
|
-
createdBy: getIdentity(rawInput.createdBy, identity),
|
|
565
|
-
ownedBy: getIdentity(rawInput.ownedBy, identity),
|
|
566
|
-
modifiedBy: getIdentity(rawInput.modifiedBy, null),
|
|
567
|
-
version,
|
|
568
|
-
locked: false,
|
|
569
|
-
status: STATUS_DRAFT,
|
|
570
|
-
values: input,
|
|
571
|
-
location: {
|
|
572
|
-
folderId: ((_rawInput$wbyAco_loca = rawInput.wbyAco_location) === null || _rawInput$wbyAco_loca === void 0 ? void 0 : _rawInput$wbyAco_loca.folderId) || _constants.ROOT_FOLDER
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
375
|
let storageEntry = null;
|
|
576
376
|
try {
|
|
577
377
|
await onEntryBeforeCreate.publish({
|
|
@@ -614,11 +414,6 @@ const createContentEntryCrud = params => {
|
|
|
614
414
|
model
|
|
615
415
|
});
|
|
616
416
|
|
|
617
|
-
/**
|
|
618
|
-
* Make sure we only work with fields that are defined in the model.
|
|
619
|
-
*/
|
|
620
|
-
const input = mapAndCleanUpdatedInputData(model, rawInput);
|
|
621
|
-
|
|
622
417
|
/**
|
|
623
418
|
* Entries are identified by a common parent ID + Revision number.
|
|
624
419
|
*/
|
|
@@ -634,46 +429,31 @@ const createContentEntryCrud = params => {
|
|
|
634
429
|
if (!originalStorageEntry) {
|
|
635
430
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
636
431
|
}
|
|
432
|
+
if (!latestStorageEntry) {
|
|
433
|
+
throw new _handlerGraphql.NotFoundError(`Latest entry "${uniqueId}" of model "${model.modelId}" was not found.`);
|
|
434
|
+
}
|
|
637
435
|
|
|
638
436
|
/**
|
|
639
437
|
* We need to convert data from DB to its original form before using it further.
|
|
640
438
|
*/
|
|
641
439
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
642
|
-
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
643
|
-
await (0, _entryDataValidation.validateModelEntryDataOrThrow)({
|
|
644
|
-
context,
|
|
645
|
-
model,
|
|
646
|
-
data: initialValues,
|
|
647
|
-
entry: originalEntry,
|
|
648
|
-
skipValidators: options === null || options === void 0 ? void 0 : options.skipValidators
|
|
649
|
-
});
|
|
650
|
-
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
651
|
-
context,
|
|
652
|
-
model,
|
|
653
|
-
input: initialValues,
|
|
654
|
-
validateEntries: false
|
|
655
|
-
});
|
|
656
440
|
await entriesPermissions.ensure({
|
|
657
441
|
owns: originalEntry.createdBy
|
|
658
442
|
});
|
|
659
|
-
const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;
|
|
660
443
|
const {
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
} =
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
locked: false,
|
|
675
|
-
status: STATUS_DRAFT,
|
|
676
|
-
values
|
|
444
|
+
entry,
|
|
445
|
+
input
|
|
446
|
+
} = await (0, _entryDataFactories.createEntryRevisionFromData)({
|
|
447
|
+
sourceId,
|
|
448
|
+
model,
|
|
449
|
+
rawInput,
|
|
450
|
+
options,
|
|
451
|
+
context,
|
|
452
|
+
getIdentity: getSecurityIdentity,
|
|
453
|
+
getTenant,
|
|
454
|
+
getLocale,
|
|
455
|
+
originalEntry,
|
|
456
|
+
latestStorageEntry
|
|
677
457
|
});
|
|
678
458
|
let storageEntry = null;
|
|
679
459
|
try {
|
|
@@ -714,7 +494,6 @@ const createContentEntryCrud = params => {
|
|
|
714
494
|
}
|
|
715
495
|
};
|
|
716
496
|
const updateEntry = async (model, id, rawInput, metaInput, options) => {
|
|
717
|
-
var _rawInput$wbyAco_loca2;
|
|
718
497
|
await entriesPermissions.ensure({
|
|
719
498
|
rwd: "w"
|
|
720
499
|
});
|
|
@@ -722,11 +501,6 @@ const createContentEntryCrud = params => {
|
|
|
722
501
|
model
|
|
723
502
|
});
|
|
724
503
|
|
|
725
|
-
/**
|
|
726
|
-
* Make sure we only work with fields that are defined in the model.
|
|
727
|
-
*/
|
|
728
|
-
const input = mapAndCleanUpdatedInputData(model, rawInput);
|
|
729
|
-
|
|
730
504
|
/**
|
|
731
505
|
* The entry we are going to update.
|
|
732
506
|
*/
|
|
@@ -740,48 +514,23 @@ const createContentEntryCrud = params => {
|
|
|
740
514
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
741
515
|
}
|
|
742
516
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
743
|
-
await (0, _entryDataValidation.validateModelEntryDataOrThrow)({
|
|
744
|
-
context,
|
|
745
|
-
model,
|
|
746
|
-
data: input,
|
|
747
|
-
entry: originalEntry,
|
|
748
|
-
skipValidators: options === null || options === void 0 ? void 0 : options.skipValidators
|
|
749
|
-
});
|
|
750
517
|
await entriesPermissions.ensure({
|
|
751
|
-
owns: originalEntry.
|
|
518
|
+
owns: originalEntry.revisionCreatedBy
|
|
752
519
|
});
|
|
753
|
-
const
|
|
754
|
-
|
|
755
|
-
|
|
520
|
+
const {
|
|
521
|
+
entry,
|
|
522
|
+
input
|
|
523
|
+
} = await (0, _entryDataFactories.createUpdateEntryData)({
|
|
756
524
|
model,
|
|
757
|
-
|
|
758
|
-
|
|
525
|
+
rawInput,
|
|
526
|
+
options,
|
|
527
|
+
context,
|
|
528
|
+
getIdentity: getSecurityIdentity,
|
|
529
|
+
getTenant,
|
|
530
|
+
getLocale,
|
|
531
|
+
originalEntry,
|
|
532
|
+
metaInput
|
|
759
533
|
});
|
|
760
|
-
|
|
761
|
-
/**
|
|
762
|
-
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
763
|
-
*/
|
|
764
|
-
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
765
|
-
/**
|
|
766
|
-
* We always send the full entry to the hooks and storage operations update.
|
|
767
|
-
*/
|
|
768
|
-
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
769
|
-
savedOn: (0, _date.getDate)(rawInput.savedOn, new Date()),
|
|
770
|
-
createdOn: (0, _date.getDate)(rawInput.createdOn, originalEntry.createdOn),
|
|
771
|
-
publishedOn: (0, _date.getDate)(rawInput.publishedOn, originalEntry.publishedOn),
|
|
772
|
-
createdBy: getIdentity(rawInput.createdBy, originalEntry.createdBy),
|
|
773
|
-
modifiedBy: getIdentity(rawInput.modifiedBy, getSecurityIdentity()),
|
|
774
|
-
ownedBy: getIdentity(rawInput.ownedBy, originalEntry.ownedBy),
|
|
775
|
-
values,
|
|
776
|
-
meta,
|
|
777
|
-
status: transformEntryStatus(originalEntry.status)
|
|
778
|
-
});
|
|
779
|
-
const folderId = (_rawInput$wbyAco_loca2 = rawInput.wbyAco_location) === null || _rawInput$wbyAco_loca2 === void 0 ? void 0 : _rawInput$wbyAco_loca2.folderId;
|
|
780
|
-
if (folderId) {
|
|
781
|
-
entry.location = {
|
|
782
|
-
folderId
|
|
783
|
-
};
|
|
784
|
-
}
|
|
785
534
|
let storageEntry = null;
|
|
786
535
|
try {
|
|
787
536
|
await onEntryBeforeUpdate.publish({
|
|
@@ -826,7 +575,7 @@ const createContentEntryCrud = params => {
|
|
|
826
575
|
await modelsPermissions.ensureCanAccessModel({
|
|
827
576
|
model
|
|
828
577
|
});
|
|
829
|
-
const input = mapAndCleanUpdatedInputData(model, inputData || {});
|
|
578
|
+
const input = (0, _entryDataFactories.mapAndCleanUpdatedInputData)(model, inputData || {});
|
|
830
579
|
let originalEntry;
|
|
831
580
|
if (id) {
|
|
832
581
|
/**
|
|
@@ -849,7 +598,6 @@ const createContentEntryCrud = params => {
|
|
|
849
598
|
return result.length > 0 ? result : [];
|
|
850
599
|
};
|
|
851
600
|
const moveEntry = async (model, id, folderId) => {
|
|
852
|
-
var _entry$location;
|
|
853
601
|
await entriesPermissions.ensure({
|
|
854
602
|
rwd: "w"
|
|
855
603
|
});
|
|
@@ -869,7 +617,7 @@ const createContentEntryCrud = params => {
|
|
|
869
617
|
/**
|
|
870
618
|
* No need to continue if the entry is already in the requested folder.
|
|
871
619
|
*/
|
|
872
|
-
if (
|
|
620
|
+
if (entry.location?.folderId === folderId) {
|
|
873
621
|
return entry;
|
|
874
622
|
}
|
|
875
623
|
try {
|
|
@@ -916,18 +664,13 @@ const createContentEntryCrud = params => {
|
|
|
916
664
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
917
665
|
}
|
|
918
666
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
919
|
-
const
|
|
667
|
+
const {
|
|
668
|
+
entry
|
|
669
|
+
} = await (0, _entryDataFactories.createRepublishEntryData)({
|
|
920
670
|
context,
|
|
921
671
|
model,
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
});
|
|
925
|
-
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
926
|
-
status: STATUS_PUBLISHED,
|
|
927
|
-
publishedOn: (0, _date.getDate)(originalEntry.publishedOn, new Date()),
|
|
928
|
-
savedOn: (0, _date.getDate)(originalEntry.savedOn, new Date()),
|
|
929
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
930
|
-
values
|
|
672
|
+
originalEntry,
|
|
673
|
+
getIdentity: getSecurityIdentity
|
|
931
674
|
});
|
|
932
675
|
const storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
933
676
|
/**
|
|
@@ -989,7 +732,7 @@ const createContentEntryCrud = params => {
|
|
|
989
732
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
990
733
|
id: entryId
|
|
991
734
|
});
|
|
992
|
-
const
|
|
735
|
+
const storagePreviousEntry = await storageOperations.entries.getPreviousRevision(model, {
|
|
993
736
|
entryId,
|
|
994
737
|
version: version
|
|
995
738
|
});
|
|
@@ -997,28 +740,46 @@ const createContentEntryCrud = params => {
|
|
|
997
740
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
998
741
|
}
|
|
999
742
|
await entriesPermissions.ensure({
|
|
1000
|
-
owns: storageEntryToDelete.
|
|
743
|
+
owns: storageEntryToDelete.revisionCreatedBy
|
|
1001
744
|
});
|
|
1002
745
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
1003
746
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
747
|
+
|
|
1004
748
|
/**
|
|
1005
|
-
* If targeted record is the latest entry record and there is no previous one, we need
|
|
1006
|
-
*
|
|
749
|
+
* If targeted record is the latest entry record and there is no previous one, we need
|
|
750
|
+
* to run full delete with hooks. In this case, `deleteRevision` hooks are not fired.
|
|
1007
751
|
*/
|
|
1008
|
-
if (entryToDelete.id === latestEntryRevisionId && !
|
|
752
|
+
if (entryToDelete.id === latestEntryRevisionId && !storagePreviousEntry) {
|
|
1009
753
|
return await deleteEntryHelper({
|
|
1010
754
|
model,
|
|
1011
755
|
entry: entryToDelete
|
|
1012
756
|
});
|
|
1013
757
|
}
|
|
1014
758
|
/**
|
|
1015
|
-
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
759
|
+
* If targeted record is the latest entry revision, set the previous one as the new latest.
|
|
1016
760
|
*/
|
|
1017
761
|
let entryToSetAsLatest = null;
|
|
1018
762
|
let storageEntryToSetAsLatest = null;
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
763
|
+
let updatedEntryToSetAsLatest = null;
|
|
764
|
+
let storageUpdatedEntryToSetAsLatest = null;
|
|
765
|
+
if (entryToDelete.id === latestEntryRevisionId && storagePreviousEntry) {
|
|
766
|
+
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, storagePreviousEntry);
|
|
767
|
+
storageEntryToSetAsLatest = storagePreviousEntry;
|
|
768
|
+
|
|
769
|
+
/**
|
|
770
|
+
* Since we're setting a different revision as the latest, we need to update entry-level meta
|
|
771
|
+
* fields. The values are taken from the latest revision we're about to delete. The update of the
|
|
772
|
+
* new latest revision is performed within storage operations.
|
|
773
|
+
*/
|
|
774
|
+
const pickedEntryLevelMetaFields = (0, _constants.pickEntryMetaFields)(entryToDelete, _constants.isEntryLevelEntryMetaField);
|
|
775
|
+
updatedEntryToSetAsLatest = {
|
|
776
|
+
...entryToSetAsLatest,
|
|
777
|
+
...pickedEntryLevelMetaFields
|
|
778
|
+
};
|
|
779
|
+
storageUpdatedEntryToSetAsLatest = {
|
|
780
|
+
...storageEntryToSetAsLatest,
|
|
781
|
+
...pickedEntryLevelMetaFields
|
|
782
|
+
};
|
|
1022
783
|
}
|
|
1023
784
|
try {
|
|
1024
785
|
await onEntryRevisionBeforeDelete.publish({
|
|
@@ -1028,8 +789,8 @@ const createContentEntryCrud = params => {
|
|
|
1028
789
|
await storageOperations.entries.deleteRevision(model, {
|
|
1029
790
|
entry: entryToDelete,
|
|
1030
791
|
storageEntry: storageEntryToDelete,
|
|
1031
|
-
latestEntry:
|
|
1032
|
-
latestStorageEntry:
|
|
792
|
+
latestEntry: updatedEntryToSetAsLatest,
|
|
793
|
+
latestStorageEntry: storageUpdatedEntryToSetAsLatest
|
|
1033
794
|
});
|
|
1034
795
|
await onEntryRevisionAfterDelete.publish({
|
|
1035
796
|
entry: entryToDelete,
|
|
@@ -1045,8 +806,8 @@ const createContentEntryCrud = params => {
|
|
|
1045
806
|
error: ex,
|
|
1046
807
|
entry: entryToDelete,
|
|
1047
808
|
storageEntry: storageEntryToDelete,
|
|
1048
|
-
latestEntry:
|
|
1049
|
-
latestStorageEntry:
|
|
809
|
+
latestEntry: updatedEntryToSetAsLatest,
|
|
810
|
+
latestStorageEntry: storageUpdatedEntryToSetAsLatest
|
|
1050
811
|
});
|
|
1051
812
|
}
|
|
1052
813
|
};
|
|
@@ -1172,7 +933,7 @@ const createContentEntryCrud = params => {
|
|
|
1172
933
|
entry
|
|
1173
934
|
});
|
|
1174
935
|
};
|
|
1175
|
-
const publishEntry = async (model, id
|
|
936
|
+
const publishEntry = async (model, id) => {
|
|
1176
937
|
await entriesPermissions.ensure({
|
|
1177
938
|
pw: "p"
|
|
1178
939
|
});
|
|
@@ -1186,39 +947,26 @@ const createContentEntryCrud = params => {
|
|
|
1186
947
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1187
948
|
}
|
|
1188
949
|
await entriesPermissions.ensure({
|
|
1189
|
-
owns: originalStorageEntry.
|
|
950
|
+
owns: originalStorageEntry.revisionCreatedBy
|
|
1190
951
|
});
|
|
1191
952
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
entry: originalEntry
|
|
953
|
+
|
|
954
|
+
// We need the latest entry to get the latest entry-level meta fields.
|
|
955
|
+
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
956
|
+
id: originalEntry.entryId
|
|
1197
957
|
});
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
* The existing functionality is to set the publishedOn date to the current date.
|
|
1201
|
-
* Users can now choose to skip updating the publishedOn date - unless it is not set.
|
|
1202
|
-
*
|
|
1203
|
-
* Same logic goes for the savedOn date.
|
|
1204
|
-
*/
|
|
1205
|
-
const {
|
|
1206
|
-
updatePublishedOn = true,
|
|
1207
|
-
updateSavedOn = true
|
|
1208
|
-
} = options || {};
|
|
1209
|
-
let publishedOn = originalEntry.publishedOn;
|
|
1210
|
-
if (updatePublishedOn || !publishedOn) {
|
|
1211
|
-
publishedOn = currentDate;
|
|
1212
|
-
}
|
|
1213
|
-
let savedOn = originalEntry.savedOn;
|
|
1214
|
-
if (updateSavedOn || !savedOn) {
|
|
1215
|
-
savedOn = currentDate;
|
|
958
|
+
if (!latestStorageEntry) {
|
|
959
|
+
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1216
960
|
}
|
|
1217
|
-
const
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
961
|
+
const latestEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, latestStorageEntry);
|
|
962
|
+
const {
|
|
963
|
+
entry
|
|
964
|
+
} = await (0, _entryDataFactories.createPublishEntryData)({
|
|
965
|
+
context,
|
|
966
|
+
model,
|
|
967
|
+
originalEntry,
|
|
968
|
+
latestEntry,
|
|
969
|
+
getIdentity: getSecurityIdentity
|
|
1222
970
|
});
|
|
1223
971
|
let storageEntry = null;
|
|
1224
972
|
try {
|
|
@@ -1274,11 +1022,16 @@ const createContentEntryCrud = params => {
|
|
|
1274
1022
|
});
|
|
1275
1023
|
}
|
|
1276
1024
|
await entriesPermissions.ensure({
|
|
1277
|
-
owns: originalStorageEntry.
|
|
1025
|
+
owns: originalStorageEntry.revisionCreatedBy
|
|
1278
1026
|
});
|
|
1279
1027
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1280
|
-
const
|
|
1281
|
-
|
|
1028
|
+
const {
|
|
1029
|
+
entry
|
|
1030
|
+
} = await (0, _entryDataFactories.createUnpublishEntryData)({
|
|
1031
|
+
context,
|
|
1032
|
+
model,
|
|
1033
|
+
originalEntry,
|
|
1034
|
+
getIdentity: getSecurityIdentity
|
|
1282
1035
|
});
|
|
1283
1036
|
let storageEntry = null;
|
|
1284
1037
|
try {
|
|
@@ -1322,13 +1075,15 @@ const createContentEntryCrud = params => {
|
|
|
1322
1075
|
where: initialWhere,
|
|
1323
1076
|
fieldId
|
|
1324
1077
|
} = params;
|
|
1325
|
-
const where =
|
|
1078
|
+
const where = {
|
|
1079
|
+
...initialWhere
|
|
1080
|
+
};
|
|
1326
1081
|
/**
|
|
1327
1082
|
* Possibly only get records which are owned by current user.
|
|
1328
1083
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
1329
1084
|
*/
|
|
1330
1085
|
if (await entriesPermissions.canAccessOnlyOwnRecords()) {
|
|
1331
|
-
where.
|
|
1086
|
+
where.createdBy = getSecurityIdentity().id;
|
|
1332
1087
|
}
|
|
1333
1088
|
|
|
1334
1089
|
/**
|
|
@@ -1459,24 +1214,26 @@ const createContentEntryCrud = params => {
|
|
|
1459
1214
|
});
|
|
1460
1215
|
},
|
|
1461
1216
|
async listLatestEntries(model, params) {
|
|
1462
|
-
const where =
|
|
1463
|
-
return this.listEntries(model,
|
|
1464
|
-
sort: ["createdOn_DESC"]
|
|
1465
|
-
|
|
1466
|
-
where:
|
|
1217
|
+
const where = params?.where || {};
|
|
1218
|
+
return this.listEntries(model, {
|
|
1219
|
+
sort: ["createdOn_DESC"],
|
|
1220
|
+
...(params || {}),
|
|
1221
|
+
where: {
|
|
1222
|
+
...where,
|
|
1467
1223
|
latest: true
|
|
1468
|
-
}
|
|
1469
|
-
})
|
|
1224
|
+
}
|
|
1225
|
+
});
|
|
1470
1226
|
},
|
|
1471
1227
|
async listPublishedEntries(model, params) {
|
|
1472
|
-
const where =
|
|
1473
|
-
return this.listEntries(model,
|
|
1474
|
-
sort: ["createdOn_DESC"]
|
|
1475
|
-
|
|
1476
|
-
where:
|
|
1228
|
+
const where = params?.where || {};
|
|
1229
|
+
return this.listEntries(model, {
|
|
1230
|
+
sort: ["createdOn_DESC"],
|
|
1231
|
+
...(params || {}),
|
|
1232
|
+
where: {
|
|
1233
|
+
...where,
|
|
1477
1234
|
published: true
|
|
1478
|
-
}
|
|
1479
|
-
})
|
|
1235
|
+
}
|
|
1236
|
+
});
|
|
1480
1237
|
},
|
|
1481
1238
|
async createEntry(model, input, options) {
|
|
1482
1239
|
return context.benchmark.measure("headlessCms.crud.entries.createEntry", async () => {
|
|
@@ -1527,9 +1284,9 @@ const createContentEntryCrud = params => {
|
|
|
1527
1284
|
return deleteMultipleEntries(model, ids);
|
|
1528
1285
|
});
|
|
1529
1286
|
},
|
|
1530
|
-
async publishEntry(model, id
|
|
1287
|
+
async publishEntry(model, id) {
|
|
1531
1288
|
return context.benchmark.measure("headlessCms.crud.entries.publishEntry", async () => {
|
|
1532
|
-
return publishEntry(model, id
|
|
1289
|
+
return publishEntry(model, id);
|
|
1533
1290
|
});
|
|
1534
1291
|
},
|
|
1535
1292
|
async unpublishEntry(model, id) {
|