UNPKG

canner

Version:

Build CMS in few lines of code for different data sources

161 lines (142 loc) 3.68 kB
"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)); }