shyft
Version:
Model driven GraphQL API framework
89 lines (88 loc) • 3.58 kB
JavaScript
;
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;