@neo4j/graphql
Version:
A GraphQL to Cypher query execution layer for Neo4j and JavaScript GraphQL implementations
56 lines • 2.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.withSortInputType = withSortInputType;
exports.makeSortInput = makeSortInput;
const constants_1 = require("../../constants");
const SortDirection_1 = require("../../graphql/enums/SortDirection");
const RelationshipAdapter_1 = require("../../schema-model/relationship/model-adapters/RelationshipAdapter");
const to_compose_1 = require("../to-compose");
function withSortInputType({ relationshipAdapter, userDefinedFieldDirectives, composer, }) {
// TODO: Use the commented code when we want to unify the sort input type for relationships and entities
// if (!relationshipAdapter.sortableFields.length) {
// return undefined;
// }
// return makeSortInput({ entityAdapter: relationshipAdapter, userDefinedFieldDirectives, composer });
const sortFields = {};
for (const attribute of relationshipAdapter.attributes.values()) {
const userDefinedDirectivesOnField = userDefinedFieldDirectives.get(attribute.name) || [];
const deprecatedDirective = userDefinedDirectivesOnField.filter((directive) => directive.name.value === constants_1.DEPRECATED);
sortFields[attribute.name] = {
type: SortDirection_1.SortDirection,
directives: (0, to_compose_1.graphqlDirectivesToCompose)(deprecatedDirective),
};
}
const sortInput = composer.createInputTC({
name: relationshipAdapter.operations.sortInputTypeName,
fields: sortFields,
});
return sortInput;
}
function makeSortFields({ entityAdapter, userDefinedFieldDirectives, }) {
const sortFields = {};
const sortableAttributes = entityAdapter.sortableFields;
for (const attribute of sortableAttributes) {
const userDefinedDirectivesOnField = userDefinedFieldDirectives.get(attribute.name) || [];
const deprecatedDirective = userDefinedDirectivesOnField.filter((directive) => directive.name.value === constants_1.DEPRECATED);
sortFields[attribute.name] = {
type: SortDirection_1.SortDirection,
directives: (0, to_compose_1.graphqlDirectivesToCompose)(deprecatedDirective),
};
}
return sortFields;
}
function makeSortInput({ entityAdapter, userDefinedFieldDirectives, composer, }) {
const sortFields = makeSortFields({ entityAdapter, userDefinedFieldDirectives });
if (!Object.keys(sortFields).length) {
return;
}
const sortInput = composer.getOrCreateITC(entityAdapter.operations.sortInputTypeName, (itc) => {
return itc.setFields(sortFields);
});
if (!(entityAdapter instanceof RelationshipAdapter_1.RelationshipAdapter)) {
sortInput.setDescription(`Fields to sort ${entityAdapter.upperFirstPlural} by. The order in which sorts are applied is not guaranteed when specifying many fields in one ${entityAdapter.operations.sortInputTypeName} object.`);
}
return sortInput;
}
//# sourceMappingURL=sort-and-options-input.js.map