@reqquest/ui 1.10.0 → 1.12.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.
@@ -8,6 +8,8 @@ export type Scalars = {
8
8
  String: string;
9
9
  };
10
10
  export interface Access {
11
+ /** Current user is permitted to create announcements. */
12
+ createAnnouncement: Scalars['Boolean'];
11
13
  /** Current user may create a new app request on behalf of another user and should be shown the Create App Request button on the reviewer dashboard or main app request list. */
12
14
  createAppRequestOther: Scalars['Boolean'];
13
15
  /** Current user may create a new app request for themselves and should be shown the Create App Request button. */
@@ -16,6 +18,10 @@ export interface Access {
16
18
  createPeriod: Scalars['Boolean'];
17
19
  /** Current user is permitted to create new roles in the role management UI. */
18
20
  createRole: Scalars['Boolean'];
21
+ /** Current user is permitted to delete announcements. */
22
+ deleteAnnouncement: Scalars['Boolean'];
23
+ /** Current user is permitted to update announcements. */
24
+ updateAnnouncement: Scalars['Boolean'];
19
25
  /** The current user, if any. */
20
26
  user: (AccessUser | null);
21
27
  /** Current user is permitted to view the app request list. */
@@ -154,6 +160,27 @@ export interface AccessUserIdentifier {
154
160
  label: Scalars['String'];
155
161
  __typename: 'AccessUserIdentifier';
156
162
  }
163
+ /** A site-wide announcement shown to users, optionally limited to a date range. */
164
+ export interface Announcement {
165
+ /** The content of the announcement in HTML. */
166
+ body: Scalars['String'];
167
+ /** Whether the announcement has been turned on. A disabled announcement never displays, regardless of its date range. */
168
+ enabled: Scalars['Boolean'];
169
+ /** The announcement will not display after this date. Null means it displays until it is disabled. */
170
+ end: (Scalars['DateTime'] | null);
171
+ id: Scalars['ID'];
172
+ /** URL the announcement directs the user to for more information. */
173
+ link: (Scalars['String'] | null);
174
+ /** The text to display for the link. */
175
+ linkText: (Scalars['String'] | null);
176
+ /** The announcement will not display before this date. Null means it displays as soon as it is enabled. */
177
+ start: (Scalars['DateTime'] | null);
178
+ /** Short headline for the announcement. */
179
+ subject: Scalars['String'];
180
+ /** The type of announcement, toggleable or date range */
181
+ type: Scalars['String'];
182
+ __typename: 'Announcement';
183
+ }
157
184
  /** Represents a group of applications all being applied for at the same time. As part of the request, multiple applications will be created and either eliminated as ineligible or submitted for approval. */
158
185
  export interface AppRequest {
159
186
  /** Actions the user can take on this app request. */
@@ -295,6 +322,12 @@ export interface Application {
295
322
  /** The program key this application corresponds to. */
296
323
  programKey: Scalars['String'];
297
324
  requirements: ApplicationRequirement[];
325
+ /** The reason the application was rescinded */
326
+ rescindedReason: (Scalars['String'] | null);
327
+ /** The application rescinded status */
328
+ rescindedStatus: (ApplicationRescindedStatus | null);
329
+ /** The reason the application was restored after previously being rescinded */
330
+ restoredReason: (Scalars['String'] | null);
298
331
  status: ApplicationStatus;
299
332
  /** When one of the application's requirements is failing or throwing a warning, its reason will be copied here for convenience. If there is a warning and then later a failure, the failure reason will win. */
300
333
  statusReason: (Scalars['String'] | null);
@@ -308,6 +341,8 @@ export interface Application {
308
341
  }
309
342
  export interface ApplicationActions {
310
343
  advanceWorkflow: Scalars['Boolean'];
344
+ rescindApplication: Scalars['Boolean'];
345
+ restoreApplication: Scalars['Boolean'];
311
346
  reverseWorkflow: Scalars['Boolean'];
312
347
  viewAsReviewer: Scalars['Boolean'];
313
348
  __typename: 'ApplicationActions';
@@ -318,6 +353,7 @@ export interface ApplicationMetric {
318
353
  closed: Scalars['Float'];
319
354
  denied: Scalars['Float'];
320
355
  entries: ApplicationMetricEntry[];
356
+ rescinded: Scalars['Float'];
321
357
  started: Scalars['Float'];
322
358
  submitted: Scalars['Float'];
323
359
  toDecision: ApplicationMetricTiming;
@@ -361,6 +397,8 @@ export type ApplicationPhase = 'ACCEPTANCE' | 'APPROVAL' | 'COMPLETE' | 'PREAPPR
361
397
  /** The specific instance of a requirement on a particular application. Stores the status of the requirement, e.g. being satisfied or not. */
362
398
  export interface ApplicationRequirement {
363
399
  application: Application;
400
+ /** The prompt keys the requirement named as responsible for its current status. Used to attach status indicators to the specific answers at fault instead of every prompt the requirement consults. Null when the requirement did not name any, in which case all of its prompts are implicated. */
401
+ blame: (Scalars['String'][] | null);
364
402
  /** The configuration data for this requirement in the app request's period. */
365
403
  configurationData: (Scalars['JsonData'] | null);
366
404
  /** An internal description of the requirement. Probably not shown to users. */
@@ -385,6 +423,12 @@ export interface ApplicationRequirement {
385
423
  workflowStage: (PeriodWorkflowStage | null);
386
424
  __typename: 'ApplicationRequirement';
387
425
  }
426
+ /**
427
+ *
428
+ * The rescinded status of an application.
429
+ *
430
+ */
431
+ export type ApplicationRescindedStatus = 'RESCINDED' | 'RESTORED';
388
432
  /**
389
433
  *
390
434
  * The status of an application. This is usually a computed field, not stored in the database. The status
@@ -393,7 +437,7 @@ export interface ApplicationRequirement {
393
437
  * closure / cancellation.
394
438
  *
395
439
  */
396
- export type ApplicationStatus = 'ACCEPTED' | 'ELIGIBLE' | 'INELIGIBLE' | 'PENDING' | 'REJECTED';
440
+ export type ApplicationStatus = 'ACCEPTED' | 'ELIGIBLE' | 'INELIGIBLE' | 'PENDING' | 'REJECTED' | 'RESCINDED';
397
441
  export interface Category {
398
442
  /** This is indexed name of the category. Categories are indexed to allow for quick filtering of a list of items. e.g. institutionalRoles */
399
443
  category: Scalars['String'];
@@ -467,15 +511,23 @@ export interface Mutation {
467
511
  completeRequest: ValidatedAppRequestResponse;
468
512
  /** Make an offer on the app request. If all applications are ineligible, or if there are no acceptance requirements, the applications will advance to the non-blocking workflow, or absent that, be marked complete. */
469
513
  completeReview: ValidatedAppRequestResponse;
514
+ /** Create a new site-wide announcement. */
515
+ createAnnouncement: ValidatedAnnouncementResponse;
470
516
  /** Create a new app request. */
471
517
  createAppRequest: ValidatedAppRequestResponse;
472
518
  createPeriod: ValidatedPeriodResponse;
519
+ /** Delete an existing site-wide announcement. */
520
+ deleteAnnouncement: ValidatedResponse;
473
521
  /** Delete an existing note. */
474
522
  deleteNote: Scalars['Boolean'];
475
523
  deletePeriod: ValidatedResponse;
476
524
  markPeriodReviewed: ValidatedPeriodResponse;
477
525
  /** Reopen the app request. This is only available if the app request is in a state that allows reopening. */
478
526
  reopenAppRequest: ValidatedAppRequestResponse;
527
+ /** Rescinds the approved and/or accepted application. */
528
+ rescind: ValidatedAppRequestResponse;
529
+ /** Restores a previously rescinded application to its previous state. */
530
+ restore: ValidatedAppRequestResponse;
479
531
  /** Return the app request to the applicant phase. This is only available if the app request is in a state that allows returning. */
480
532
  returnToApplicant: ValidatedAppRequestResponse;
481
533
  /** If request is complete, undo and return to non-blocking workflow. */
@@ -496,6 +548,8 @@ export interface Mutation {
496
548
  submitAppRequest: ValidatedAppRequestResponse;
497
549
  /** Toggle an existing note's persistent status. */
498
550
  togglePersistence: ValidatedNoteResponse;
551
+ /** Update an existing site-wide announcement. */
552
+ updateAnnouncement: ValidatedAnnouncementResponse;
499
553
  updateConfiguration: ValidatedConfigurationResponse;
500
554
  /** Update the content of an existing note. */
501
555
  updateNote: ValidatedNoteResponse;
@@ -665,6 +719,8 @@ export interface Query {
665
719
  */
666
720
  access: Access;
667
721
  accessUsers: AccessUser[];
722
+ /** Retrieve site-wide announcements. Applicants only ever see currently active announcements; users with the Announcement view control see them all. */
723
+ announcements: Announcement[];
668
724
  /** 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. */
669
725
  appRequestActivity: AppRequestActivity[];
670
726
  appRequestIndexes: IndexCategory[];
@@ -735,6 +791,14 @@ export interface RoleActions {
735
791
  update: Scalars['Boolean'];
736
792
  __typename: 'RoleActions';
737
793
  }
794
+ export interface ValidatedAnnouncementResponse {
795
+ /** The created or updated announcement. Null when validateOnly was true or when validation errors prevented the operation. */
796
+ announcement: (Announcement | null);
797
+ messages: MutationMessage[];
798
+ /** True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings. */
799
+ success: Scalars['Boolean'];
800
+ __typename: 'ValidatedAnnouncementResponse';
801
+ }
738
802
  export interface ValidatedAppRequestResponse {
739
803
  appRequest: (AppRequest | null);
740
804
  messages: MutationMessage[];
@@ -771,6 +835,8 @@ export interface ValidatedResponse {
771
835
  __typename: 'ValidatedResponse';
772
836
  }
773
837
  export interface AccessGenqlSelection {
838
+ /** Current user is permitted to create announcements. */
839
+ createAnnouncement?: boolean | number;
774
840
  /** Current user may create a new app request on behalf of another user and should be shown the Create App Request button on the reviewer dashboard or main app request list. */
775
841
  createAppRequestOther?: boolean | number;
776
842
  /** Current user may create a new app request for themselves and should be shown the Create App Request button. */
@@ -779,6 +845,10 @@ export interface AccessGenqlSelection {
779
845
  createPeriod?: boolean | number;
780
846
  /** Current user is permitted to create new roles in the role management UI. */
781
847
  createRole?: boolean | number;
848
+ /** Current user is permitted to delete announcements. */
849
+ deleteAnnouncement?: boolean | number;
850
+ /** Current user is permitted to update announcements. */
851
+ updateAnnouncement?: boolean | number;
782
852
  /** The current user, if any. */
783
853
  user?: AccessUserGenqlSelection;
784
854
  /** Current user is permitted to view the app request list. */
@@ -991,6 +1061,54 @@ export interface AccessUserIdentifierInput {
991
1061
  id: Scalars['ID'];
992
1062
  label: Scalars['String'];
993
1063
  }
1064
+ /** A site-wide announcement shown to users, optionally limited to a date range. */
1065
+ export interface AnnouncementGenqlSelection {
1066
+ /** The content of the announcement in HTML. */
1067
+ body?: boolean | number;
1068
+ /** Whether the announcement has been turned on. A disabled announcement never displays, regardless of its date range. */
1069
+ enabled?: boolean | number;
1070
+ /** The announcement will not display after this date. Null means it displays until it is disabled. */
1071
+ end?: boolean | number;
1072
+ id?: boolean | number;
1073
+ /** URL the announcement directs the user to for more information. */
1074
+ link?: boolean | number;
1075
+ /** The text to display for the link. */
1076
+ linkText?: boolean | number;
1077
+ /** The announcement will not display before this date. Null means it displays as soon as it is enabled. */
1078
+ start?: boolean | number;
1079
+ /** Short headline for the announcement. */
1080
+ subject?: boolean | number;
1081
+ /** The type of announcement, toggleable or date range */
1082
+ type?: boolean | number;
1083
+ __typename?: boolean | number;
1084
+ __scalar?: boolean | number;
1085
+ }
1086
+ export interface AnnouncementFilters {
1087
+ /** Return only the announcements that should be displayed at this moment: enabled OR within their date range. */
1088
+ active?: (Scalars['Boolean'] | null);
1089
+ /** Return only enabled (true) or only disabled (false) announcements. */
1090
+ enabled?: (Scalars['Boolean'] | null);
1091
+ /** Return the announcements with these IDs. */
1092
+ ids?: (Scalars['ID'][] | null);
1093
+ }
1094
+ export interface AnnouncementUpdate {
1095
+ /** The content of the announcement in HTML. Unsafe markup is stripped on save. */
1096
+ body?: (Scalars['String'] | null);
1097
+ /** Whether the announcement has been turned on. */
1098
+ enabled?: (Scalars['Boolean'] | null);
1099
+ /** The announcement will not display after this date. Null means it displays until it is disabled. */
1100
+ end?: (Scalars['DateTime'] | null);
1101
+ /** URL the announcement directs the user to for more information. */
1102
+ link?: (Scalars['String'] | null);
1103
+ /** The text to display for the link. Required when a link is given. */
1104
+ linkText?: (Scalars['String'] | null);
1105
+ /** The announcement will not display before this date. Null means it displays as soon as it is enabled. */
1106
+ start?: (Scalars['DateTime'] | null);
1107
+ /** Short headline for the announcement. */
1108
+ subject?: (Scalars['String'] | null);
1109
+ /** The type of announcement, toggleable or date range */
1110
+ type?: (Scalars['Boolean'] | null);
1111
+ }
994
1112
  /** Represents a group of applications all being applied for at the same time. As part of the request, multiple applications will be created and either eliminated as ineligible or submitted for approval. */
995
1113
  export interface AppRequestGenqlSelection {
996
1114
  /** Actions the user can take on this app request. */
@@ -1145,6 +1263,8 @@ export interface AppRequestFilter {
1145
1263
  /** Only return appRequests that are owned by the current user. */
1146
1264
  own?: (Scalars['Boolean'] | null);
1147
1265
  periodIds?: (Scalars['ID'][] | null);
1266
+ /** 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. */
1267
+ rescindedStatus?: (ApplicationRescindedStatus[] | null);
1148
1268
  /** 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. */
1149
1269
  reviewStarted?: (Scalars['Boolean'] | null);
1150
1270
  /** Search for appRequests that match this search term. This will do a prefix search across all fields that are indexed. */
@@ -1214,6 +1334,12 @@ export interface ApplicationGenqlSelection {
1214
1334
  /** The program key this application corresponds to. */
1215
1335
  programKey?: boolean | number;
1216
1336
  requirements?: ApplicationRequirementGenqlSelection;
1337
+ /** The reason the application was rescinded */
1338
+ rescindedReason?: boolean | number;
1339
+ /** The application rescinded status */
1340
+ rescindedStatus?: boolean | number;
1341
+ /** The reason the application was restored after previously being rescinded */
1342
+ restoredReason?: boolean | number;
1217
1343
  status?: boolean | number;
1218
1344
  /** When one of the application's requirements is failing or throwing a warning, its reason will be copied here for convenience. If there is a warning and then later a failure, the failure reason will win. */
1219
1345
  statusReason?: boolean | number;
@@ -1228,6 +1354,8 @@ export interface ApplicationGenqlSelection {
1228
1354
  }
1229
1355
  export interface ApplicationActionsGenqlSelection {
1230
1356
  advanceWorkflow?: boolean | number;
1357
+ rescindApplication?: boolean | number;
1358
+ restoreApplication?: boolean | number;
1231
1359
  reverseWorkflow?: boolean | number;
1232
1360
  viewAsReviewer?: boolean | number;
1233
1361
  __typename?: boolean | number;
@@ -1239,6 +1367,7 @@ export interface ApplicationMetricGenqlSelection {
1239
1367
  closed?: boolean | number;
1240
1368
  denied?: boolean | number;
1241
1369
  entries?: ApplicationMetricEntryGenqlSelection;
1370
+ rescinded?: boolean | number;
1242
1371
  started?: boolean | number;
1243
1372
  submitted?: boolean | number;
1244
1373
  toDecision?: ApplicationMetricTimingGenqlSelection;
@@ -1278,6 +1407,8 @@ export interface ApplicationMetricTimingGenqlSelection {
1278
1407
  /** The specific instance of a requirement on a particular application. Stores the status of the requirement, e.g. being satisfied or not. */
1279
1408
  export interface ApplicationRequirementGenqlSelection {
1280
1409
  application?: ApplicationGenqlSelection;
1410
+ /** The prompt keys the requirement named as responsible for its current status. Used to attach status indicators to the specific answers at fault instead of every prompt the requirement consults. Null when the requirement did not name any, in which case all of its prompts are implicated. */
1411
+ blame?: boolean | number;
1281
1412
  /** The configuration data for this requirement in the app request's period. */
1282
1413
  configurationData?: boolean | number;
1283
1414
  /** An internal description of the requirement. Probably not shown to users. */
@@ -1471,6 +1602,13 @@ export interface MutationGenqlSelection {
1471
1602
  appRequestId: Scalars['ID'];
1472
1603
  };
1473
1604
  });
1605
+ /** Create a new site-wide announcement. */
1606
+ createAnnouncement?: (ValidatedAnnouncementResponseGenqlSelection & {
1607
+ __args: {
1608
+ announcement: AnnouncementUpdate;
1609
+ validateOnly?: (Scalars['Boolean'] | null);
1610
+ };
1611
+ });
1474
1612
  /** Create a new app request. */
1475
1613
  createAppRequest?: (ValidatedAppRequestResponseGenqlSelection & {
1476
1614
  __args: {
@@ -1486,6 +1624,12 @@ export interface MutationGenqlSelection {
1486
1624
  validateOnly?: (Scalars['Boolean'] | null);
1487
1625
  };
1488
1626
  });
1627
+ /** Delete an existing site-wide announcement. */
1628
+ deleteAnnouncement?: (ValidatedResponseGenqlSelection & {
1629
+ __args: {
1630
+ announcementId: Scalars['ID'];
1631
+ };
1632
+ });
1489
1633
  /** Delete an existing note. */
1490
1634
  deleteNote?: {
1491
1635
  __args: {
@@ -1509,6 +1653,22 @@ export interface MutationGenqlSelection {
1509
1653
  appRequestId: Scalars['ID'];
1510
1654
  };
1511
1655
  });
1656
+ /** Rescinds the approved and/or accepted application. */
1657
+ rescind?: (ValidatedAppRequestResponseGenqlSelection & {
1658
+ __args: {
1659
+ applicationId: Scalars['ID'];
1660
+ reason: Scalars['String'];
1661
+ validateOnly?: (Scalars['Boolean'] | null);
1662
+ };
1663
+ });
1664
+ /** Restores a previously rescinded application to its previous state. */
1665
+ restore?: (ValidatedAppRequestResponseGenqlSelection & {
1666
+ __args: {
1667
+ applicationId: Scalars['ID'];
1668
+ reason: Scalars['String'];
1669
+ validateOnly?: (Scalars['Boolean'] | null);
1670
+ };
1671
+ });
1512
1672
  /** Return the app request to the applicant phase. This is only available if the app request is in a state that allows returning. */
1513
1673
  returnToApplicant?: (ValidatedAppRequestResponseGenqlSelection & {
1514
1674
  __args: {
@@ -1589,6 +1749,14 @@ export interface MutationGenqlSelection {
1589
1749
  noteId: Scalars['ID'];
1590
1750
  };
1591
1751
  });
1752
+ /** Update an existing site-wide announcement. */
1753
+ updateAnnouncement?: (ValidatedAnnouncementResponseGenqlSelection & {
1754
+ __args: {
1755
+ announcement: AnnouncementUpdate;
1756
+ announcementId: Scalars['ID'];
1757
+ validateOnly?: (Scalars['Boolean'] | null);
1758
+ };
1759
+ });
1592
1760
  updateConfiguration?: (ValidatedConfigurationResponseGenqlSelection & {
1593
1761
  __args: {
1594
1762
  data: Scalars['JsonData'];
@@ -1848,6 +2016,12 @@ export interface QueryGenqlSelection {
1848
2016
  paged?: (Pagination | null);
1849
2017
  };
1850
2018
  });
2019
+ /** Retrieve site-wide announcements. Applicants only ever see currently active announcements; users with the Announcement view control see them all. */
2020
+ announcements?: (AnnouncementGenqlSelection & {
2021
+ __args?: {
2022
+ filter?: (AnnouncementFilters | null);
2023
+ };
2024
+ });
1851
2025
  /** 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. */
1852
2026
  appRequestActivity?: (AppRequestActivityGenqlSelection & {
1853
2027
  __args: {
@@ -1994,6 +2168,15 @@ export interface RoleActionsGenqlSelection {
1994
2168
  __typename?: boolean | number;
1995
2169
  __scalar?: boolean | number;
1996
2170
  }
2171
+ export interface ValidatedAnnouncementResponseGenqlSelection {
2172
+ /** The created or updated announcement. Null when validateOnly was true or when validation errors prevented the operation. */
2173
+ announcement?: AnnouncementGenqlSelection;
2174
+ messages?: MutationMessageGenqlSelection;
2175
+ /** True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings. */
2176
+ success?: boolean | number;
2177
+ __typename?: boolean | number;
2178
+ __scalar?: boolean | number;
2179
+ }
1997
2180
  export interface ValidatedAppRequestResponseGenqlSelection {
1998
2181
  appRequest?: AppRequestGenqlSelection;
1999
2182
  messages?: MutationMessageGenqlSelection;
@@ -2076,6 +2259,9 @@ export declare const isAccessUser: (obj?: {
2076
2259
  export declare const isAccessUserIdentifier: (obj?: {
2077
2260
  __typename?: any;
2078
2261
  } | null) => obj is AccessUserIdentifier;
2262
+ export declare const isAnnouncement: (obj?: {
2263
+ __typename?: any;
2264
+ } | null) => obj is Announcement;
2079
2265
  export declare const isAppRequest: (obj?: {
2080
2266
  __typename?: any;
2081
2267
  } | null) => obj is AppRequest;
@@ -2178,6 +2364,9 @@ export declare const isRequirementPromptActions: (obj?: {
2178
2364
  export declare const isRoleActions: (obj?: {
2179
2365
  __typename?: any;
2180
2366
  } | null) => obj is RoleActions;
2367
+ export declare const isValidatedAnnouncementResponse: (obj?: {
2368
+ __typename?: any;
2369
+ } | null) => obj is ValidatedAnnouncementResponse;
2181
2370
  export declare const isValidatedAppRequestResponse: (obj?: {
2182
2371
  __typename?: any;
2183
2372
  } | null) => obj is ValidatedAppRequestResponse;
@@ -2239,12 +2428,17 @@ export declare const enumApplicationPhase: {
2239
2428
  WORKFLOW_BLOCKING: "WORKFLOW_BLOCKING";
2240
2429
  WORKFLOW_NONBLOCKING: "WORKFLOW_NONBLOCKING";
2241
2430
  };
2431
+ export declare const enumApplicationRescindedStatus: {
2432
+ RESCINDED: "RESCINDED";
2433
+ RESTORED: "RESTORED";
2434
+ };
2242
2435
  export declare const enumApplicationStatus: {
2243
2436
  ACCEPTED: "ACCEPTED";
2244
2437
  ELIGIBLE: "ELIGIBLE";
2245
2438
  INELIGIBLE: "INELIGIBLE";
2246
2439
  PENDING: "PENDING";
2247
2440
  REJECTED: "REJECTED";
2441
+ RESCINDED: "RESCINDED";
2248
2442
  };
2249
2443
  export declare const enumIneligiblePhases: {
2250
2444
  ACCEPTANCE: "ACCEPTANCE";
@@ -1,4 +1,7 @@
1
1
  type Access {
2
+ """Current user is permitted to create announcements."""
3
+ createAnnouncement: Boolean!
4
+
2
5
  """
3
6
  Current user may create a new app request on behalf of another user and should be shown the Create App Request button on the reviewer dashboard or main app request list.
4
7
  """
@@ -19,6 +22,12 @@ type Access {
19
22
  """
20
23
  createRole: Boolean!
21
24
 
25
+ """Current user is permitted to delete announcements."""
26
+ deleteAnnouncement: Boolean!
27
+
28
+ """Current user is permitted to update announcements."""
29
+ updateAnnouncement: Boolean!
30
+
22
31
  """The current user, if any."""
23
32
  user: AccessUser
24
33
 
@@ -276,6 +285,87 @@ input AccessUserIdentifierInput {
276
285
  label: String!
277
286
  }
278
287
 
288
+ """
289
+ A site-wide announcement shown to users, optionally limited to a date range.
290
+ """
291
+ type Announcement {
292
+ """The content of the announcement in HTML."""
293
+ body: String!
294
+
295
+ """
296
+ Whether the announcement has been turned on. A disabled announcement never displays, regardless of its date range.
297
+ """
298
+ enabled: Boolean!
299
+
300
+ """
301
+ The announcement will not display after this date. Null means it displays until it is disabled.
302
+ """
303
+ end: DateTime
304
+ id: ID!
305
+
306
+ """URL the announcement directs the user to for more information."""
307
+ link: String
308
+
309
+ """The text to display for the link."""
310
+ linkText: String
311
+
312
+ """
313
+ The announcement will not display before this date. Null means it displays as soon as it is enabled.
314
+ """
315
+ start: DateTime
316
+
317
+ """Short headline for the announcement."""
318
+ subject: String!
319
+
320
+ """The type of announcement, toggleable or date range"""
321
+ type: String!
322
+ }
323
+
324
+ input AnnouncementFilters {
325
+ """
326
+ Return only the announcements that should be displayed at this moment: enabled OR within their date range.
327
+ """
328
+ active: Boolean
329
+
330
+ """Return only enabled (true) or only disabled (false) announcements."""
331
+ enabled: Boolean
332
+
333
+ """Return the announcements with these IDs."""
334
+ ids: [ID!]
335
+ }
336
+
337
+ input AnnouncementUpdate {
338
+ """
339
+ The content of the announcement in HTML. Unsafe markup is stripped on save.
340
+ """
341
+ body: String
342
+
343
+ """Whether the announcement has been turned on."""
344
+ enabled: Boolean = false
345
+
346
+ """
347
+ The announcement will not display after this date. Null means it displays until it is disabled.
348
+ """
349
+ end: DateTime
350
+
351
+ """URL the announcement directs the user to for more information."""
352
+ link: String
353
+
354
+ """The text to display for the link. Required when a link is given."""
355
+ linkText: String
356
+
357
+ """
358
+ The announcement will not display before this date. Null means it displays as soon as it is enabled.
359
+ """
360
+ start: DateTime
361
+
362
+ """Short headline for the announcement."""
363
+ subject: String
364
+
365
+ """The type of announcement, toggleable or date range"""
366
+ type: Boolean
367
+ }
368
+
279
369
  """
280
370
  Represents a group of applications all being applied for at the same time. As part of the request, multiple applications will be created and either eliminated as ineligible or submitted for approval.
281
371
  """
@@ -533,6 +623,11 @@ input AppRequestFilter {
533
623
  own: Boolean
534
624
  periodIds: [ID!]
535
625
 
626
+ """
627
+ 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.
628
+ """
629
+ rescindedStatus: [ApplicationRescindedStatus!]
630
+
536
631
  """
537
632
  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.
538
633
  """
@@ -791,6 +886,17 @@ type Application {
791
886
  """The program key this application corresponds to."""
792
887
  programKey: String!
793
888
  requirements: [ApplicationRequirement!]!
889
+
890
+ """The reason the application was rescinded"""
891
+ rescindedReason: String
892
+
893
+ """The application rescinded status"""
894
+ rescindedStatus: ApplicationRescindedStatus
895
+
896
+ """
897
+ The reason the application was restored after previously being rescinded
898
+ """
899
+ restoredReason: String
794
900
  status: ApplicationStatus!
795
901
 
796
902
  """
@@ -814,6 +920,8 @@ type Application {
814
920
 
815
921
  type ApplicationActions {
816
922
  advanceWorkflow: Boolean!
923
+ rescindApplication: Boolean!
924
+ restoreApplication: Boolean!
817
925
  reverseWorkflow: Boolean!
818
926
  viewAsReviewer: Boolean!
819
927
  }
@@ -824,6 +932,7 @@ type ApplicationMetric {
824
932
  closed: Float!
825
933
  denied: Float!
826
934
  entries: [ApplicationMetricEntry!]!
935
+ rescinded: Float!
827
936
  started: Float!
828
937
  submitted: Float!
829
938
  toDecision: ApplicationMetricTiming!
@@ -936,6 +1045,11 @@ The specific instance of a requirement on a particular application. Stores the s
936
1045
  type ApplicationRequirement {
937
1046
  application: Application!
938
1047
 
1048
+ """
1049
+ The prompt keys the requirement named as responsible for its current status. Used to attach status indicators to the specific answers at fault instead of every prompt the requirement consults. Null when the requirement did not name any, in which case all of its prompts are implicated.
1050
+ """
1051
+ blame: [String!]
1052
+
939
1053
  """
940
1054
  The configuration data for this requirement in the app request's period.
941
1055
  """
@@ -987,6 +1101,19 @@ type ApplicationRequirement {
987
1101
  workflowStage: PeriodWorkflowStage
988
1102
  }
989
1103
 
1104
+ "\n The rescinded status of an application.\n "
1105
+ enum ApplicationRescindedStatus {
1106
+ """
1107
+ The application has been rescinded (pulled back from applicant) post approval.
1108
+ """
1109
+ RESCINDED
1110
+
1111
+ """
1112
+ The application, which was previously rescinded, has now been restored to its state prior to rescinding.
1113
+ """
1114
+ RESTORED
1115
+ }
1116
+
990
1117
  "\n The status of an application. This is usually a computed field, not stored in the database. The status\n is computed based on the status of the appRequest and of the requirements for the program. If\n the appRequest is CLOSED or CANCELLED, this status will remain frozen wherever it was before the\n closure / cancellation.\n "
991
1118
  enum ApplicationStatus {
992
1119
  """
@@ -1013,6 +1140,11 @@ enum ApplicationStatus {
1013
1140
  An offer was made to the applicant and at least one ACCEPTANCE requirement is not met (the applicant rejected the offer).
1014
1141
  """
1015
1142
  REJECTED
1143
+
1144
+ """
1145
+ The application has been rescinded (pulled back from applicant) post approval.
1146
+ """
1147
+ RESCINDED
1016
1148
  }
1017
1149
 
1018
1150
  type Category {
@@ -1277,10 +1409,16 @@ type Mutation {
1277
1409
  """
1278
1410
  completeReview(appRequestId: ID!): ValidatedAppRequestResponse!
1279
1411
 
1412
+ """Create a new site-wide announcement."""
1413
+ createAnnouncement(announcement: AnnouncementUpdate!, validateOnly: Boolean): ValidatedAnnouncementResponse!
1414
+
1280
1415
  """Create a new app request."""
1281
1416
  createAppRequest(login: String!, periodId: ID!, validateOnly: Boolean): ValidatedAppRequestResponse!
1282
1417
  createPeriod(copyPeriodId: String, period: PeriodUpdate!, validateOnly: Boolean): ValidatedPeriodResponse!
1283
1418
 
1419
+ """Delete an existing site-wide announcement."""
1420
+ deleteAnnouncement(announcementId: ID!): ValidatedResponse!
1421
+
1284
1422
  """Delete an existing note."""
1285
1423
  deleteNote(noteId: ID!): Boolean!
1286
1424
  deletePeriod(periodId: ID!): ValidatedResponse!
@@ -1291,6 +1429,12 @@ type Mutation {
1291
1429
  """
1292
1430
  reopenAppRequest(appRequestId: ID!): ValidatedAppRequestResponse!
1293
1431
 
1432
+ """Rescinds the approved and/or accepted application."""
1433
+ rescind(applicationId: ID!, reason: String!, validateOnly: Boolean): ValidatedAppRequestResponse!
1434
+
1435
+ """Restores a previously rescinded application to its previous state."""
1436
+ restore(applicationId: ID!, reason: String!, validateOnly: Boolean): ValidatedAppRequestResponse!
1437
+
1294
1438
  """
1295
1439
  Return the app request to the applicant phase. This is only available if the app request is in a state that allows returning.
1296
1440
  """
@@ -1325,6 +1469,9 @@ type Mutation {
1325
1469
 
1326
1470
  """Toggle an existing note's persistent status."""
1327
1471
  togglePersistence(noteId: ID!): ValidatedNoteResponse!
1472
+
1473
+ """Update an existing site-wide announcement."""
1474
+ updateAnnouncement(announcement: AnnouncementUpdate!, announcementId: ID!, validateOnly: Boolean): ValidatedAnnouncementResponse!
1328
1475
  updateConfiguration(data: JsonData!, key: String!, periodId: ID!, validateOnly: Boolean): ValidatedConfigurationResponse!
1329
1476
 
1330
1477
  """Update the content of an existing note."""
@@ -1683,6 +1830,11 @@ type Query {
1683
1830
  access: Access!
1684
1831
  accessUsers(filter: AccessUserFilter, paged: Pagination): [AccessUser!]!
1685
1832
 
1833
+ """
1834
+ Retrieve site-wide announcements. Applicants only ever see currently active announcements; users with the Announcement view control see them all.
1835
+ """
1836
+ announcements(filter: AnnouncementFilters): [Announcement!]!
1837
+
1686
1838
  """
1687
1839
  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.
1688
1840
  """
@@ -1922,6 +2074,19 @@ type RoleActions {
1922
2074
  update: Boolean!
1923
2075
  }
1924
2076
 
2077
+ type ValidatedAnnouncementResponse {
2078
+ """
2079
+ The created or updated announcement. Null when validateOnly was true or when validation errors prevented the operation.
2080
+ """
2081
+ announcement: Announcement
2082
+ messages: [MutationMessage!]!
2083
+
2084
+ """
2085
+ True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings.
2086
+ """
2087
+ success: Boolean!
2088
+ }
2089
+
1925
2090
  type ValidatedAppRequestResponse {
1926
2091
  appRequest: AppRequest
1927
2092
  messages: [MutationMessage!]!