mirror of
https://github.com/cerc-io/watcher-ts
synced 2025-08-05 21:48:40 +00:00
Handle variables for arguments on nested selections
This commit is contained in:
parent
70b0ac8076
commit
6557504b27
@ -284,7 +284,7 @@ export class GraphDatabase {
|
|||||||
let relationWhere: Where = {};
|
let relationWhere: Where = {};
|
||||||
let relationQueryOptions: QueryOptions = {};
|
let relationQueryOptions: QueryOptions = {};
|
||||||
if (isDerived || isArray) {
|
if (isDerived || isArray) {
|
||||||
({ where: relationWhere, queryOptions: relationQueryOptions } = this._getSelectionFieldArguments(selection));
|
({ where: relationWhere, queryOptions: relationQueryOptions } = this._getSelectionFieldArguments(selection, queryInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isDerived) {
|
if (isDerived) {
|
||||||
@ -1440,30 +1440,36 @@ export class GraphDatabase {
|
|||||||
}, []);
|
}, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
_getSelectionFieldArguments (fieldNode: FieldNode): { where: Where, queryOptions: QueryOptions } {
|
_getSelectionFieldArguments (fieldNode: FieldNode, queryInfo: GraphQLResolveInfo): { where: Where, queryOptions: QueryOptions } {
|
||||||
let where: Where = {};
|
let where: Where = {};
|
||||||
const queryOptions: QueryOptions = {};
|
const queryOptions: QueryOptions = {};
|
||||||
|
|
||||||
fieldNode.arguments?.forEach((arg: ArgumentNode) => {
|
fieldNode.arguments?.forEach((arg: ArgumentNode) => {
|
||||||
|
let argValue: any;
|
||||||
|
|
||||||
switch (arg.name.value) {
|
switch (arg.name.value) {
|
||||||
case 'where':
|
case 'where':
|
||||||
where = this.buildFilter(this._buildWhereFromArgumentNode(arg));
|
where = this.buildFilter(this._buildWhereFromArgumentNode(arg, queryInfo));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'first':
|
case 'first':
|
||||||
queryOptions.limit = Number((arg.value as IntValueNode).value);
|
argValue = (arg.value.kind === 'Variable') ? queryInfo.variableValues[arg.value.name.value] : (arg.value as IntValueNode).value;
|
||||||
|
queryOptions.limit = Number(argValue);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'skip':
|
case 'skip':
|
||||||
queryOptions.skip = Number((arg.value as IntValueNode).value);
|
argValue = (arg.value.kind === 'Variable') ? queryInfo.variableValues[arg.value.name.value] : (arg.value as IntValueNode).value;
|
||||||
|
queryOptions.skip = Number(argValue);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'orderBy':
|
case 'orderBy':
|
||||||
queryOptions.orderBy = (arg.value as EnumValueNode).value;
|
argValue = (arg.value.kind === 'Variable') ? queryInfo.variableValues[arg.value.name.value] : (arg.value as EnumValueNode).value;
|
||||||
|
queryOptions.orderBy = String(argValue);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'orderDirection':
|
case 'orderDirection':
|
||||||
queryOptions.orderDirection = (arg.value as EnumValueNode).value as OrderDirection;
|
argValue = (arg.value.kind === 'Variable') ? queryInfo.variableValues[arg.value.name.value] : (arg.value as EnumValueNode).value;
|
||||||
|
queryOptions.orderDirection = argValue as OrderDirection;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -1476,7 +1482,7 @@ export class GraphDatabase {
|
|||||||
return { where, queryOptions };
|
return { where, queryOptions };
|
||||||
}
|
}
|
||||||
|
|
||||||
_buildWhereFromArgumentNode (arg: ArgumentNode): { [key: string]: any } {
|
_buildWhereFromArgumentNode (arg: ArgumentNode, queryInfo: GraphQLResolveInfo): { [key: string]: any } {
|
||||||
// TODO: Handle all types of filters on nested fields
|
// TODO: Handle all types of filters on nested fields
|
||||||
|
|
||||||
return (arg.value as ObjectValueNode).fields.reduce((acc: { [key: string]: any }, fieldNode: ObjectFieldNode) => {
|
return (arg.value as ObjectValueNode).fields.reduce((acc: { [key: string]: any }, fieldNode: ObjectFieldNode) => {
|
||||||
@ -1494,6 +1500,9 @@ export class GraphDatabase {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'Variable':
|
case 'Variable':
|
||||||
|
acc[fieldNode.name.value] = queryInfo.variableValues[fieldNode.value.name.value];
|
||||||
|
break;
|
||||||
|
|
||||||
case 'ListValue':
|
case 'ListValue':
|
||||||
case 'ObjectValue':
|
case 'ObjectValue':
|
||||||
throw new Error(`Nested filter type ${fieldNode.value.kind} not supported`);
|
throw new Error(`Nested filter type ${fieldNode.value.kind} not supported`);
|
||||||
|
Loading…
Reference in New Issue
Block a user