diff --git a/package.json b/package.json index 8ca33616..acdc5f59 100644 --- a/package.json +++ b/package.json @@ -64,9 +64,9 @@ }, "devDependencies": { "@eslint/compat": "^1.2.4", - "@eslint/config-inspector": "^0.5.6", + "@eslint/config-inspector": "^0.7.0", "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.16.0", + "@eslint/js": "^9.17.0", "@expo/ngrok": "^4.1.3", "@graphql-codegen/cli": "^5.0.3", "@graphql-codegen/client-preset": "patch:@graphql-codegen/client-preset@npm%3A4.4.0#~/.yarn/patches/@graphql-codegen-client-preset-npm-4.4.0-d441b92060.patch", @@ -77,35 +77,35 @@ "@types/eslint__js": "^8.42.3", "@types/react": "~18.3.14", "@types/react-dom": "~18.3.2", - "@typescript-eslint/utils": "^8.17.0", + "@typescript-eslint/utils": "^8.19.0", "@vitest/coverage-v8": "^2.1.8", - "@vitest/eslint-plugin": "^1.1.14", + "@vitest/eslint-plugin": "^1.1.24", "@vitest/ui": "^2.1.8", "@yarnpkg/types": "^4.0.0", "babel-cli": "^6.26.0", "chokidar-cli": "^3.0.0", - "eslint": "9.16.0", + "eslint": "9.17.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-n": "^17.14.0", - "eslint-plugin-react": "^7.37.2", + "eslint-plugin-n": "^17.15.1", + "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.16", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unicorn": "^56.0.1", - "globals": "^15.13.0", - "graphql": "^16.9.0", + "globals": "^15.14.0", + "graphql": "^16.10.0", "graphql-scalars": "^1.24.0", "node-gyp": "^11.0.0", "prettier": "^3.4.2", "sort-package-json": "^2.12.0", "ts-node": "^10.9.2", - "typedoc": "^0.27.3", - "typedoc-plugin-dt-links": "^1.1.2", - "typedoc-plugin-mdn-links": "^4.0.4", + "typedoc": "^0.27.6", + "typedoc-plugin-dt-links": "^1.1.6", + "typedoc-plugin-mdn-links": "^4.0.6", "typedoc-plugin-missing-exports": "^3.1.0", - "typedoc-plugin-zod": "^1.3.0", + "typedoc-plugin-zod": "^1.3.1", "typescript": "^5.7.2", - "typescript-eslint": "^8.17.0", + "typescript-eslint": "^8.19.0", "vitest": "^2.1.8" }, "packageManager": "yarn@4.5.3+sha512.3003a14012e2987072d244c720506549c1aab73ee728208f1b2580a9fd67b92d61ba6b08fe93f6dce68fd771e3af1e59a0afa28dd242dd0940d73b95fedd4e90" diff --git a/packages/common/lib/api/filtering/list-query-args/FilteredListQueryArgs.ts b/packages/common/lib/api/filtering/FilteredListQueryArgs.ts similarity index 69% rename from packages/common/lib/api/filtering/list-query-args/FilteredListQueryArgs.ts rename to packages/common/lib/api/filtering/FilteredListQueryArgs.ts index 129c5b5d..bdf5fb52 100644 --- a/packages/common/lib/api/filtering/list-query-args/FilteredListQueryArgs.ts +++ b/packages/common/lib/api/filtering/FilteredListQueryArgs.ts @@ -1,12 +1,16 @@ -import { GraphQLNonNegativeInt, GraphQLPositiveInt } from "graphql-scalars"; +import { + GraphQLNonEmptyString, + GraphQLNonNegativeInt, + GraphQLPositiveInt, +} from "graphql-scalars"; import { ArgsType, Field, InputType, registerEnumType } from "type-graphql"; -import { AbstractFilterGroup, createFilterGroup } from "../Filter.js"; +import { AbstractFilterGroup, createFilterGroup } from "./Filter.js"; import { DEFAULT_PAGE_SIZE, FIRST_PAGE, SortDirection, -} from "../ListQueryTypes.js"; +} from "./ListQueryTypes.js"; @InputType() // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters @@ -30,10 +34,37 @@ export function SortItem( return Sort; } +@InputType() +export abstract class AbstractSearchFilter { + @Field(() => GraphQLNonEmptyString, { + nullable: false, + }) + query!: string; + fields?: Field[] | null | undefined; +} + +export function SearchFilter( + resolverName: string, + fieldsEnum: Record +) { + @InputType(`${resolverName}SearchFilter`) + class SearchFilter extends AbstractSearchFilter { + @Field(() => [fieldsEnum], { + nullable: true, + description: + "The fields to search in. If unspecified, searches all searchable fields. Note that searching by a field that does not support it will cause a runtime error", + }) + fields?: Fields[] | null; + } + + return SearchFilter; +} + @ArgsType() export abstract class AbstractFilteredListQueryArgs { filters!: AbstractFilterGroup | null; sortBy!: AbstractSortItem[] | null; + search!: AbstractSearchFilter | null; @Field(() => Boolean, { nullable: true, @@ -85,6 +116,7 @@ export function FilteredListQueryArgs( const FilterGroup = createFilterGroup(FilterKeysEnum, resolverName); const Sort = SortItem(resolverName, FilterKeysEnum); + const Search = SearchFilter(resolverName, FilterKeysEnum); @ArgsType() abstract class FilteredListQueryArgs extends AbstractFilteredListQueryArgs { @@ -97,6 +129,9 @@ export function FilteredListQueryArgs( "The fields to sort by, in order of priority. If unspecified, the sort order is undefined", }) sortBy!: InstanceType[] | null; + + @Field(() => Search, { nullable: true }) + search!: InstanceType | null; } return FilteredListQueryArgs; diff --git a/packages/common/lib/api/params/DailyDepartmentNotificationParams.ts b/packages/common/lib/api/params/DailyDepartmentNotificationParams.ts index 2c6de11f..adea422d 100644 --- a/packages/common/lib/api/params/DailyDepartmentNotificationParams.ts +++ b/packages/common/lib/api/params/DailyDepartmentNotificationParams.ts @@ -2,7 +2,7 @@ import { GraphQLLocalDate, GraphQLNonEmptyString } from "graphql-scalars"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; import type { LocalDate } from "../../utility/time/localDate.js"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { DailyDepartmentNotificationNode } from "../resources/DailyDepartmentNotification.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/api/params/GetImageByUuidResponse.ts b/packages/common/lib/api/params/GetImageByUuidResponse.ts index a76d9db2..3d5c4246 100644 --- a/packages/common/lib/api/params/GetImageByUuidResponse.ts +++ b/packages/common/lib/api/params/GetImageByUuidResponse.ts @@ -1,7 +1,7 @@ import { GraphQLNonEmptyString, GraphQLURL } from "graphql-scalars"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { ImageNode } from "../resources/Image.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/api/params/GetNotificationByUuidResponse.ts b/packages/common/lib/api/params/GetNotificationByUuidResponse.ts index 77d9396f..c13c32bb 100644 --- a/packages/common/lib/api/params/GetNotificationByUuidResponse.ts +++ b/packages/common/lib/api/params/GetNotificationByUuidResponse.ts @@ -1,7 +1,7 @@ import { GraphQLNonEmptyString, GraphQLURL } from "graphql-scalars"; import { ArgsType, Field, InputType, Int, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { NotificationDeliveryNode, NotificationNode, diff --git a/packages/common/lib/api/params/GetPointEntryByUuidResponse.ts b/packages/common/lib/api/params/GetPointEntryByUuidResponse.ts index 536f6784..4625ad7c 100644 --- a/packages/common/lib/api/params/GetPointEntryByUuidResponse.ts +++ b/packages/common/lib/api/params/GetPointEntryByUuidResponse.ts @@ -1,7 +1,7 @@ import { GraphQLNonEmptyString } from "graphql-scalars"; import { ArgsType, Field, InputType, Int, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { PointEntryNode } from "../resources/PointEntry.js"; import { type GlobalId, GlobalIdScalar } from "../scalars/GlobalId.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/api/params/ListFundraisingEntriesResponse.ts b/packages/common/lib/api/params/ListFundraisingEntriesResponse.ts index 060f41e0..e96fa83b 100644 --- a/packages/common/lib/api/params/ListFundraisingEntriesResponse.ts +++ b/packages/common/lib/api/params/ListFundraisingEntriesResponse.ts @@ -3,7 +3,7 @@ import { GraphQLLocalDate, GraphQLNonEmptyString } from "graphql-scalars"; import { ArgsType, Field, Float, InputType, ObjectType } from "type-graphql"; import type { LocalDate } from "../../utility/time/localDate.js"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { BatchType } from "../resources/DailyDepartmentNotification.js"; import { FundraisingEntryNode } from "../resources/Fundraising.js"; import { type GlobalId, GlobalIdScalar } from "../scalars/GlobalId.js"; diff --git a/packages/common/lib/api/params/ListMarathonHoursResponse.ts b/packages/common/lib/api/params/ListMarathonHoursResponse.ts index 5139f848..79d34874 100644 --- a/packages/common/lib/api/params/ListMarathonHoursResponse.ts +++ b/packages/common/lib/api/params/ListMarathonHoursResponse.ts @@ -2,7 +2,7 @@ import { GraphQLNonEmptyString } from "graphql-scalars"; import { DateTime } from "luxon"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { MarathonHourNode } from "../resources/MarathonHour.js"; import { DateTimeScalar } from "../scalars/DateTimeISO.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/api/params/ListMarathonsResponse.ts b/packages/common/lib/api/params/ListMarathonsResponse.ts index 2675a1f3..dcf941c7 100644 --- a/packages/common/lib/api/params/ListMarathonsResponse.ts +++ b/packages/common/lib/api/params/ListMarathonsResponse.ts @@ -3,7 +3,7 @@ import { GraphQLNonEmptyString } from "graphql-scalars"; import { DateTime } from "luxon"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { MarathonNode } from "../resources/Marathon.js"; import { DateTimeScalar } from "../scalars/DateTimeISO.js"; import { diff --git a/packages/common/lib/api/params/SinglePointOpportunityResponse.ts b/packages/common/lib/api/params/SinglePointOpportunityResponse.ts index 297c7ea1..060c8234 100644 --- a/packages/common/lib/api/params/SinglePointOpportunityResponse.ts +++ b/packages/common/lib/api/params/SinglePointOpportunityResponse.ts @@ -2,7 +2,7 @@ import { GraphQLNonEmptyString } from "graphql-scalars"; import { DateTime } from "luxon"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { PointOpportunityNode } from "../resources/PointOpportunity.js"; import { TeamType } from "../resources/Team.js"; import { DateTimeScalar } from "../scalars/DateTimeISO.js"; diff --git a/packages/common/lib/api/params/SingleTeamResponse.ts b/packages/common/lib/api/params/SingleTeamResponse.ts index 056edb68..c1f2cb85 100644 --- a/packages/common/lib/api/params/SingleTeamResponse.ts +++ b/packages/common/lib/api/params/SingleTeamResponse.ts @@ -3,7 +3,7 @@ import { ArgsType, Field, InputType, Int, ObjectType } from "type-graphql"; import { DbRole } from "../../authorization/structures.js"; import { OptionalToNullable } from "../../utility/primitive/TypeUtils.js"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { TeamLegacyStatus, TeamNode, TeamType } from "../resources/Team.js"; import { type GlobalId, GlobalIdScalar } from "../scalars/GlobalId.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/api/params/SolicitationCodeInput.ts b/packages/common/lib/api/params/SolicitationCodeInput.ts index c391be15..f2a183b1 100644 --- a/packages/common/lib/api/params/SolicitationCodeInput.ts +++ b/packages/common/lib/api/params/SolicitationCodeInput.ts @@ -2,7 +2,7 @@ import { IsAlpha, IsUppercase } from "class-validator"; import { GraphQLNonEmptyString, NonNegativeIntResolver } from "graphql-scalars"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { SolicitationCodeNode } from "../resources/SolicitationCode.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/api/params/deviceParams.ts b/packages/common/lib/api/params/deviceParams.ts index ea8a06b0..8d50bdbb 100644 --- a/packages/common/lib/api/params/deviceParams.ts +++ b/packages/common/lib/api/params/deviceParams.ts @@ -1,7 +1,7 @@ import { GraphQLNonNegativeInt, GraphQLPositiveInt } from "graphql-scalars"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { DeviceNode } from "../resources/Device.js"; import { GlobalId, GlobalIdScalar } from "../scalars/GlobalId.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/api/params/eventParams.ts b/packages/common/lib/api/params/eventParams.ts index dcac1d67..c7575562 100644 --- a/packages/common/lib/api/params/eventParams.ts +++ b/packages/common/lib/api/params/eventParams.ts @@ -1,7 +1,7 @@ import { GraphQLNonEmptyString } from "graphql-scalars"; import { ArgsType, Field, InputType, ObjectType } from "type-graphql"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { EventNode } from "../resources/Event.js"; import { GlobalId, GlobalIdScalar } from "../scalars/GlobalId.js"; import { IntervalISO } from "../types/IntervalISO.js"; diff --git a/packages/common/lib/api/params/personParams.ts b/packages/common/lib/api/params/personParams.ts index db2c3d0a..fb9f305b 100644 --- a/packages/common/lib/api/params/personParams.ts +++ b/packages/common/lib/api/params/personParams.ts @@ -7,7 +7,7 @@ import { CommitteeRole, DbRole, } from "../../authorization/structures.js"; -import { FilteredListQueryArgs } from "../filtering/list-query-args/FilteredListQueryArgs.js"; +import { FilteredListQueryArgs } from "../filtering/FilteredListQueryArgs.js"; import { PersonNode } from "../resources/Person.js"; import { type GlobalId, GlobalIdScalar } from "../scalars/GlobalId.js"; import { AbstractGraphQLPaginatedResponse } from "./ApiResponse.js"; diff --git a/packages/common/lib/index.ts b/packages/common/lib/index.ts index d9a59f13..3a7d6769 100644 --- a/packages/common/lib/index.ts +++ b/packages/common/lib/index.ts @@ -1,7 +1,7 @@ import "reflect-metadata"; export * from "./api/filtering/Filter.js"; -export * from "./api/filtering/list-query-args/FilteredListQueryArgs.js"; +export * from "./api/filtering/FilteredListQueryArgs.js"; export * from "./api/filtering/ListQueryTypes.js"; export type * from "./api/jwt.js"; export * from "./api/params/index.js"; diff --git a/packages/common/package.json b/packages/common/package.json index d9166c27..b1268412 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -59,9 +59,9 @@ "@casl/ability": "^6.7.2", "@graphql-typed-document-node/core": "^3.2.0", "class-validator": "^0.14.1", - "graphql": "^16.9.0", + "graphql": "^16.10.0", "graphql-scalars": "^1.24.0", - "htmlparser2": "^9.1.0", + "htmlparser2": "^10.0.0", "http-status-codes": "^2.3.0", "luxon": "^3.5.0", "reflect-metadata": "^0.2.2", diff --git a/packages/mobile/package.json b/packages/mobile/package.json index b6c58eca..d82a0dc7 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -36,7 +36,7 @@ "test-with-coverage": "vitest --collect-coverage --collect-coverage-from=\"src/**/*..jsx,ts,tsx}\"" }, "dependencies": { - "@apollo/client": "3.11.10", + "@apollo/client": "3.12.4", "@dev-plugins/async-storage": "^0.1.0", "@expo/config-plugins": "~9.0.9", "@expo/metro-runtime": "~4.0.0", @@ -82,7 +82,7 @@ "expo-status-bar": "~2.0.0", "expo-updates": "~0.26.7", "expo-web-browser": "~14.0.1", - "graphql": "^16.9.0", + "graphql": "^16.10.0", "graphql-scalars": "^1.24.0", "lodash": "^4.17.21", "luxon": "^3.5.0", @@ -134,10 +134,10 @@ "@faker-js/faker": "^9.3.0", "@testing-library/react-native": "^12.8.1", "@types/babel__core": "^7.20.5", - "@types/lodash": "^4.17.13", + "@types/lodash": "^4.17.14", "@types/luxon": "^3.4.2", "@types/lz-string": "^1.5.0", - "@types/markdown-it": "^14", + "@types/markdown-it": "^14.1.2", "@types/react": "~18.3.14", "@types/react-dom": "~18.3.2", "@types/react-native-rss-parser": "^1.4.3", diff --git a/packages/portal/graphql/graphql-env.d.ts b/packages/portal/graphql/graphql-env.d.ts index 4e15cd04..d993f685 100644 --- a/packages/portal/graphql/graphql-env.d.ts +++ b/packages/portal/graphql/graphql-env.d.ts @@ -39,14 +39,16 @@ export type introspection_types = { 'DailyDepartmentNotificationResolverFilterFields': { name: 'DailyDepartmentNotificationResolverFilterFields'; enumValues: 'Amount' | 'BatchType' | 'Comment' | 'Donor' | 'SolicitationCodeName' | 'SolicitationCodeNumber' | 'SolicitationCodePrefix' | 'createdAt'; }; 'DailyDepartmentNotificationResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'DailyDepartmentNotificationResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'DailyDepartmentNotificationResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'DailyDepartmentNotificationResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'DailyDepartmentNotificationResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'DailyDepartmentNotificationResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DailyDepartmentNotificationResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'DailyDepartmentNotificationResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'DailyDepartmentNotificationResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DailyDepartmentNotificationResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'DailyDepartmentNotificationResolverSort': { kind: 'INPUT_OBJECT'; name: 'DailyDepartmentNotificationResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DailyDepartmentNotificationResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'DateTime': unknown; 'DateTimeISO': unknown; 'DbRole': { name: 'DbRole'; enumValues: 'Committee' | 'None' | 'Public' | 'UKY'; }; 'DeviceNode': { kind: 'OBJECT'; name: 'DeviceNode'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'lastLoggedInUser': { name: 'lastLoggedInUser'; type: { kind: 'OBJECT'; name: 'PersonNode'; ofType: null; } }; 'lastLogin': { name: 'lastLogin'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'notificationDeliveries': { name: 'notificationDeliveries'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'NotificationDeliveryNode'; ofType: null; }; }; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; - 'DeviceResolverFilterFields': { name: 'DeviceResolverFilterFields'; enumValues: 'createdAt' | 'expoPushToken' | 'lastSeen' | 'updatedAt'; }; + 'DeviceResolverFilterFields': { name: 'DeviceResolverFilterFields'; enumValues: 'createdAt' | 'lastSeen' | 'updatedAt'; }; 'DeviceResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'DeviceResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'DeviceResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'DeviceResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'DeviceResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'DeviceResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DeviceResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'DeviceResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'DeviceResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DeviceResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'DeviceResolverSort': { kind: 'INPUT_OBJECT'; name: 'DeviceResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'DeviceResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'EffectiveCommitteeRole': { kind: 'OBJECT'; name: 'EffectiveCommitteeRole'; fields: { 'identifier': { name: 'identifier'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'CommitteeIdentifier'; ofType: null; }; } }; 'role': { name: 'role'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'CommitteeRole'; ofType: null; }; } }; }; }; 'EmailAddress': unknown; @@ -55,6 +57,7 @@ export type introspection_types = { 'EventResolverFilterFields': { name: 'EventResolverFilterFields'; enumValues: 'createdAt' | 'description' | 'end' | 'location' | 'occurrences' | 'start' | 'summary' | 'title' | 'updatedAt'; }; 'EventResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'EventResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'EventResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'EventResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'EventResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'EventResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'EventResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'EventResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'EventResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'EventResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'EventResolverSort': { kind: 'INPUT_OBJECT'; name: 'EventResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'EventResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'FeedItem': { kind: 'INTERFACE'; name: 'FeedItem'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'image': { name: 'image'; type: { kind: 'OBJECT'; name: 'ImageNode'; ofType: null; } }; 'link': { name: 'link'; type: { kind: 'SCALAR'; name: 'URL'; ofType: null; } }; 'textContent': { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; possibleTypes: 'FeedNode' | 'InstagramFeedNode'; }; 'FeedNode': { kind: 'OBJECT'; name: 'FeedNode'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'image': { name: 'image'; type: { kind: 'OBJECT'; name: 'ImageNode'; ofType: null; } }; 'link': { name: 'link'; type: { kind: 'SCALAR'; name: 'URL'; ofType: null; } }; 'textContent': { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; @@ -65,6 +68,7 @@ export type introspection_types = { 'FundraisingEntryResolverFilterFields': { name: 'FundraisingEntryResolverFilterFields'; enumValues: 'amount' | 'amountUnassigned' | 'batchType' | 'createdAt' | 'donatedBy' | 'donatedOn' | 'donatedTo' | 'solicitationCode' | 'teamId' | 'updatedAt'; }; 'FundraisingEntryResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'FundraisingEntryResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'FundraisingEntryResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'FundraisingEntryResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'FundraisingEntryResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'FundraisingEntryResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FundraisingEntryResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'FundraisingEntryResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'FundraisingEntryResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FundraisingEntryResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'FundraisingEntryResolverSort': { kind: 'INPUT_OBJECT'; name: 'FundraisingEntryResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FundraisingEntryResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'GetConfigurationByUuidResponse': { kind: 'OBJECT'; name: 'GetConfigurationByUuidResponse'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ConfigurationNode'; ofType: null; }; } }; }; }; 'GetDeviceByUuidResponse': { kind: 'OBJECT'; name: 'GetDeviceByUuidResponse'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'DeviceNode'; ofType: null; }; } }; }; }; @@ -73,6 +77,7 @@ export type introspection_types = { 'ImageResolverFilterFields': { name: 'ImageResolverFilterFields'; enumValues: 'alt' | 'createdAt' | 'height' | 'updatedAt' | 'width'; }; 'ImageResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'ImageResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ImageResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ImageResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'ImageResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'ImageResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'ImageResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'ImageResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'ImageResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'ImageResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'ImageResolverSort': { kind: 'INPUT_OBJECT'; name: 'ImageResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'ImageResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'InstagramFeedNode': { kind: 'OBJECT'; name: 'InstagramFeedNode'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'image': { name: 'image'; type: { kind: 'OBJECT'; name: 'ImageNode'; ofType: null; } }; 'link': { name: 'link'; type: { kind: 'SCALAR'; name: 'URL'; ofType: null; } }; 'textContent': { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; 'Int': unknown; @@ -102,11 +107,13 @@ export type introspection_types = { 'MarathonHourResolverFilterFields': { name: 'MarathonHourResolverFilterFields'; enumValues: 'createdAt' | 'details' | 'durationInfo' | 'marathonYear' | 'shownStartingAt' | 'title' | 'updatedAt'; }; 'MarathonHourResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'MarathonHourResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'MarathonHourResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'MarathonHourResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'MarathonHourResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'MarathonHourResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MarathonHourResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'MarathonHourResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'MarathonHourResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MarathonHourResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'MarathonHourResolverSort': { kind: 'INPUT_OBJECT'; name: 'MarathonHourResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MarathonHourResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'MarathonNode': { kind: 'OBJECT'; name: 'MarathonNode'; fields: { 'communityDevelopmentCommitteeTeam': { name: 'communityDevelopmentCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'corporateCommitteeTeam': { name: 'corporateCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'dancerRelationsCommitteeTeam': { name: 'dancerRelationsCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'endDate': { name: 'endDate'; type: { kind: 'SCALAR'; name: 'DateTimeISO'; ofType: null; } }; 'familyRelationsCommitteeTeam': { name: 'familyRelationsCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'fundraisingCommitteeTeam': { name: 'fundraisingCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'hours': { name: 'hours'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MarathonHourNode'; ofType: null; }; }; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'marketingCommitteeTeam': { name: 'marketingCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'miniMarathonsCommitteeTeam': { name: 'miniMarathonsCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'operationsCommitteeTeam': { name: 'operationsCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'overallCommitteeTeam': { name: 'overallCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'programmingCommitteeTeam': { name: 'programmingCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'startDate': { name: 'startDate'; type: { kind: 'SCALAR'; name: 'DateTimeISO'; ofType: null; } }; 'techCommitteeTeam': { name: 'techCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'viceCommitteeTeam': { name: 'viceCommitteeTeam'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'year': { name: 'year'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; 'MarathonResolverFilterFields': { name: 'MarathonResolverFilterFields'; enumValues: 'createdAt' | 'endDate' | 'startDate' | 'updatedAt' | 'year'; }; 'MarathonResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'MarathonResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'MarathonResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'MarathonResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'MarathonResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'MarathonResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MarathonResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'MarathonResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'MarathonResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MarathonResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'MarathonResolverSort': { kind: 'INPUT_OBJECT'; name: 'MarathonResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MarathonResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'MemberOf': { kind: 'INPUT_OBJECT'; name: 'MemberOf'; isOneOf: false; inputFields: [{ name: 'committeeRole'; type: { kind: 'ENUM'; name: 'CommitteeRole'; ofType: null; }; defaultValue: null }, { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; }; defaultValue: null }]; }; 'MembershipNode': { kind: 'OBJECT'; name: 'MembershipNode'; fields: { 'committeeRole': { name: 'committeeRole'; type: { kind: 'ENUM'; name: 'CommitteeRole'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'person': { name: 'person'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'PersonNode'; ofType: null; }; } }; 'position': { name: 'position'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'MembershipPositionType'; ofType: null; }; } }; 'team': { name: 'team'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; @@ -122,27 +129,32 @@ export type introspection_types = { 'NotificationDeliveryResolverFilterFields': { name: 'NotificationDeliveryResolverFilterFields'; enumValues: 'createdAt' | 'deliveryError' | 'receiptCheckedAt' | 'sentAt' | 'updatedAt'; }; 'NotificationDeliveryResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'NotificationDeliveryResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'NotificationDeliveryResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'NotificationDeliveryResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'NotificationDeliveryResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'NotificationDeliveryResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'NotificationDeliveryResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'NotificationDeliveryResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'NotificationDeliveryResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'NotificationDeliveryResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'NotificationDeliveryResolverSort': { kind: 'INPUT_OBJECT'; name: 'NotificationDeliveryResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'NotificationDeliveryResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'NotificationNode': { kind: 'OBJECT'; name: 'NotificationNode'; fields: { 'body': { name: 'body'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'deliveryCount': { name: 'deliveryCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'deliveryIssue': { name: 'deliveryIssue'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'deliveryIssueAcknowledgedAt': { name: 'deliveryIssueAcknowledgedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'deliveryIssueCount': { name: 'deliveryIssueCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'NotificationDeliveryIssueCount'; ofType: null; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'sendAt': { name: 'sendAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'startedSendingAt': { name: 'startedSendingAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'url': { name: 'url'; type: { kind: 'SCALAR'; name: 'URL'; ofType: null; } }; }; }; 'NotificationResolverFilterFields': { name: 'NotificationResolverFilterFields'; enumValues: 'body' | 'createdAt' | 'deliveryIssue' | 'deliveryIssueAcknowledgedAt' | 'sendAt' | 'startedSendingAt' | 'title' | 'updatedAt'; }; 'NotificationResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'NotificationResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'NotificationResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'NotificationResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'NotificationResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'NotificationResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'NotificationResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'NotificationResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'NotificationResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'NotificationResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'NotificationResolverSort': { kind: 'INPUT_OBJECT'; name: 'NotificationResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'NotificationResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'NullFilter': { kind: 'INPUT_OBJECT'; name: 'NullFilter'; isOneOf: false; inputFields: [{ name: 'comparison'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'NoTargetOperators'; ofType: null; }; }; defaultValue: null }]; }; 'PersonNode': { kind: 'OBJECT'; name: 'PersonNode'; fields: { 'committees': { name: 'committees'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'CommitteeMembershipNode'; ofType: null; }; }; }; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'email': { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'fundraisingAssignments': { name: 'fundraisingAssignments'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'FundraisingAssignmentNode'; ofType: null; }; }; }; } }; 'fundraisingTotalAmount': { name: 'fundraisingTotalAmount'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'hasPassword': { name: 'hasPassword'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'linkblue': { name: 'linkblue'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'moraleTeams': { name: 'moraleTeams'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MembershipNode'; ofType: null; }; }; }; } }; 'name': { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'primaryCommittee': { name: 'primaryCommittee'; type: { kind: 'OBJECT'; name: 'CommitteeMembershipNode'; ofType: null; } }; 'primaryTeam': { name: 'primaryTeam'; type: { kind: 'OBJECT'; name: 'MembershipNode'; ofType: null; } }; 'teams': { name: 'teams'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MembershipNode'; ofType: null; }; }; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; 'PersonResolverFilterFields': { name: 'PersonResolverFilterFields'; enumValues: 'committeeName' | 'committeeRole' | 'email' | 'linkblue' | 'name'; }; 'PersonResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'PersonResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'PersonResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'PersonResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'PersonResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'PersonResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PersonResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'PersonResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'PersonResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PersonResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'PersonResolverSort': { kind: 'INPUT_OBJECT'; name: 'PersonResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PersonResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'PointEntryNode': { kind: 'OBJECT'; name: 'PointEntryNode'; fields: { 'comment': { name: 'comment'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'personFrom': { name: 'personFrom'; type: { kind: 'OBJECT'; name: 'PersonNode'; ofType: null; } }; 'pointOpportunity': { name: 'pointOpportunity'; type: { kind: 'OBJECT'; name: 'PointOpportunityNode'; ofType: null; } }; 'points': { name: 'points'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'team': { name: 'team'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; 'PointEntryResolverFilterFields': { name: 'PointEntryResolverFilterFields'; enumValues: 'createdAt' | 'updatedAt'; }; 'PointEntryResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'PointEntryResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'PointEntryResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'PointEntryResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'PointEntryResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'PointEntryResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PointEntryResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'PointEntryResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'PointEntryResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PointEntryResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'PointEntryResolverSort': { kind: 'INPUT_OBJECT'; name: 'PointEntryResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PointEntryResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'PointOpportunityNode': { kind: 'OBJECT'; name: 'PointOpportunityNode'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'event': { name: 'event'; type: { kind: 'OBJECT'; name: 'EventNode'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'opportunityDate': { name: 'opportunityDate'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'type': { name: 'type'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'TeamType'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; 'PointOpportunityResolverFilterFields': { name: 'PointOpportunityResolverFilterFields'; enumValues: 'createdAt' | 'marathonUuid' | 'name' | 'opportunityDate' | 'type' | 'updatedAt'; }; 'PointOpportunityResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'PointOpportunityResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'PointOpportunityResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'PointOpportunityResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'PointOpportunityResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'PointOpportunityResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PointOpportunityResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'PointOpportunityResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'PointOpportunityResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PointOpportunityResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'PointOpportunityResolverSort': { kind: 'INPUT_OBJECT'; name: 'PointOpportunityResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'PointOpportunityResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'PositiveInt': unknown; 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'activeConfiguration': { name: 'activeConfiguration'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'GetConfigurationByUuidResponse'; ofType: null; }; } }; 'allConfigurations': { name: 'allConfigurations'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ConfigurationNode'; ofType: null; }; }; }; } }; 'auditLogs': { name: 'auditLogs'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListAuditLogsResponse'; ofType: null; }; } }; 'configuration': { name: 'configuration'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ConfigurationNode'; ofType: null; }; } }; 'currentMarathon': { name: 'currentMarathon'; type: { kind: 'OBJECT'; name: 'MarathonNode'; ofType: null; } }; 'currentMarathonHour': { name: 'currentMarathonHour'; type: { kind: 'OBJECT'; name: 'MarathonHourNode'; ofType: null; } }; 'dailyDepartmentNotification': { name: 'dailyDepartmentNotification'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'DailyDepartmentNotificationNode'; ofType: null; }; } }; 'dailyDepartmentNotificationBatch': { name: 'dailyDepartmentNotificationBatch'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'DailyDepartmentNotificationBatchNode'; ofType: null; }; } }; 'dailyDepartmentNotifications': { name: 'dailyDepartmentNotifications'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListDailyDepartmentNotificationsResponse'; ofType: null; }; } }; 'device': { name: 'device'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'GetDeviceByUuidResponse'; ofType: null; }; } }; 'devices': { name: 'devices'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListDevicesResponse'; ofType: null; }; } }; 'event': { name: 'event'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'EventNode'; ofType: null; }; } }; 'events': { name: 'events'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListEventsResponse'; ofType: null; }; } }; 'feed': { name: 'feed'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'FeedItem'; ofType: null; }; }; }; } }; 'feedItem': { name: 'feedItem'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'FeedNode'; ofType: null; }; } }; 'fundraisingAssignment': { name: 'fundraisingAssignment'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'FundraisingAssignmentNode'; ofType: null; }; } }; 'fundraisingEntries': { name: 'fundraisingEntries'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListFundraisingEntriesResponse'; ofType: null; }; } }; 'fundraisingEntry': { name: 'fundraisingEntry'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'FundraisingEntryNode'; ofType: null; }; } }; 'image': { name: 'image'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ImageNode'; ofType: null; }; } }; 'images': { name: 'images'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListImagesResponse'; ofType: null; }; } }; 'latestMarathon': { name: 'latestMarathon'; type: { kind: 'OBJECT'; name: 'MarathonNode'; ofType: null; } }; 'loginState': { name: 'loginState'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'LoginState'; ofType: null; }; } }; 'marathon': { name: 'marathon'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MarathonNode'; ofType: null; }; } }; 'marathonForYear': { name: 'marathonForYear'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MarathonNode'; ofType: null; }; } }; 'marathonHour': { name: 'marathonHour'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'MarathonHourNode'; ofType: null; }; } }; 'marathonHours': { name: 'marathonHours'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListMarathonHoursResponse'; ofType: null; }; } }; 'marathons': { name: 'marathons'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListMarathonsResponse'; ofType: null; }; } }; 'me': { name: 'me'; type: { kind: 'OBJECT'; name: 'PersonNode'; ofType: null; } }; 'node': { name: 'node'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INTERFACE'; name: 'Node'; ofType: null; }; } }; 'notification': { name: 'notification'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'NotificationNode'; ofType: null; }; } }; 'notificationDeliveries': { name: 'notificationDeliveries'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListNotificationDeliveriesResponse'; ofType: null; }; } }; 'notifications': { name: 'notifications'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListNotificationsResponse'; ofType: null; }; } }; 'people': { name: 'people'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListPeopleResponse'; ofType: null; }; } }; 'person': { name: 'person'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'PersonNode'; ofType: null; }; } }; 'personByLinkBlue': { name: 'personByLinkBlue'; type: { kind: 'OBJECT'; name: 'PersonNode'; ofType: null; } }; 'pointEntries': { name: 'pointEntries'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListPointEntriesResponse'; ofType: null; }; } }; 'pointEntry': { name: 'pointEntry'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'PointEntryNode'; ofType: null; }; } }; 'pointOpportunities': { name: 'pointOpportunities'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListPointOpportunitiesResponse'; ofType: null; }; } }; 'pointOpportunity': { name: 'pointOpportunity'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'PointOpportunityNode'; ofType: null; }; } }; 'rawFundraisingEntries': { name: 'rawFundraisingEntries'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'rawFundraisingTotals': { name: 'rawFundraisingTotals'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'report': { name: 'report'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Report'; ofType: null; }; } }; 'searchPeopleByName': { name: 'searchPeopleByName'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'PersonNode'; ofType: null; }; }; }; } }; 'solicitationCode': { name: 'solicitationCode'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SolicitationCodeNode'; ofType: null; }; } }; 'solicitationCodes': { name: 'solicitationCodes'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListSolicitationCodesResponse'; ofType: null; }; } }; 'team': { name: 'team'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; } }; 'teams': { name: 'teams'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListTeamsResponse'; ofType: null; }; } }; }; }; @@ -170,6 +182,7 @@ export type introspection_types = { 'SolicitationCodeFilterGroup': { kind: 'INPUT_OBJECT'; name: 'SolicitationCodeFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SolicitationCodeFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SolicitationCodeFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'SolicitationCodeFilterItem': { kind: 'INPUT_OBJECT'; name: 'SolicitationCodeFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SolicitationCodeFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; 'SolicitationCodeNode': { kind: 'OBJECT'; name: 'SolicitationCodeNode'; fields: { 'code': { name: 'code'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonNegativeInt'; ofType: null; }; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; 'entries': { name: 'entries'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ListFundraisingEntriesResponse'; ofType: null; }; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'GlobalId'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'prefix': { name: 'prefix'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'teams': { name: 'teams'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'TeamNode'; ofType: null; }; }; }; } }; 'text': { name: 'text'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; } }; }; }; + 'SolicitationCodeSearchFilter': { kind: 'INPUT_OBJECT'; name: 'SolicitationCodeSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SolicitationCodeFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'SolicitationCodeSort': { kind: 'INPUT_OBJECT'; name: 'SolicitationCodeSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SolicitationCodeFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'SomeFilter': { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; isOneOf: false; inputFields: [{ name: 'arrayBooleanFilter'; type: { kind: 'INPUT_OBJECT'; name: 'ArrayBooleanFilter'; ofType: null; }; defaultValue: null }, { name: 'arrayDateFilter'; type: { kind: 'INPUT_OBJECT'; name: 'ArrayDateFilter'; ofType: null; }; defaultValue: null }, { name: 'arrayNumberFilter'; type: { kind: 'INPUT_OBJECT'; name: 'ArrayNumberFilter'; ofType: null; }; defaultValue: null }, { name: 'arrayStringFilter'; type: { kind: 'INPUT_OBJECT'; name: 'ArrayStringFilter'; ofType: null; }; defaultValue: null }, { name: 'nullFilter'; type: { kind: 'INPUT_OBJECT'; name: 'NullFilter'; ofType: null; }; defaultValue: null }, { name: 'singleBooleanFilter'; type: { kind: 'INPUT_OBJECT'; name: 'SingleBooleanFilter'; ofType: null; }; defaultValue: null }, { name: 'singleDateFilter'; type: { kind: 'INPUT_OBJECT'; name: 'SingleDateFilter'; ofType: null; }; defaultValue: null }, { name: 'singleNumberFilter'; type: { kind: 'INPUT_OBJECT'; name: 'SingleNumberFilter'; ofType: null; }; defaultValue: null }, { name: 'singleStringFilter'; type: { kind: 'INPUT_OBJECT'; name: 'SingleStringFilter'; ofType: null; }; defaultValue: null }, { name: 'twoDateFilter'; type: { kind: 'INPUT_OBJECT'; name: 'TwoDateFilter'; ofType: null; }; defaultValue: null }, { name: 'twoNumberFilter'; type: { kind: 'INPUT_OBJECT'; name: 'TwoNumberFilter'; ofType: null; }; defaultValue: null }]; }; 'SortDirection': { name: 'SortDirection'; enumValues: 'asc' | 'desc'; }; @@ -179,6 +192,7 @@ export type introspection_types = { 'TeamResolverFilterFields': { name: 'TeamResolverFilterFields'; enumValues: 'legacyStatus' | 'marathonId' | 'name' | 'type'; }; 'TeamResolverFilterGroup': { kind: 'INPUT_OBJECT'; name: 'TeamResolverFilterGroup'; isOneOf: false; inputFields: [{ name: 'children'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'TeamResolverFilterGroup'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'filters'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'TeamResolverFilterItem'; ofType: null; }; }; }; }; defaultValue: "[]" }, { name: 'operator'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'FilterGroupOperator'; ofType: null; }; }; defaultValue: null }]; }; 'TeamResolverFilterItem': { kind: 'INPUT_OBJECT'; name: 'TeamResolverFilterItem'; isOneOf: false; inputFields: [{ name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'TeamResolverFilterFields'; ofType: null; }; }; defaultValue: null }, { name: 'filter'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SomeFilter'; ofType: null; }; }; defaultValue: null }]; }; + 'TeamResolverSearchFilter': { kind: 'INPUT_OBJECT'; name: 'TeamResolverSearchFilter'; isOneOf: false; inputFields: [{ name: 'fields'; type: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'TeamResolverFilterFields'; ofType: null; }; }; }; defaultValue: null }, { name: 'query'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'NonEmptyString'; ofType: null; }; }; defaultValue: null }]; }; 'TeamResolverSort': { kind: 'INPUT_OBJECT'; name: 'TeamResolverSort'; isOneOf: false; inputFields: [{ name: 'direction'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'SortDirection'; ofType: null; }; }; defaultValue: "asc" }, { name: 'field'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'TeamResolverFilterFields'; ofType: null; }; }; defaultValue: null }]; }; 'TeamType': { name: 'TeamType'; enumValues: 'Mini' | 'Morale' | 'Spirit'; }; 'TwoDateFilter': { kind: 'INPUT_OBJECT'; name: 'TwoDateFilter'; isOneOf: false; inputFields: [{ name: 'comparison'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'ENUM'; name: 'TwoTargetOperators'; ofType: null; }; }; defaultValue: null }, { name: 'lower'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; }; }; defaultValue: null }, { name: 'upper'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'LuxonDateTime'; ofType: null; }; }; defaultValue: null }]; }; diff --git a/packages/portal/package.json b/packages/portal/package.json index a23bdd2a..d8f181be 100644 --- a/packages/portal/package.json +++ b/packages/portal/package.json @@ -46,32 +46,32 @@ "@nivo/core": "^0.88.0", "@nivo/line": "^0.88.0", "@nivo/pie": "^0.88.0", - "@refinedev/antd": "^5.44.0", - "@refinedev/core": "^4.56.0", - "@refinedev/devtools": "^1.2.10", + "@refinedev/antd": "^5.45.1", + "@refinedev/core": "^4.57.1", + "@refinedev/devtools": "^1.2.12", "@sentry/react": "^8.38.0", "@sentry/vite-plugin": "^2.22.6", - "@tanstack/react-form": "^0.39.0", - "@tanstack/react-router": "^1.87.0", + "@tanstack/react-form": "^0.41.0", + "@tanstack/react-router": "^1.95.1", "@uidotdev/usehooks": "^2.4.1", "@ukdanceblue/common": "workspace:^", - "@urql/core": "^5.0.8", + "@urql/core": "^5.1.0", "@urql/devtools": "^2.0.3", "@wysimark/react": "^3.0.20", - "antd": "^5.22.4", + "antd": "^5.22.7", "camelcase": "^8.0.0", "class-validator": "^0.14.1", "gql.tada": "^1.8.10", - "graphql": "^16.9.0", + "graphql": "^16.10.0", "graphql-scalars": "^1.24.0", "lodash.isequal": "^4.5.0", "luxon": "^3.5.0", "normalize.css": "^8.0.1", "pluralize": "^8.0.0", - "rc-picker": "^4.8.3", + "rc-picker": "^4.9.0", "react": "18.3.1", "react-dom": "~18.3.1", - "react-hook-form": "^7.54.0", + "react-hook-form": "^7.54.2", "react-markdown": "^9.0.1", "react-to-print": "^3.0.2", "reflect-metadata": "^0.2.2", @@ -85,22 +85,22 @@ "validator": "^13.12.0", "wonka": "^6.3.4", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz", - "zod": "^3.23.8" + "zod": "^3.24.1" }, "devDependencies": { - "@refinedev/cli": "^2.16.40", - "@tanstack/router-devtools": "^1.87.0", - "@tanstack/router-plugin": "^1.86.0", + "@refinedev/cli": "^2.16.42", + "@tanstack/router-devtools": "^1.95.1", + "@tanstack/router-plugin": "^1.95.1", "@types/lodash.isequal": "^4.5.8", "@types/luxon": "^3.4.2", "@types/pluralize": "^0.0.33", "@types/react": "~18.3.14", "@types/react-dom": "~18.3.2", "@vitejs/plugin-react-swc": "^3.7.2", - "cypress": "^13.16.1", - "cypress-vite": "^1.5.0", + "cypress": "^13.17.0", + "cypress-vite": "^1.6.0", "typescript": "^5.7.2", - "vite": "^6.0.3" + "vite": "^6.0.7" }, "packageManager": "yarn@4.5.3+sha512.3003a14012e2987072d244c720506549c1aab73ee728208f1b2580a9fd67b92d61ba6b08fe93f6dce68fd771e3af1e59a0afa28dd242dd0940d73b95fedd4e90", "refine": { diff --git a/packages/portal/src/config/refine/graphql/crudFiltersToFilterObject.ts b/packages/portal/src/config/refine/graphql/crudFiltersToFilterObject.ts index 9c1d856b..363e2250 100644 --- a/packages/portal/src/config/refine/graphql/crudFiltersToFilterObject.ts +++ b/packages/portal/src/config/refine/graphql/crudFiltersToFilterObject.ts @@ -353,31 +353,60 @@ export function crudFilterToFilterObject( export function crudFiltersToFilterObject( crudFilter: CrudFilter, fieldTypes: FieldTypes | undefined -): FilterGroup { +): { + filterGroup?: FilterGroup; + search?: string; +} { const filters: FilterGroup["filters"] = []; const children: FilterGroup["children"] = []; + let search: string | undefined; + if (crudFilter.operator === "or" || crudFilter.operator === "and") { + const mapped = crudFilter.value + .map((f) => crudFiltersToFilterObject(f, fieldTypes)) + .reduce<{ + children: FilterGroup[]; + search?: string; + }>( + (acc, { filterGroup, search }) => { + if (filterGroup) { + acc.children.push(filterGroup); + } + if (search) { + acc.search = search; + } + return acc; + }, + { children: [], search: undefined } + ); + if (mapped.search) { + search = mapped.search; + } children.push({ operator: crudFilter.operator === "or" ? FilterGroupOperator.OR : FilterGroupOperator.AND, filters: [], - children: crudFilter.value.map((f) => - crudFiltersToFilterObject(f, fieldTypes) - ), + children: mapped.children, }); + } else if ((crudFilter as LogicalFilter).field === "$search") { + search = crudFilter.value; } else { filters.push( crudFilterToFilterObject(crudFilter as LogicalFilter, fieldTypes) ); } + return { - operator: - crudFilter.operator === "or" - ? FilterGroupOperator.OR - : FilterGroupOperator.AND, - children, - filters, + search, + filterGroup: { + operator: + crudFilter.operator === "or" + ? FilterGroupOperator.OR + : FilterGroupOperator.AND, + children, + filters, + }, }; } diff --git a/packages/portal/src/config/refine/graphql/data.ts b/packages/portal/src/config/refine/graphql/data.ts index eb0c8344..d6343224 100644 --- a/packages/portal/src/config/refine/graphql/data.ts +++ b/packages/portal/src/config/refine/graphql/data.ts @@ -36,6 +36,8 @@ function getOperationName( export type FieldTypes = Record; +const postgresFtsOperators = /[!&():|]/g; + function combinedToHttpError(error: CombinedError): HttpError { if (error.networkError) { return { @@ -155,15 +157,28 @@ export const dataProvider: Required = { getList: async (params) => { const { meta, sorters, filters, pagination, resource } = params; - const filterObj = - filters && - crudFiltersToFilterObject( + let filterGroup: FilterGroup | undefined; + let search: string | undefined; + if (filters) { + ({ filterGroup, search } = crudFiltersToFilterObject( { operator: "and", value: filters, }, meta?.fieldTypes as FieldTypes | undefined - ); + )); + + if (search) { + if (postgresFtsOperators.test(search)) { + throw new Error("Invalid search query, contains invalid characters"); + } + search = search + .split(" ") + .filter(Boolean) + .map((s) => (s.startsWith('"') && s.endsWith('"') ? s : `${s}:*`)) + .join(" & "); + } + } let query: DocumentNode | undefined; if (meta?.gqlQuery) { @@ -195,7 +210,13 @@ export const dataProvider: Required = { ) ?? undefined, page: pagination?.current ?? undefined, pageSize: pagination?.pageSize ?? undefined, - filters: filterObj, + filters: filterGroup, + search: search + ? { + query: search, + } + : undefined, + sendAll: pagination?.mode !== "server", ...meta?.variables, ...meta?.gqlVariables, } satisfies Partial< diff --git a/packages/portal/src/config/refine/graphql/makeListDocument.ts b/packages/portal/src/config/refine/graphql/makeListDocument.ts index 88296b76..e54eadee 100644 --- a/packages/portal/src/config/refine/graphql/makeListDocument.ts +++ b/packages/portal/src/config/refine/graphql/makeListDocument.ts @@ -70,6 +70,20 @@ export function makeListDocument( }, }, }, + { + kind: Kind.VARIABLE_DEFINITION, + variable: { + kind: Kind.VARIABLE, + name: { kind: Kind.NAME, value: "search" }, + }, + type: { + kind: Kind.NAMED_TYPE, + name: { + kind: Kind.NAME, + value: `${pascalResource}ResolverSearchFilter`, + }, + }, + }, ], selectionSet: { kind: Kind.SELECTION_SET, @@ -110,6 +124,14 @@ export function makeListDocument( name: { kind: Kind.NAME, value: "filters" }, }, }, + { + kind: Kind.ARGUMENT, + name: { kind: Kind.NAME, value: "search" }, + value: { + kind: Kind.VARIABLE, + name: { kind: Kind.NAME, value: "search" }, + }, + }, ], selectionSet: { kind: Kind.SELECTION_SET, diff --git a/packages/portal/src/config/refine/router.tsx b/packages/portal/src/config/refine/router.tsx index 10425128..612d99f3 100644 --- a/packages/portal/src/config/refine/router.tsx +++ b/packages/portal/src/config/refine/router.tsx @@ -7,6 +7,7 @@ import { } from "@refinedev/core"; import { Link, + type LinkProps, useLocation, useNavigate, useParams, @@ -139,7 +140,7 @@ export const routerBindings: RouterBindings = { Link: React.forwardRef< HTMLAnchorElement, ComponentProps> - >((props, ref) => { + >((props: LinkProps, ref) => { return ; }), }; diff --git a/packages/portal/src/elements/components/RefineSearchForm.tsx b/packages/portal/src/elements/components/RefineSearchForm.tsx new file mode 100644 index 00000000..5a96fae8 --- /dev/null +++ b/packages/portal/src/elements/components/RefineSearchForm.tsx @@ -0,0 +1,30 @@ +import { SearchOutlined } from "@ant-design/icons"; +import { Form, type FormProps, type GetRef, Input, Space } from "antd"; +import { useRef } from "react"; +import { useDebouncedCallback } from "use-debounce"; + +export function RefineSearchForm({ + searchFormProps, +}: { + searchFormProps: FormProps; +}) { + const form = useRef>(); + + const submit = useDebouncedCallback(() => form.current?.submit(), 300); + + return ( +
(form.current = ref ?? undefined)}> + + + } + placeholder="Search" + onChange={() => { + submit(); + }} + /> + + +
+ ); +} diff --git a/packages/portal/src/elements/tables/EventsTable.tsx b/packages/portal/src/elements/tables/EventsTable.tsx index f68abb36..33857a5b 100644 --- a/packages/portal/src/elements/tables/EventsTable.tsx +++ b/packages/portal/src/elements/tables/EventsTable.tsx @@ -1,16 +1,16 @@ -import { EditOutlined, EyeOutlined, SearchOutlined } from "@ant-design/icons"; -import { useTable } from "@refinedev/antd"; -import type { LogicalFilter } from "@refinedev/core"; +import { EditOutlined, EyeOutlined } from "@ant-design/icons"; import { Link } from "@tanstack/react-router"; import { parsedEventOccurrenceToStrings, parseEventOccurrence, } from "@ukdanceblue/common/client-parsers"; -import { Button, Flex, Form, Input, List, Space, Table } from "antd"; +import { Button, Flex, List, Table } from "antd"; -import { graphql, type ResultOf } from "#graphql/index.js"; +import { RefineSearchForm } from "#elements/components/RefineSearchForm.tsx"; +import { graphql } from "#graphql/index.js"; +import { useTypedTable } from "#hooks/useTypedRefine.ts"; -const EventsTableFragment = graphql(/* GraphQL */ ` +export const EventsTableFragment = graphql(/* GraphQL */ ` fragment EventsTableFragment on EventNode { id title @@ -23,122 +23,90 @@ const EventsTableFragment = graphql(/* GraphQL */ ` fullDay } summary + description } `); export const EventsTable = () => { - const { searchFormProps, tableProps } = useTable< - ResultOf - >({ - meta: { - gqlFragment: EventsTableFragment, - fieldTypes: { - occurrences: "date", + const { searchFormProps, tableProps } = useTypedTable( + EventsTableFragment, + { + sorters: { + initial: [ + { + field: "occurrences", + order: "desc", + }, + ], }, }, - syncWithLocation: true, - sorters: { - initial: [ - { - field: "occurrences", - order: "desc", - }, - ], - }, - onSearch(data) { - if (typeof data !== "object" || data === null) { - return []; - } - - const filters: LogicalFilter[] = []; - - if ("title" in data && data.title) { - filters.push({ - field: "title", - operator: "contains", - value: data.title, - }); - } - - return filters; - }, - }); + { + occurrences: "date", + } + ); return ( - <> - -
- - - - -