UNPKG

@neo4j/graphql

Version:

A GraphQL to Cypher query execution layer for Neo4j and JavaScript GraphQL implementations

56 lines 2.99 kB
"use strict"; 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