@reqquest/ui 1.15.1 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -314,6 +314,12 @@ export interface UIConfig<PK extends string = PromptKey, RK extends string = Req
314
314
  title?: string;
315
315
  subTitle?: string;
316
316
  };
317
+ /**
318
+ * Shown to the applicant on the program review and submission review screens when there is no program
319
+ * left to list: none they are eligible for, and every ineligible one belongs to a program that sets
320
+ * `showIneligiblePreSubmit: false`. Defaults to a generic "you don't currently qualify" message.
321
+ */
322
+ applicantNoProgramsMessage?: string;
317
323
  /**
318
324
  * Whether to constrain the applicant review/submission page to a medium
319
325
  * screen-width container. Defaults to true.
package/dist/registry.js CHANGED
@@ -55,7 +55,7 @@ export class UIRegistry {
55
55
  this.validateReviewSections(program);
56
56
  this.userLookup = config.userLookup;
57
57
  this.lang = {
58
- appRequest: config.terminology?.appRequest ?? (Object.keys(this.programMap).length > 1 ? 'App Request' : 'Application'),
58
+ appRequest: config.terminology?.appRequest ?? 'Application',
59
59
  login: config.terminology?.login ?? 'Login',
60
60
  period: config.terminology?.period ?? 'Period'
61
61
  };
@@ -55,6 +55,8 @@ export interface AccessControlGroup {
55
55
  export interface AccessGrantTag {
56
56
  category: Scalars['String'];
57
57
  categoryLabel: Scalars['String'];
58
+ /** Extra context for the tag, such as the other titles a program has gone by in different periods. */
59
+ description: (Scalars['String'] | null);
58
60
  label: Scalars['String'];
59
61
  tag: Scalars['String'];
60
62
  __typename: 'AccessGrantTag';
@@ -123,6 +125,8 @@ export interface AccessRoleValidatedResponse {
123
125
  __typename: 'AccessRoleValidatedResponse';
124
126
  }
