@grapi/server
Version:
Grapi Schema Generator For GraphQL Server
60 lines (59 loc) • 2.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const type_1 = require("../dataModel/type");
const lodash_1 = require("../lodash");
const constants_1 = require("./constants");
const parserOrder = (order) => {
if ((0, lodash_1.isEmpty)(order) === false) {
return (0, lodash_1.transform)(order, (result, value, fieldName) => {
if (value === "ASC") {
result[fieldName] = 1;
}
else {
result[fieldName] = -1;
}
return result;
});
}
return null;
};
class OrderInputPlugin {
visitModel(model, context) {
const { root } = context;
const modelOrderInputName = this.getOrderInputName(model);
const orderInput = `input ${modelOrderInputName} {
${this.createOrderFilter(model.getFields())}
}`;
root.addInput(orderInput);
}
getOrderInputName(model) {
return `${model.getNamings().capitalSingular}OrderInput`;
}
static parseOrder(order) {
return parserOrder(order);
}
parseOrder(order) {
return parserOrder(order);
}
createOrderFilter(fields) {
const inputFields = [];
(0, lodash_1.forEach)(fields, (field, name) => {
switch (field.getType()) {
case type_1.DataModelType.STRING:
case type_1.DataModelType.INT:
case type_1.DataModelType.FLOAT:
case type_1.DataModelType.ENUM:
case type_1.DataModelType.BOOLEAN:
case type_1.DataModelType.CUSTOM_SCALAR:
case type_1.DataModelType.ID:
inputFields.push({
fieldName: name,
type: constants_1.orderByInputName,
});
break;
}
});
return inputFields.map(({ fieldName, type }) => `${fieldName}: ${type}`).join(' ');
}
}
exports.default = OrderInputPlugin;