You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.4 KiB
88 lines
2.4 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = exports.NewAction = void 0;
|
|
|
|
var _utils = require("../../utils");
|
|
|
|
var _paramConverter = require("../../../utils/param-converter");
|
|
|
|
/**
|
|
* @implements Action
|
|
* @category Actions
|
|
* @module NewAction
|
|
* @description
|
|
* Shows form for creating a new record
|
|
* Uses {@link NewAction} component to render form
|
|
* @private
|
|
*/
|
|
const NewAction = {
|
|
name: 'new',
|
|
isVisible: true,
|
|
actionType: 'resource',
|
|
icon: 'Add',
|
|
showInDrawer: false,
|
|
variant: 'primary',
|
|
|
|
/**
|
|
* Responsible for creating new record.
|
|
*
|
|
* To invoke this action use {@link ApiClient#resourceAction}
|
|
*
|
|
* @implements Action#handler
|
|
* @memberof module:NewAction
|
|
* @return {Promise<RecordActionResponse>} populated records
|
|
*/
|
|
handler: async (request, response, context) => {
|
|
const {
|
|
resource,
|
|
h,
|
|
currentAdmin,
|
|
translateMessage
|
|
} = context;
|
|
|
|
if (request.method === 'post') {
|
|
var _populatedRecord$base;
|
|
|
|
const params = _paramConverter.paramConverter.prepareParams(request.payload ?? {}, resource);
|
|
|
|
let record = await resource.build(params);
|
|
record = await record.create();
|
|
const [populatedRecord] = await (0, _utils.populator)([record]); // eslint-disable-next-line no-param-reassign
|
|
|
|
context.record = populatedRecord;
|
|
|
|
if (record.isValid()) {
|
|
var _resource$_decorated;
|
|
|
|
return {
|
|
redirectUrl: h.resourceUrl({
|
|
resourceId: ((_resource$_decorated = resource._decorated) === null || _resource$_decorated === void 0 ? void 0 : _resource$_decorated.id()) || resource.id()
|
|
}),
|
|
notice: {
|
|
message: translateMessage('successfullyCreated', resource.id()),
|
|
type: 'success'
|
|
},
|
|
record: record.toJSON(currentAdmin)
|
|
};
|
|
}
|
|
|
|
const baseMessage = ((_populatedRecord$base = populatedRecord.baseError) === null || _populatedRecord$base === void 0 ? void 0 : _populatedRecord$base.message) || translateMessage('thereWereValidationErrors', resource.id());
|
|
return {
|
|
record: record.toJSON(currentAdmin),
|
|
notice: {
|
|
message: baseMessage,
|
|
type: 'error'
|
|
}
|
|
};
|
|
} // TODO: add wrong implementation error
|
|
|
|
|
|
throw new Error('new action can be invoked only via `post` http method');
|
|
}
|
|
};
|
|
exports.NewAction = NewAction;
|
|
var _default = NewAction;
|
|
exports.default = _default; |