125
127
  export interface AccessTag {
128
+ /** Extra context for the tag, such as the other titles a program has gone by in different periods. */
129
+ description: (Scalars['String'] | null);
126
130
  label: Scalars['String'];
127
131
  value: Scalars['String'];
128
132
  __typename: 'AccessTag';
@@ -186,6 +190,7 @@ export interface AppRequest {
186
190
  /** Actions the user can take on this app request. */
187
191
  actions: AppRequestActions;
188
192
  applicant: AccessUser;
193
+ /** The applications on this request, one per program. Pass programKeys to receive only some of them - a screen that shows one program should not download every program's requirement and prompt tree. */
189
194
  applications: Application[];
190
195
  /** True when at least one reachable prompt anywhere on this request has been invalidated and must be re-answered. Status and phase are computed from the answers on file, so use this flag to explain that the request is held back awaiting a correction. */
191
196
  awaitingCorrection: Scalars['Boolean'];
@@ -269,6 +274,14 @@ export interface AppRequestActivity {
269
274
  user: AccessUser;
270
275
  __typename: 'AppRequestActivity';
271
276
  }
277
+ /** Applicant counts for a set of appRequests. A request is a returning application when its applicant also submitted a request in an earlier period (by open date); otherwise it is a first-time application. Unsubmitted drafts in earlier periods do not count. */
278
+ export interface AppRequestApplicantCounts {
279
+ /** Matching appRequests whose applicant submitted nothing in any earlier period. */
280
+ firstTime: Scalars['Int'];
281
+ /** Matching appRequests whose applicant also submitted a request in an earlier period. */
282
+ returning: Scalars['Int'];
283
+ __typename: 'AppRequestApplicantCounts';
284
+ }
272
285
  /** This represents an index category attached to an app request. Its tagStrings property contains the tag values that have been extracted from the app request data. */
273
286
  export interface AppRequestIndexCategory {
274
287
  /** If this is > 0, the index values should be shown on the main app request list page, sorted by this priority in descending order. */
@@ -308,6 +321,8 @@ export interface Application {
308
321
  awaitingCorrection: Scalars['Boolean'];
309
322
  /** A prose summary of the applicant-side requirements of the program this application is for. Intended to be shown alongside statusReason when the application becomes ineligible before submission, since an applicant disqualified early may never have seen the program's prompts and the statusReason alone lacks context. */
310
323
  eligibilityDescription: (Scalars['String'] | null);
324
+ /** True when the program sets showIneligiblePreSubmit: false and this application is hidden by it: ineligible because of an applicant requirement, and that ineligibility arose before submission (the request is unsubmitted, or the application was already ineligible when it was submitted). Only the applicant ever receives a hidden application, so they can still change the answers that disqualified them; UIs should leave it out of program lists. */
325
+ hiddenIneligiblePreSubmit: Scalars['Boolean'];
311
326
  id: Scalars['ID'];
312
327
  /** The phase in which this application became ineligible for benefits. Useful for reporting / filtering. Null if the application is not (yet) ineligible. */
313
328
  ineligiblePhase: (IneligiblePhases | null);
@@ -462,7 +477,7 @@ export interface Configuration {
462
477
  actions: ConfigurationAccess;
463
478
  data: Scalars['JsonData'];
464
479
  fetchedData: (Scalars['JsonData'] | null);
465
- /** The key being configured. Could be a requirement or prompt key. */
480
+ /** The key being configured. Could be a requirement, prompt, or program key. A program's configuration holds its per-period title and navTitle overrides. */
466
481
  key: Scalars['String'];
467
482
  __typename: 'Configuration';
468
483
  }
@@ -544,7 +559,7 @@ export interface Mutation {
544
559
  roleDeleteGrant: AccessRoleValidatedResponse;
545
560
  roleUpdate: AccessRoleValidatedResponse;
546
561
  roleUpdateGrant: AccessRoleValidatedResponse;
547
- /** Submit the app request. */
562
+ /** Submit the app request. Applications whose program has no reviewer questions (no PREAPPROVAL or APPROVAL requirements) advance on their own into their first blocking workflow stage or to REVIEW_COMPLETE; when nothing is left to review, the review is completed automatically as well. Applications ruled out before submission (PREQUAL or QUALIFICATION) do not hold that back. */
548
563
  submitAppRequest: ValidatedAppRequestResponse;
549
564
  /** Toggle an existing note's persistent status. */
550
565
  togglePersistence: ValidatedNoteResponse;
@@ -642,6 +657,8 @@ export interface PeriodProgram {
642
657
  actions: PeriodProgramActions;
643
658
  /** A brief description of the program, written for applicants. */
644
659
  applicantDescription: (Scalars['String'] | null);
660
+ /** The configuration for this program in the period, which holds its title and navTitle overrides. */
661
+ configuration: Configuration;
645
662
  /** A prose summary of the applicant-side requirements of the program. Intended to be shown to applicants who become ineligible before submission, since they may never have seen the program's prompts. */
646
663
  eligibilityDescription: (Scalars['String'] | null);
647
664
  /** Whether the program is enabled in this period. This is set by the system administrator. */
@@ -723,11 +740,17 @@ export interface Query {
723
740
  announcements: Announcement[];
724
741
  /** The activity log for this app request. This is a list of actions taken on the app request, such as submission, updating prompts, make an offer, add a note, etc. It will be sorted by the date of the activity in descending order. */
725
742
  appRequestActivity: AppRequestActivity[];
743
+ /** The distinct action verbs that appear in the activity log for the associated app request, sorted alphabetically. */
744
+ appRequestActivityActions: Scalars['String'][];
745
+ /** Everyone who appears in the activity log for the associated app request, as the user that performed an activity or as the admin impersonating them. */
746
+ appRequestActivityUsers: AccessUser[];
726
747
  appRequestIndexes: IndexCategory[];
727
748
  appRequests: AppRequest[];
728
749
  applicationMetrics: ApplicationMetric;
729
750
  /** This is where you get information about the authorization system. Each grant will be associated with one of these controlGroups, one or more controls in the group, and an optional set of tags. The tags are used to limit the scope of the grant. */
730
751
  controlGroups: AccessControlGroup[];
752
+ /** First-time vs returning applicant counts for the matching appRequests (see AppRequestApplicantCounts). */
753
+ countAppRequestApplicants: AppRequestApplicantCounts;
731
754
  countAppRequests: Scalars['Int'];
732
755
  pageInfo: PaginationResponse;
733
756
  periods: Period[];
@@ -887,6 +910,8 @@ export interface AccessControlGroupGenqlSelection {
887
910
  export interface AccessGrantTagGenqlSelection {
888
911
  category?: boolean | number;
889
912
  categoryLabel?: boolean | number;
913
+ /** Extra context for the tag, such as the other titles a program has gone by in different periods. */
914
+ description?: boolean | number;
890
915
  label?: boolean | number;
891
916
  tag?: boolean | number;
892
917
  __typename?: boolean | number;
@@ -993,6 +1018,8 @@ export interface AccessRoleValidatedResponseGenqlSelection {
993
1018
  __scalar?: boolean | number;
994
1019
  }
995
1020
  export interface AccessTagGenqlSelection {
1021
+ /** Extra context for the tag, such as the other titles a program has gone by in different periods. */
1022
+ description?: boolean | number;
996
1023
  label?: boolean | number;
997
1024
  value?: boolean | number;
998
1025
  __typename?: boolean | number;
@@ -1116,7 +1143,12 @@ export interface AppRequestGenqlSelection {
1116
1143
  /** Actions the user can take on this app request. */
1117
1144
  actions?: AppRequestActionsGenqlSelection;
1118
1145
  applicant?: AccessUserGenqlSelection;
1119
- applications?: ApplicationGenqlSelection;
1146
+ /** The applications on this request, one per program. Pass programKeys to receive only some of them - a screen that shows one program should not download every program's requirement and prompt tree. */
1147
+ applications?: (ApplicationGenqlSelection & {
1148
+ __args?: {
1149
+ programKeys?: (Scalars['String'][] | null);
1150
+ };
1151
+ });
1120
1152
  /** True when at least one reachable prompt anywhere on this request has been invalidated and must be re-answered. Status and phase are computed from the answers on file, so use this flag to explain that the request is held back awaiting a correction. */
1121
1153
  awaitingCorrection?: boolean | number;
1122
1154
  /** Date that this request was considered closed and no longer editable. If active or re-opened, will be null. If closed again, will be the second closure date. */
@@ -1244,7 +1276,18 @@ export interface AppRequestActivityFilters {
1244
1276
  /** Return activities that were performed by one of the given logins. Also returns activities that were performed while one of the given logins was impersonating someone else. */
1245
1277
  users?: (Scalars['ID'][] | null);
1246
1278
  }
1279
+ /** Applicant counts for a set of appRequests. A request is a returning application when its applicant also submitted a request in an earlier period (by open date); otherwise it is a first-time application. Unsubmitted drafts in earlier periods do not count. */
1280
+ export interface AppRequestApplicantCountsGenqlSelection {
1281
+ /** Matching appRequests whose applicant submitted nothing in any earlier period. */
1282
+ firstTime?: boolean | number;
1283
+ /** Matching appRequests whose applicant also submitted a request in an earlier period. */
1284
+ returning?: boolean | number;
1285
+ __typename?: boolean | number;
1286
+ __scalar?: boolean | number;
1287
+ }
1247
1288
  export interface AppRequestFilter {
1289
+ /** Only return appRequests with at least one application matching one of the given entries (OR). When programKeys is also given, the same application must match both. */
1290
+ applicationStatuses?: (ApplicationStatusFilter[] | null);
1248
1291
  /** true -> only return appRequests that are closed. false -> only return appRequests that are open. null -> return all appRequests. */
1249
1292
  closed?: (Scalars['Boolean'] | null);
1250
1293
  /** Only return appRequests that were closed after this date. Open appRequests will be filtered out. */
@@ -1265,6 +1308,8 @@ export interface AppRequestFilter {
1265
1308
  /** Only return appRequests that are owned by the current user. */
1266
1309
  own?: (Scalars['Boolean'] | null);
1267
1310
  periodIds?: (Scalars['ID'][] | null);
1311
+ /** Only return appRequests that have an application for one of the given programs. When applicationStatuses is also given, the same application must match both. */
1312
+ programKeys?: (Scalars['ID'][] | null);
1268
1313
  /** Only return appRequests where at least one application is in one of the given rescinded states. Rescinding is per-application, so this is independent of the appRequest status. */
1269
1314
  rescindedStatus?: (ApplicationRescindedStatus[] | null);
1270
1315
  /** Only return appRequests that have had their review started. true -> return review started, false -> return not started. Note that this is NOT mutually exclusive with complete or closed, it very simply means that a non-applicant has taken an action on it. */
@@ -1322,6 +1367,8 @@ export interface ApplicationGenqlSelection {
1322
1367
  awaitingCorrection?: boolean | number;
1323
1368
  /** A prose summary of the applicant-side requirements of the program this application is for. Intended to be shown alongside statusReason when the application becomes ineligible before submission, since an applicant disqualified early may never have seen the program's prompts and the statusReason alone lacks context. */
1324
1369
  eligibilityDescription?: boolean | number;
1370
+ /** True when the program sets showIneligiblePreSubmit: false and this application is hidden by it: ineligible because of an applicant requirement, and that ineligibility arose before submission (the request is unsubmitted, or the application was already ineligible when it was submitted). Only the applicant ever receives a hidden application, so they can still change the answers that disqualified them; UIs should leave it out of program lists. */
1371
+ hiddenIneligiblePreSubmit?: boolean | number;
1325
1372
  id?: boolean | number;
1326
1373
  /** The phase in which this application became ineligible for benefits. Useful for reporting / filtering. Null if the application is not (yet) ineligible. */
1327
1374
  ineligiblePhase?: boolean | number;
@@ -1440,6 +1487,12 @@ export interface ApplicationRequirementGenqlSelection {
1440
1487
  __typename?: boolean | number;
1441
1488
  __scalar?: boolean | number;
1442
1489
  }
1490
+ /** Matches an application by its stored status and, optionally, its rescind state. Status is the stored computedStatus, so RESCINDED is not a valid value here - express it as status ELIGIBLE or ACCEPTED with rescindedStatus RESCINDED. */
1491
+ export interface ApplicationStatusFilter {
1492
+ /** When omitted, matches applications currently in the given status (not rescinded). When given, matches only applications in exactly that rescind state. */
1493
+ rescindedStatus?: (ApplicationRescindedStatus | null);
1494
+ status: ApplicationStatus;
1495
+ }
1443
1496
  export interface CategoryGenqlSelection {
1444
1497
  /** This is indexed name of the category. Categories are indexed to allow for quick filtering of a list of items. e.g. institutionalRoles */
1445
1498
  category?: boolean | number;
@@ -1466,7 +1519,7 @@ export interface ConfigurationGenqlSelection {
1466
1519
  actions?: ConfigurationAccessGenqlSelection;
1467
1520
  data?: boolean | number;
1468
1521
  fetchedData?: boolean | number;
1469
- /** The key being configured. Could be a requirement or prompt key. */
1522
+ /** The key being configured. Could be a requirement, prompt, or program key. A program's configuration holds its per-period title and navTitle overrides. */
1470
1523
  key?: boolean | number;
1471
1524
  __typename?: boolean | number;
1472
1525
  __scalar?: boolean | number;
@@ -1739,7 +1792,7 @@ export interface MutationGenqlSelection {
1739
1792
  validateOnly?: (Scalars['Boolean'] | null);
1740
1793
  };
1741
1794
  });
1742
- /** Submit the app request. */
1795
+ /** Submit the app request. Applications whose program has no reviewer questions (no PREAPPROVAL or APPROVAL requirements) advance on their own into their first blocking workflow stage or to REVIEW_COMPLETE; when nothing is left to review, the review is completed automatically as well. Applications ruled out before submission (PREQUAL or QUALIFICATION) do not hold that back. */
1743
1796
  submitAppRequest?: (ValidatedAppRequestResponseGenqlSelection & {
1744
1797
  __args: {
1745
1798
  appRequestId: Scalars['ID'];
@@ -1922,6 +1975,8 @@ export interface PeriodProgramGenqlSelection {
1922
1975
  actions?: PeriodProgramActionsGenqlSelection;
1923
1976
  /** A brief description of the program, written for applicants. */
1924
1977
  applicantDescription?: boolean | number;
1978
+ /** The configuration for this program in the period, which holds its title and navTitle overrides. */
1979
+ configuration?: ConfigurationGenqlSelection;
1925
1980
  /** A prose summary of the applicant-side requirements of the program. Intended to be shown to applicants who become ineligible before submission, since they may never have seen the program's prompts. */
1926
1981
  eligibilityDescription?: boolean | number;
1927
1982
  /** Whether the program is enabled in this period. This is set by the system administrator. */
@@ -2033,6 +2088,18 @@ export interface QueryGenqlSelection {
2033
2088
  paged?: (Pagination | null);
2034
2089
  };
2035
2090
  });
2091
+ /** The distinct action verbs that appear in the activity log for the associated app request, sorted alphabetically. */
2092
+ appRequestActivityActions?: {
2093
+ __args: {
2094
+ id: Scalars['String'];
2095
+ };
2096
+ };
2097
+ /** Everyone who appears in the activity log for the associated app request, as the user that performed an activity or as the admin impersonating them. */
2098
+ appRequestActivityUsers?: (AccessUserGenqlSelection & {
2099
+ __args: {
2100
+ id: Scalars['String'];
2101
+ };
2102
+ });
2036
2103
  appRequestIndexes?: (IndexCategoryGenqlSelection & {
2037
2104
  __args?: {
2038
2105
  categories?: (Scalars['String'][] | null);
@@ -2053,6 +2120,12 @@ export interface QueryGenqlSelection {
2053
2120
  });
2054
2121
  /** This is where you get information about the authorization system. Each grant will be associated with one of these controlGroups, one or more controls in the group, and an optional set of tags. The tags are used to limit the scope of the grant. */
2055
2122
  controlGroups?: AccessControlGroupGenqlSelection;
2123
+ /** First-time vs returning applicant counts for the matching appRequests (see AppRequestApplicantCounts). */
2124
+ countAppRequestApplicants?: (AppRequestApplicantCountsGenqlSelection & {
2125
+ __args?: {
2126
+ filter?: (AppRequestFilter | null);
2127
+ };
2128
+ });
2056
2129
  countAppRequests?: {
2057
2130
  __args: {
2058
2131
  filter?: (AppRequestFilter | null);
@@ -2275,6 +2348,9 @@ export declare const isAppRequestActions: (obj?: {
2275
2348
  export declare const isAppRequestActivity: (obj?: {
2276
2349
  __typename?: any;
2277
2350
  } | null) => obj is AppRequestActivity;
2351
+ export declare const isAppRequestApplicantCounts: (obj?: {
2352
+ __typename?: any;
2353
+ } | null) => obj is AppRequestApplicantCounts;
2278
2354
  export declare const isAppRequestIndexCategory: (obj?: {
2279
2355
  __typename?: any;
2280
2356
  } | null) => obj is AppRequestIndexCategory;
@@ -78,6 +78,11 @@ type AccessControlGroup {
78
78
  type AccessGrantTag {
79
79
  category: String!
80
80
  categoryLabel: String!
81
+
82
+ """
83
+ Extra context for the tag, such as the other titles a program has gone by in different periods.
84
+ """
85
+ description: String
81
86
  label: String!
82
87
  tag: String!
83
88
  }
@@ -195,6 +200,10 @@ type AccessRoleValidatedResponse {
195
200
  }
196
201
 
197
202
  type AccessTag {
203
+ """
204
+ Extra context for the tag, such as the other titles a program has gone by in different periods.
205
+ """
206
+ description: String
198
207
  label: String!
199
208
  value: String!
200
209
  }
@@ -379,7 +388,11 @@ type AppRequest {
379
388
  """Actions the user can take on this app request."""
380
389
  actions: AppRequestActions!
381
390
  applicant: AccessUser!
382
- applications: [Application!]!
391
+
392
+ """
393
+ The applications on this request, one per program. Pass programKeys to receive only some of them - a screen that shows one program should not download every program's requirement and prompt tree.
394
+ """
395
+ applications(programKeys: [String!]): [Application!]!
383
396
 
384
397
  """
385
398
  True when at least one reachable prompt anywhere on this request has been invalidated and must be re-answered. Status and phase are computed from the answers on file, so use this flag to explain that the request is held back awaiting a correction.
@@ -591,7 +604,27 @@ input AppRequestActivityFilters {
591
604
  users: [ID!]
592
605
  }
593
606
 
607
+ """
608
+ Applicant counts for a set of appRequests. A request is a returning application when its applicant also submitted a request in an earlier period (by open date); otherwise it is a first-time application. Unsubmitted drafts in earlier periods do not count.
609
+ """
610
+ type AppRequestApplicantCounts {
611
+ """
612
+ Matching appRequests whose applicant submitted nothing in any earlier period.
613
+ """
614
+ firstTime: Int!
615
+
616
+ """
617
+ Matching appRequests whose applicant also submitted a request in an earlier period.
618
+ """
619
+ returning: Int!
620
+ }
621
+
594
622
  input AppRequestFilter {
623
+ """
624
+ Only return appRequests with at least one application matching one of the given entries (OR). When programKeys is also given, the same application must match both.
625
+ """
626
+ applicationStatuses: [ApplicationStatusFilter!]
627
+
595
628
  """
596
629
  true -> only return appRequests that are closed. false -> only return appRequests that are open. null -> return all appRequests.
597
630
  """
@@ -629,6 +662,11 @@ input AppRequestFilter {
629
662
  own: Boolean
630
663
  periodIds: [ID!]
631
664
 
665
+ """
666
+ Only return appRequests that have an application for one of the given programs. When applicationStatuses is also given, the same application must match both.
667
+ """
668
+ programKeys: [ID!]
669
+
632
670
  """
633
671
  Only return appRequests where at least one application is in one of the given rescinded states. Rescinding is per-application, so this is independent of the appRequest status.
634
672
  """
@@ -864,6 +902,11 @@ type Application {
864
902
  A prose summary of the applicant-side requirements of the program this application is for. Intended to be shown alongside statusReason when the application becomes ineligible before submission, since an applicant disqualified early may never have seen the program's prompts and the statusReason alone lacks context.
865
903
  """
866
904
  eligibilityDescription: String
905
+
906
+ """
907
+ True when the program sets showIneligiblePreSubmit: false and this application is hidden by it: ineligible because of an applicant requirement, and that ineligibility arose before submission (the request is unsubmitted, or the application was already ineligible when it was submitted). Only the applicant ever receives a hidden application, so they can still change the answers that disqualified them; UIs should leave it out of program lists.
908
+ """
909
+ hiddenIneligiblePreSubmit: Boolean!
867
910
  id: ID!
868
911
 
869
912
  """
@@ -1128,7 +1171,7 @@ enum ApplicationStatus {
1128
1171
  ACCEPTED
1129
1172
 
1130
1173
  """
1131
- All application requirements up to and including WORKFLOW_BLOCKING requirements are resolving as MET (or NOT_APPLICABLE or WARNING). If there is an acceptance phase, the acceptance is still pending.
1174
+ Every requirement the current phase evaluates is resolving as MET (or NOT_APPLICABLE or WARNING). Before submission that is only the applicant requirements (PREQUAL, QUALIFICATION, POSTQUAL), so ELIGIBLE means nothing so far disqualifies - not that the program has been approved. After submission it covers all requirements up to and including WORKFLOW_BLOCKING. If there is an acceptance phase, the acceptance is still pending.
1132
1175
  """
1133
1176
  ELIGIBLE
1134
1177
 
@@ -1153,6 +1196,17 @@ enum ApplicationStatus {
1153
1196
  RESCINDED
1154
1197
  }
1155
1198
 
1199
+ """
1200
+ Matches an application by its stored status and, optionally, its rescind state. Status is the stored computedStatus, so RESCINDED is not a valid value here - express it as status ELIGIBLE or ACCEPTED with rescindedStatus RESCINDED.
1201
+ """
1202
+ input ApplicationStatusFilter {
1203
+ """
1204
+ When omitted, matches applications currently in the given status (not rescinded). When given, matches only applications in exactly that rescind state.
1205
+ """
1206
+ rescindedStatus: ApplicationRescindedStatus
1207
+ status: ApplicationStatus!
1208
+ }
1209
+
1156
1210
  type Category {
1157
1211
  """
1158
1212
  This is indexed name of the category. Categories are indexed to allow for quick filtering of a list of items. e.g. institutionalRoles
@@ -1195,7 +1249,9 @@ type Configuration {
1195
1249
  data: JsonData!
1196
1250
  fetchedData: JsonData
1197
1251
 
1198
- """The key being configured. Could be a requirement or prompt key."""
1252
+ """
1253
+ The key being configured. Could be a requirement, prompt, or program key. A program's configuration holds its per-period title and navTitle overrides.
1254
+ """
1199
1255
  key: String!
1200
1256
  }
1201
1257
 
@@ -1274,22 +1330,26 @@ type IndexValue {
1274
1330
  }
1275
1331
 
1276
1332
  enum IneligiblePhases {
1277
- """The application became ineligible in the acceptance phase."""
1333
+ """The application was disqualified by an ACCEPTANCE requirement."""
1278
1334
  ACCEPTANCE
1279
1335
 
1280
- """The application became ineligible in the approval phase."""
1336
+ """The application was disqualified by an APPROVAL requirement."""
1281
1337
  APPROVAL
1282
1338
 
1283
- """The application became ineligible in the pre-approval phase."""
1339
+ """The application was disqualified by a PREAPPROVAL requirement."""
1284
1340
  PREAPPROVAL
1285
1341
 
1286
- """The application became ineligible in the pre-qualification phase."""
1342
+ """
1343
+ The application was disqualified by a PREQUAL requirement. Names the type of requirement that failed, not when it failed - a reviewer changing an applicant answer after submission can also produce this.
1344
+ """
1287
1345
  PREQUAL
1288
1346
 
1289
- """The application became ineligible in the qualification phase."""
1347
+ """
1348
+ The application was disqualified by a QUALIFICATION or POSTQUAL requirement. Names the type of requirement that failed, not when it failed - a reviewer changing an applicant answer after submission can also produce this.
1349
+ """
1290
1350
  QUALIFICATION
1291
1351
 
1292
- """The application became ineligible during blocking workflow."""
1352
+ """The application was disqualified by a blocking workflow requirement."""
1293
1353
  WORKFLOW
1294
1354
  }
1295
1355
 
@@ -1470,7 +1530,9 @@ type Mutation {
1470
1530
  roleUpdate(role: AccessRoleInput!, roleId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
1471
1531
  roleUpdateGrant(grant: AccessRoleGrantUpdate!, grantId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
1472
1532
 
1473
- """Submit the app request."""
1533
+ """
1534
+ Submit the app request. Applications whose program has no reviewer questions (no PREAPPROVAL or APPROVAL requirements) advance on their own into their first blocking workflow stage or to REVIEW_COMPLETE; when nothing is left to review, the review is completed automatically as well. Applications ruled out before submission (PREQUAL or QUALIFICATION) do not hold that back.
1535
+ """
1474
1536
  submitAppRequest(appRequestId: ID!): ValidatedAppRequestResponse!
1475
1537
 
1476
1538
  """Toggle an existing note's persistent status."""
@@ -1684,6 +1746,11 @@ type PeriodProgram {
1684
1746
  """A brief description of the program, written for applicants."""
1685
1747
  applicantDescription: String
1686
1748
 
1749
+ """
1750
+ The configuration for this program in the period, which holds its title and navTitle overrides.
1751
+ """
1752
+ configuration: Configuration!
1753
+
1687
1754
  """
1688
1755
  A prose summary of the applicant-side requirements of the program. Intended to be shown to applicants who become ineligible before submission, since they may never have seen the program's prompts.
1689
1756
  """
@@ -1852,6 +1919,16 @@ type Query {
1852
1919
  id: String!
1853
1920
  paged: Pagination
1854
1921
  ): [AppRequestActivity!]!
1922
+
1923
+ """
1924
+ The distinct action verbs that appear in the activity log for the associated app request, sorted alphabetically.
1925
+ """
1926
+ appRequestActivityActions(id: String!): [String!]!
1927
+
1928
+ """
1929
+ Everyone who appears in the activity log for the associated app request, as the user that performed an activity or as the admin impersonating them.
1930
+ """
1931
+ appRequestActivityUsers(id: String!): [AccessUser!]!
1855
1932
  appRequestIndexes(
1856
1933
  categories: [String!]
1857
1934
 
@@ -1867,6 +1944,11 @@ type Query {
1867
1944
  This is where you get information about the authorization system. Each grant will be associated with one of these controlGroups, one or more controls in the group, and an optional set of tags. The tags are used to limit the scope of the grant.
1868
1945
  """
1869
1946
  controlGroups: [AccessControlGroup!]!
1947
+
1948
+ """
1949
+ First-time vs returning applicant counts for the matching appRequests (see AppRequestApplicantCounts).
1950
+ """
1951
+ countAppRequestApplicants(filter: AppRequestFilter): AppRequestApplicantCounts!
1870
1952
  countAppRequests(filter: AppRequestFilter): Int!
1871
1953
  pageInfo: PaginationResponse!
1872
1954
  periods(filter: PeriodFilters): [Period!]!
@@ -110,6 +110,12 @@ export const isAppRequestActivity = (obj) => {
110
110
  throw new Error('__typename is missing in "isAppRequestActivity"');
111
111
  return AppRequestActivity_possibleTypes.includes(obj.__typename);
112
112
  };
113
+ const AppRequestApplicantCounts_possibleTypes = ['AppRequestApplicantCounts'];
114
+ export const isAppRequestApplicantCounts = (obj) => {
115
+ if (!obj?.__typename)
116
+ throw new Error('__typename is missing in "isAppRequestApplicantCounts"');
117
+ return AppRequestApplicantCounts_possibleTypes.includes(obj.__typename);
118
+ };
113
119
  const AppRequestIndexCategory_possibleTypes = ['AppRequestIndexCategory'];
114
120
  export const isAppRequestIndexCategory = (obj) => {
115
121
  if (!obj?.__typename)
@@ -33,6 +33,7 @@ declare const _default: {
33
33
  AccessGrantTag: {
34
34
  category: number[];
35
35
  categoryLabel: number[];
36
+ description: number[];
36
37
  label: number[];
37
38
  tag: number[];
38
39
  __typename: number[];
@@ -109,6 +110,7 @@ declare const _default: {
109
110
  __typename: number[];
110
111
  };
111
112
  AccessTag: {
113
+ description: number[];
112
114
  label: number[];
113
115
  value: number[];
114
116
  __typename: number[];
@@ -195,7 +197,9 @@ declare const _default: {
195
197
  AppRequest: {
196
198
  actions: number[];
197
199
  applicant: number[];
198
- applications: number[];
200
+ applications: (number | {
201
+ programKeys: (string | number)[];
202
+ })[];
199
203
  awaitingCorrection: number[];
200
204
  closedAt: number[];
201
205
  createdAt: number[];
@@ -266,7 +270,13 @@ declare const _default: {
266
270
  users: number[];
267
271
  __typename: number[];
268
272
  };
273
+ AppRequestApplicantCounts: {
274
+ firstTime: number[];
275
+ returning: number[];
276
+ __typename: number[];
277
+ };
269
278
  AppRequestFilter: {
279
+ applicationStatuses: number[];
270
280
  closed: number[];
271
281
  closedAfter: number[];
272
282
  closedBefore: number[];
@@ -278,6 +288,7 @@ declare const _default: {
278
288
  logins: number[];
279
289
  own: number[];
280
290
  periodIds: number[];
291
+ programKeys: number[];
281
292
  rescindedStatus: number[];
282
293
  reviewStarted: number[];
283
294
  search: number[];
@@ -318,6 +329,7 @@ declare const _default: {
318
329
  applicantDescription: number[];
319
330
  awaitingCorrection: number[];
320
331
  eligibilityDescription: number[];
332
+ hiddenIneligiblePreSubmit: number[];
321
333
  id: number[];
322
334
  ineligiblePhase: number[];
323
335
  navTitle: number[];
@@ -403,6 +415,11 @@ declare const _default: {
403
415
  };
404
416
  ApplicationRescindedStatus: {};
405
417
  ApplicationStatus: {};
418
+ ApplicationStatusFilter: {
419
+ rescindedStatus: number[];
420
+ status: number[];
421
+ __typename: number[];
422
+ };
406
423
  Boolean: {};
407
424
  Category: {
408
425
  category: number[];
@@ -714,6 +731,7 @@ declare const _default: {
714
731
  PeriodProgram: {
715
732
  actions: number[];
716
733
  applicantDescription: number[];
734
+ configuration: number[];
717
735
  eligibilityDescription: number[];
718
736
  enabled: number[];
719
737
  key: number[];
@@ -788,6 +806,12 @@ declare const _default: {
788
806
  id: (string | number)[];
789
807
  paged: number[];
790
808
  })[];
809
+ appRequestActivityActions: (number | {
810
+ id: (string | number)[];
811
+ })[];
812
+ appRequestActivityUsers: (number | {
813
+ id: (string | number)[];
814
+ })[];
791
815
  appRequestIndexes: (number | {
792
816
  categories: (string | number)[];
793
817
  for: number[];
@@ -800,6 +824,9 @@ declare const _default: {
800
824
  filter: number[];
801
825
  })[];
802
826
  controlGroups: number[];
827
+ countAppRequestApplicants: (number | {
828
+ filter: number[];
829
+ })[];
803
830
  countAppRequests: (number | {
804
831
  filter: number[];
805
832
  })[];