canner
Version:
Build CMS in few lines of code for different data sources
161 lines (142 loc) • 3.68 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = actionToMutation;
exports.transformKey = transformKey;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _pluralize = _interopRequireDefault(require("pluralize"));
var _lodash = require("lodash");
/**
* change an action to mutation object which's used to generate graphql string
*/
function actionToMutation(action) {
var mutation = {
mutation: {
args: {},
fields: {}
}
};
var type = action.type,
_action$payload = action.payload,
_action$payload$key = _action$payload.key,
key = _action$payload$key === void 0 ? '' : _action$payload$key,
id = _action$payload.id;
var name = '';
var args = {
$payload: 'any',
$where: 'any'
};
var actionArgs = {
data: '$payload',
where: '$where'
};
var fields = {};
switch (type) {
case 'UPDATE_OBJECT':
args = {
$payload: genUpdateInputType(action)
};
actionArgs = {
data: '$payload'
};
name = "update".concat(transformKey(key));
fields = {
__typename: null
};
break;
case 'UPDATE_ARRAY':
args = {
$payload: genUpdateInputType(action),
$where: genWhereInputType(action)
};
actionArgs = {
data: '$payload',
where: '$where'
};
name = "update".concat(transformKey(key));
fields = {
id: null
};
break;
case 'CREATE_ARRAY':
args = {
$payload: genCreateInputType(action)
};
actionArgs = {
data: '$payload'
};
name = "create".concat(transformKey(key));
fields = {
id: null
};
break;
case 'DELETE_ARRAY':
args = {
$where: genWhereInputType(action)
};
actionArgs = {
where: '$where'
};
name = "delete".concat(transformKey(key));
fields = {
id: null
};
break;
case 'CONNECT':
case 'DISCONNECT':
if (id) {
args = {
$payload: genUpdateInputType(action),
$where: genWhereInputType(action)
};
actionArgs = {
data: '$payload',
where: '$where'
};
name = "update".concat(transformKey(key));
fields = {
id: null
};
} else {
args = {
$payload: genUpdateInputType(action)
};
actionArgs = {
data: '$payload'
};
name = "update".concat((0, _lodash.upperFirst)(key)); // $FlowFixMe
fields = (0, _defineProperty2.default)({}, action.payload.path, {
fields: {
id: null
}
});
}
break;
default:
name = "update".concat(transformKey(key));
break;
}
(0, _lodash.set)(mutation, "mutation.args", args);
(0, _lodash.set)(mutation, "mutation.fields.".concat(name), {
args: actionArgs,
fields: (0, _lodash.isEmpty)(fields) ? null : fields
});
return mutation;
}
function genCreateInputType(action) {
var key = action.payload.key;
return "".concat(transformKey(key), "CreateInput!");
}
function genUpdateInputType(action) {
var key = action.payload.key;
return "".concat(transformKey(key), "UpdateInput!");
}
function genWhereInputType(action) {
var key = action.payload.key;
return "".concat(transformKey(key), "WhereUniqueInput!");
}
function transformKey(key) {
return (0, _lodash.upperFirst)(_pluralize.default.singular(key));
}