UNPKG

shyft

Version:

Model driven GraphQL API framework

89 lines (88 loc) 3.58 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSortInput = void 0; var graphql_1 = require("graphql"); var _ = __importStar(require("lodash")); var ProtocolGraphQL_1 = require("./ProtocolGraphQL"); var Entity_1 = require("../engine/entity/Entity"); var ShadowEntity_1 = require("../engine/entity/ShadowEntity"); var registry_1 = require("./registry"); var generateSortInput = function (entity) { var protocolConfiguration = ProtocolGraphQL_1.ProtocolGraphQL.getProtocolConfiguration(); var storageType = entity.storageType; var sortNames = {}; var defaultSortValue; _.forEach(entity.getAttributes(), function (attribute) { if (attribute.hidden || attribute.mutationInput) { return; } var gqlFieldName = registry_1.getRegisteredEntityAttribute(entity.name, attribute.name).fieldName; var storageDataType; if (Entity_1.isEntity(attribute.type) || ShadowEntity_1.isShadowEntity(attribute.type)) { var targetPrimaryAttribute = attribute.type.getPrimaryAttribute(); storageDataType = storageType.convertToStorageDataType(targetPrimaryAttribute.type); } else { storageDataType = storageType.convertToStorageDataType(attribute.type); } if (!storageDataType.isSortable) { return; } var keyAsc = protocolConfiguration.generateSortKeyName(attribute, true); var keyDesc = protocolConfiguration.generateSortKeyName(attribute, false); // add ascending key sortNames[keyAsc] = { description: "Order by **`" + gqlFieldName + "`** ascending", value: { attribute: attribute.name, direction: 'ASC', }, }; if (attribute.primary) { defaultSortValue = sortNames[keyAsc].value; } // add descending key sortNames[keyDesc] = { description: "Order by **`" + gqlFieldName + "`** descending", value: { attribute: attribute.name, direction: 'DESC', }, }; }); if (_.isEmpty(sortNames)) { return null; } var sortInputType = new graphql_1.GraphQLEnumType({ name: protocolConfiguration.generateSortInputTypeName(entity), values: sortNames, }); if (!defaultSortValue) { defaultSortValue = sortInputType.getValues()[0].value; } return { type: new graphql_1.GraphQLList(sortInputType), description: 'Order list by a single or multiple attributes', defaultValue: [defaultSortValue], }; }; exports.generateSortInput = generateSortInput;