UNPKG

canner

Version:

Build CMS in few lines of code for different data sources

190 lines (163 loc) 4.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getValue = getValue; exports.parseConnectionToNormal = parseConnectionToNormal; exports.defaultValue = defaultValue; exports.paginate = paginate; exports.filterByWhere = filterByWhere; exports.passCondition = passCondition; var _lodash = require("lodash"); function getValue(value, idPathArr) { return idPathArr.reduce(function (result, key) { if ((0, _lodash.isPlainObject)(result)) { if ('edges' in result && 'pageInfo' in result) { return (0, _lodash.get)(result, ['edges', key, 'node']); } return (0, _lodash.get)(result, key); } else if ((0, _lodash.isArray)(result)) { return (0, _lodash.get)(result, key); } else { return result; } }, value); } function parseConnectionToNormal(value) { if ((0, _lodash.isPlainObject)(value)) { if (value.edges) { return value.edges.map(function (edge) { return parseConnectionToNormal(edge.node); }); } return (0, _lodash.mapValues)(value, function (item) { return parseConnectionToNormal(item); }); } else if ((0, _lodash.isArray)(value)) { return value.map(function (item) { return parseConnectionToNormal(item); }); } else { return value; } } function defaultValue(type, relation, nullable) { if (nullable) { return null; } switch (type) { case 'connection': { return { edges: [], pageInfo: { hasNextPage: false, hasPreviousPage: false } }; } case 'array': { return []; } case 'object': { return {}; } case 'boolean': { return false; } case 'number': { return 0; } case 'string': { return ''; } case 'relation': { if (relation.type === 'toMany') { return { edges: [], pageInfo: { hasNextPage: false, hasPreviousPage: false } }; } else { return null; } } case 'image': case 'file': { return { url: '', contentType: '', name: '', size: 0, __typename: null }; } case 'geoPoint': { return { placeId: '', address: '', lat: 122, lng: 23 }; } default: { return null; } } } function paginate(rootValue, field, currentPage) { var pageSize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; var copyValue = JSON.parse(JSON.stringify(rootValue)); var index = (currentPage - 1) * pageSize; copyValue[field].edges = copyValue[field].edges.slice(index, index + pageSize); return copyValue; } function filterByWhere(rootValue, field, where) { var copyValue = JSON.parse(JSON.stringify(rootValue)); copyValue[field].edges = copyValue[field].edges.filter(function (edge) { return Object.keys(where).reduce(function (result, key) { var condition = where[key]; var data = edge.node[key]; return result && passCondition(data, condition); }, true); }); return copyValue; } function passCondition(data, condition) { return Object.keys(condition).reduce(function (result, conditionKey) { var isPass = true; var conditionValue = condition[conditionKey]; switch (conditionKey) { case 'contains': isPass = data.indexOf(conditionValue) !== -1; break; case 'eq': isPass = data === conditionValue; break; case 'gt': isPass = data > conditionValue; break; case 'gte': isPass = data >= conditionValue; break; case 'lt': isPass = data < conditionValue; break; case 'lte': isPass = data <= conditionValue; break; } return result && isPass; }, true); }