@reqquest/ui 1.0.1 → 1.1.1
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.
- package/README.md +8 -0
- package/dist/api.js +670 -129
- package/dist/components/AppRequestCard.svelte +172 -0
- package/dist/components/ApplicantProgramList.svelte +184 -0
- package/dist/components/ApplicantProgramListTooltip.svelte +22 -0
- package/dist/components/ApplicantPromptPage.svelte +88 -0
- package/dist/components/ApplicationDetailsView.svelte +307 -0
- package/dist/components/ButtonLoadingIcon.svelte +2 -1
- package/dist/components/FieldCardCheckbox.svelte +328 -0
- package/dist/components/FieldCardRadio.svelte +320 -0
- package/dist/components/IntroPanel.svelte +41 -0
- package/dist/components/PeriodPanel.svelte +100 -0
- package/dist/components/QuestionnairePrompt.svelte +36 -0
- package/dist/components/RenderDisplayComponent.svelte +38 -0
- package/dist/components/ReviewerList.svelte +93 -0
- package/dist/components/StatusMessageList.svelte +35 -0
- package/dist/components/WarningIconYellow.svelte +20 -0
- package/dist/components/index.js +11 -0
- package/dist/components/types.js +1 -0
- package/dist/csv.js +21 -0
- package/dist/index.js +2 -1
- package/dist/status-utils.js +343 -0
- package/dist/typed-client/schema.graphql +619 -134
- package/dist/typed-client/schema.js +87 -23
- package/dist/typed-client/types.js +993 -482
- package/dist/util.js +12 -1
- package/package.json +39 -40
- package/dist/api.d.ts +0 -595
- package/dist/components/ButtonLoadingIcon.svelte.d.ts +0 -18
- package/dist/components/index.d.ts +0 -1
- package/dist/index.d.ts +0 -5
- package/dist/registry.d.ts +0 -138
- package/dist/stores/IStateStore.d.ts +0 -5
- package/dist/typed-client/index.d.ts +0 -25
- package/dist/typed-client/runtime/batcher.d.ts +0 -105
- package/dist/typed-client/runtime/createClient.d.ts +0 -17
- package/dist/typed-client/runtime/error.d.ts +0 -18
- package/dist/typed-client/runtime/fetcher.d.ts +0 -10
- package/dist/typed-client/runtime/generateGraphqlOperation.d.ts +0 -30
- package/dist/typed-client/runtime/index.d.ts +0 -11
- package/dist/typed-client/runtime/linkTypeMap.d.ts +0 -9
- package/dist/typed-client/runtime/typeSelection.d.ts +0 -28
- package/dist/typed-client/runtime/types.d.ts +0 -55
- package/dist/typed-client/schema.d.ts +0 -1483
- package/dist/typed-client/types.d.ts +0 -540
- package/dist/util.d.ts +0 -2
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
type Access {
|
|
2
2
|
"""
|
|
3
|
-
Current user may create a new app request
|
|
3
|
+
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
4
|
"""
|
|
5
|
-
|
|
5
|
+
createAppRequestOther: Boolean!
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
Current user may create a new app request for themselves and should be shown the Create App Request button.
|
|
9
|
+
"""
|
|
10
|
+
createAppRequestSelf: Boolean!
|
|
6
11
|
|
|
7
12
|
"""
|
|
8
13
|
Current user is permitted to create new periods in the period management UI.
|
|
@@ -14,6 +19,9 @@ type Access {
|
|
|
14
19
|
"""
|
|
15
20
|
createRole: Boolean!
|
|
16
21
|
|
|
22
|
+
"""The current user, if any."""
|
|
23
|
+
user: AccessUser
|
|
24
|
+
|
|
17
25
|
"""Current user is permitted to view the app request list."""
|
|
18
26
|
viewAppRequestList: Boolean!
|
|
19
27
|
|
|
@@ -35,6 +43,25 @@ type AccessControl {
|
|
|
35
43
|
name: String!
|
|
36
44
|
}
|
|
37
45
|
|
|
46
|
+
type AccessControlGroup {
|
|
47
|
+
"""
|
|
48
|
+
A list of all possible controls for this controlGroup. Use this to populate the control dropdown when creating a grant.
|
|
49
|
+
"""
|
|
50
|
+
controls: [AccessControl!]!
|
|
51
|
+
|
|
52
|
+
"""
|
|
53
|
+
A longer explanation of the control group for display in the role management interface.
|
|
54
|
+
"""
|
|
55
|
+
description: String
|
|
56
|
+
name: String!
|
|
57
|
+
tags: [AccessTagCategory!]!
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
A slightly longer version of the control group's name, for display in the role management interface.
|
|
61
|
+
"""
|
|
62
|
+
title: String!
|
|
63
|
+
}
|
|
64
|
+
|
|
38
65
|
type AccessGrantTag {
|
|
39
66
|
category: String!
|
|
40
67
|
categoryLabel: String!
|
|
@@ -50,7 +77,7 @@ type AccessRole {
|
|
|
50
77
|
"""
|
|
51
78
|
description: String
|
|
52
79
|
grants: [AccessRoleGrant!]!
|
|
53
|
-
groups: [
|
|
80
|
+
groups: [AccessRoleGroup!]!
|
|
54
81
|
id: ID!
|
|
55
82
|
name: String!
|
|
56
83
|
scope: String
|
|
@@ -66,13 +93,13 @@ input AccessRoleFilter {
|
|
|
66
93
|
type AccessRoleGrant {
|
|
67
94
|
actions: AccessRoleGrantActions!
|
|
68
95
|
|
|
69
|
-
"\n If true, this grant allows the action specified by the selected controls. If false, it removes\n the controls.\n\n Removing a control only happens within the context of a single role. If another role grants the\n same control, the action is allowed. This is more of an exception system than a denial\n system. So you can do something like add the \"view\" control to the \"movie\"
|
|
96
|
+
"\n If true, this grant allows the action specified by the selected controls. If false, it removes\n the controls.\n\n Removing a control only happens within the context of a single role. If another role grants the\n same control, the action is allowed. This is more of an exception system than a denial\n system. So you can do something like add the \"view\" control to the \"movie\" control group in one\n grant, and then in a second grant in the same role, remove it from \"The Princess Bride\". Now you\n have a role that grants \"view\" on all movies _except_ The Princess Bride. If the user has another role\n that grants \"view\" on The Princess Bride (or on all movies), they can view it based on that other role.\n "
|
|
70
97
|
allow: Boolean!
|
|
98
|
+
|
|
99
|
+
"""The group this control belongs to. e.g. Reviewer - Review Phase"""
|
|
100
|
+
controlGroup: AccessControlGroup!
|
|
71
101
|
controls: [String!]!
|
|
72
102
|
id: ID!
|
|
73
|
-
|
|
74
|
-
"""The type of subject this grant applies to, e.g. "movie"."""
|
|
75
|
-
subjectType: AccessSubjectType!
|
|
76
103
|
tags: [AccessGrantTag!]!
|
|
77
104
|
}
|
|
78
105
|
|
|
@@ -83,12 +110,12 @@ type AccessRoleGrantActions {
|
|
|
83
110
|
|
|
84
111
|
input AccessRoleGrantCreate {
|
|
85
112
|
allow: Boolean!
|
|
113
|
+
controlGroup: String
|
|
86
114
|
|
|
87
115
|
"""
|
|
88
|
-
A list of controls that are allowed or denied by this grant. Each
|
|
116
|
+
A list of controls that are allowed or denied by this grant. Each controlGroup has a list of available controls, available under Query.controlGroups.
|
|
89
117
|
"""
|
|
90
118
|
controls: [String!]
|
|
91
|
-
subjectType: String
|
|
92
119
|
|
|
93
120
|
"""
|
|
94
121
|
A list of tags to restrict a grant. For instance, if this is added to a grant on PromptAnswer-update, each tag refers to a subset of App Requests.
|
|
@@ -98,12 +125,12 @@ input AccessRoleGrantCreate {
|
|
|
98
125
|
|
|
99
126
|
input AccessRoleGrantUpdate {
|
|
100
127
|
allow: Boolean!
|
|
128
|
+
controlGroup: String
|
|
101
129
|
|
|
102
130
|
"""
|
|
103
|
-
A list of controls that are allowed or denied by this grant. Each
|
|
131
|
+
A list of controls that are allowed or denied by this grant. Each controlGroup has a list of available controls, available under Query.controlGroups.
|
|
104
132
|
"""
|
|
105
133
|
controls: [String!]
|
|
106
|
-
subjectType: String
|
|
107
134
|
|
|
108
135
|
"""
|
|
109
136
|
A list of tags to restrict a grant. For instance, if this is added to a grant on PromptAnswer-update, each tag refers to a subset of App Requests.
|
|
@@ -111,6 +138,25 @@ input AccessRoleGrantUpdate {
|
|
|
111
138
|
tags: [AccessTagInput!]
|
|
112
139
|
}
|
|
113
140
|
|
|
141
|
+
type AccessRoleGroup {
|
|
142
|
+
"""The date the group was added to a role."""
|
|
143
|
+
dateAdded: DateTime!
|
|
144
|
+
dateCreated: DateTime!
|
|
145
|
+
|
|
146
|
+
"""The name of the group. This should be unique even among all roleIds."""
|
|
147
|
+
groupName: String!
|
|
148
|
+
managers: [AccessRoleGroupManager!]!
|
|
149
|
+
roleId: ID!
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
type AccessRoleGroupManager {
|
|
153
|
+
"""The date the group was added to a role."""
|
|
154
|
+
email: String
|
|
155
|
+
|
|
156
|
+
"""The date the group was added to a role."""
|
|
157
|
+
fullname: String!
|
|
158
|
+
}
|
|
159
|
+
|
|
114
160
|
input AccessRoleInput {
|
|
115
161
|
"""
|
|
116
162
|
A description of the role. This is not used for anything, but can be useful for admins to understand what the role is trying to do.
|
|
@@ -135,25 +181,6 @@ type AccessRoleValidatedResponse {
|
|
|
135
181
|
success: Boolean!
|
|
136
182
|
}
|
|
137
183
|
|
|
138
|
-
type AccessSubjectType {
|
|
139
|
-
"""
|
|
140
|
-
A list of all possible controls for this subjectType. Use this to populate the control dropdown when creating a grant.
|
|
141
|
-
"""
|
|
142
|
-
controls: [AccessControl!]!
|
|
143
|
-
|
|
144
|
-
"""
|
|
145
|
-
A longer explanation of the subject type for display in the role management interface.
|
|
146
|
-
"""
|
|
147
|
-
description: String
|
|
148
|
-
name: String!
|
|
149
|
-
tags: [AccessTagCategory!]!
|
|
150
|
-
|
|
151
|
-
"""
|
|
152
|
-
A slightly longer version of the subject type's name, for display in the role management interface.
|
|
153
|
-
"""
|
|
154
|
-
title: String!
|
|
155
|
-
}
|
|
156
|
-
|
|
157
184
|
type AccessTag {
|
|
158
185
|
label: String!
|
|
159
186
|
value: String!
|
|
@@ -190,15 +217,36 @@ type AccessUser {
|
|
|
190
217
|
A JSON object containing any information about the user that the implementing application wants to store. Could be useful for constructing personalized UI.
|
|
191
218
|
"""
|
|
192
219
|
otherInfo: JsonData
|
|
193
|
-
roles: AccessRole!
|
|
220
|
+
roles: [AccessRole!]!
|
|
221
|
+
|
|
222
|
+
"""
|
|
223
|
+
True as long as the lookupUser.byLogins function still returns this user. False otherwise. Likely this user has been deactivated.
|
|
224
|
+
"""
|
|
225
|
+
stillValid: Boolean!
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
"""
|
|
229
|
+
A category and tag pair for an internal and external user related attributes. For example, [{ category: "institutionalRole", tags: ["STAFF", "STUDENT"] }, { category: "lastLogin", tags: ["2025-09-01T10:20:04"] }]
|
|
230
|
+
"""
|
|
231
|
+
input AccessUserCategoryInput {
|
|
232
|
+
category: ID!
|
|
233
|
+
tags: [ID!]!
|
|
194
234
|
}
|
|
195
235
|
|
|
196
236
|
input AccessUserFilter {
|
|
197
237
|
logins: [ID!]
|
|
198
238
|
|
|
239
|
+
"""
|
|
240
|
+
One to Many categories Filter, like a institutional role people may belong to.
|
|
241
|
+
"""
|
|
242
|
+
otherCategoriesByLabel: [AccessUserCategoryInput!]
|
|
243
|
+
|
|
199
244
|
"""Filter by identifiers aside from username, like an Employee ID."""
|
|
200
245
|
otherIdentifiers: [String!]
|
|
201
246
|
otherIdentifiersByLabel: [AccessUserIdentifierInput!]
|
|
247
|
+
|
|
248
|
+
"""Filter users by associated Application Roles"""
|
|
249
|
+
roles: [String!]
|
|
202
250
|
search: String
|
|
203
251
|
|
|
204
252
|
"""If true, only return the user that is currently logged in."""
|
|
@@ -230,16 +278,6 @@ Represents a group of applications all being applied for at the same time. As pa
|
|
|
230
278
|
type AppRequest {
|
|
231
279
|
"""Actions the user can take on this app request."""
|
|
232
280
|
actions: AppRequestActions!
|
|
233
|
-
|
|
234
|
-
"""
|
|
235
|
-
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.
|
|
236
|
-
"""
|
|
237
|
-
activity(
|
|
238
|
-
"""
|
|
239
|
-
Filters to apply to the activity log. This can be used to filter by action type, date range, etc.
|
|
240
|
-
"""
|
|
241
|
-
filters: AppRequestActivityFilters
|
|
242
|
-
): [AppRequestActivity!]!
|
|
243
281
|
applicant: AccessUser!
|
|
244
282
|
applications: [Application!]!
|
|
245
283
|
|
|
@@ -247,6 +285,7 @@ type AppRequest {
|
|
|
247
285
|
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.
|
|
248
286
|
"""
|
|
249
287
|
closedAt: DateTime
|
|
288
|
+
complete: Boolean!
|
|
250
289
|
createdAt: DateTime!
|
|
251
290
|
|
|
252
291
|
"""
|
|
@@ -258,6 +297,11 @@ type AppRequest {
|
|
|
258
297
|
"""
|
|
259
298
|
schemaVersion: String
|
|
260
299
|
): JsonData!
|
|
300
|
+
|
|
301
|
+
"""
|
|
302
|
+
The version of the data for this app request. This is incremented every time the data is updated. If you provide it with your update requests, the API will perform an optimistic concurrency check and fail the update if someone else has updated the data in the meantime.
|
|
303
|
+
"""
|
|
304
|
+
dataVersion: Int!
|
|
261
305
|
id: ID!
|
|
262
306
|
|
|
263
307
|
"""
|
|
@@ -270,6 +314,16 @@ type AppRequest {
|
|
|
270
314
|
for: AppRequestIndexDestination
|
|
271
315
|
): [AppRequestIndexCategory!]!
|
|
272
316
|
|
|
317
|
+
"""
|
|
318
|
+
Notes attached to this app request. Notes are internal only and only visible to reviewers. They are not visible to applicants.
|
|
319
|
+
"""
|
|
320
|
+
notes(filter: AppRequestNoteFilters): [Note!]!
|
|
321
|
+
|
|
322
|
+
"""
|
|
323
|
+
Notes attached to other app requests from this same applicant. Useful for providing context information from previous applications.
|
|
324
|
+
"""
|
|
325
|
+
otherNotes(filter: AppRequestNoteFilters): [Note!]!
|
|
326
|
+
|
|
273
327
|
"""The period this appRequest is associated with."""
|
|
274
328
|
period: Period!
|
|
275
329
|
|
|
@@ -287,6 +341,11 @@ type AppRequest {
|
|
|
287
341
|
}
|
|
288
342
|
|
|
289
343
|
type AppRequestActions {
|
|
344
|
+
"""
|
|
345
|
+
User may finalize the acceptance or denial of the offer. Sends the app request to non-blocking workflow (or completion).
|
|
346
|
+
"""
|
|
347
|
+
acceptOffer: Boolean!
|
|
348
|
+
|
|
290
349
|
"""
|
|
291
350
|
User may cancel this app request as the owner. Separate from closing as a reviewer/admin.
|
|
292
351
|
"""
|
|
@@ -297,8 +356,15 @@ type AppRequestActions {
|
|
|
297
356
|
"""
|
|
298
357
|
close: Boolean!
|
|
299
358
|
|
|
300
|
-
"""
|
|
301
|
-
|
|
359
|
+
"""
|
|
360
|
+
User may complete the app request. All non-blocking workflow must be complete.
|
|
361
|
+
"""
|
|
362
|
+
completeRequest: Boolean!
|
|
363
|
+
|
|
364
|
+
"""
|
|
365
|
+
User may complete the review app request. Sends the app request to the acceptance phase, or if there is no acceptance phase, to the non-blocking workflow or completion.
|
|
366
|
+
"""
|
|
367
|
+
completeReview: Boolean!
|
|
302
368
|
|
|
303
369
|
"""
|
|
304
370
|
User may reopen this app request, whether as the owner or as a reviewer/admin.
|
|
@@ -306,13 +372,36 @@ type AppRequestActions {
|
|
|
306
372
|
reopen: Boolean!
|
|
307
373
|
|
|
308
374
|
"""User may return this app request to the applicant phase."""
|
|
309
|
-
|
|
375
|
+
returnToApplicant: Boolean!
|
|
376
|
+
|
|
377
|
+
"""User may return to the non-blocking workflow phase from completion."""
|
|
378
|
+
returnToNonBlocking: Boolean!
|
|
379
|
+
|
|
380
|
+
"""
|
|
381
|
+
User may return the app request to the acceptance phase from non-blocking workflow or completion.
|
|
382
|
+
"""
|
|
383
|
+
returnToOffer: Boolean!
|
|
384
|
+
|
|
385
|
+
"""
|
|
386
|
+
User may return the app request to the review phase from non-blocking workflow or completion. This does not cover reclaiming an offer - see reverseOffer for that. It also does not cover returning from completion to acceptance - see returnToOffer for that.
|
|
387
|
+
"""
|
|
388
|
+
returnToReview: Boolean!
|
|
310
389
|
|
|
311
390
|
"""Whether the user can view this app request as a reviewer."""
|
|
312
391
|
review: Boolean!
|
|
313
392
|
|
|
314
393
|
"""User may submit this app request either as or on behalf of the owner."""
|
|
315
394
|
submit: Boolean!
|
|
395
|
+
|
|
396
|
+
"""
|
|
397
|
+
User is able to see the acceptance UI. i.e. they are the applicant and the request is in the appropriate phase.
|
|
398
|
+
"""
|
|
399
|
+
viewAcceptUI: Boolean!
|
|
400
|
+
|
|
401
|
+
"""
|
|
402
|
+
User is able to see the applicant UI. i.e. they are the applicant and the request is in the appropriate phase.
|
|
403
|
+
"""
|
|
404
|
+
viewApplyUI: Boolean!
|
|
316
405
|
}
|
|
317
406
|
|
|
318
407
|
type AppRequestActivity {
|
|
@@ -373,7 +462,9 @@ input AppRequestActivityFilters {
|
|
|
373
462
|
"""
|
|
374
463
|
impersonatedUsers: [ID!]
|
|
375
464
|
|
|
376
|
-
"""
|
|
465
|
+
"""
|
|
466
|
+
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.
|
|
467
|
+
"""
|
|
377
468
|
users: [ID!]
|
|
378
469
|
}
|
|
379
470
|
|
|
@@ -382,15 +473,55 @@ input AppRequestFilter {
|
|
|
382
473
|
true -> only return appRequests that are closed. false -> only return appRequests that are open. null -> return all appRequests.
|
|
383
474
|
"""
|
|
384
475
|
closed: Boolean
|
|
476
|
+
|
|
477
|
+
"""
|
|
478
|
+
Only return appRequests that were closed after this date. Open appRequests will be filtered out.
|
|
479
|
+
"""
|
|
480
|
+
closedAfter: DateTime
|
|
481
|
+
|
|
482
|
+
"""
|
|
483
|
+
Only return appRequests that were closed before this date. Open appRequests will be filtered out.
|
|
484
|
+
"""
|
|
485
|
+
closedBefore: DateTime
|
|
486
|
+
|
|
487
|
+
"""Only return appRequests that were created after this date."""
|
|
488
|
+
createdAfter: DateTime
|
|
489
|
+
|
|
490
|
+
"""Only return appRequests that were created before this date."""
|
|
491
|
+
createdBefore: DateTime
|
|
385
492
|
ids: [ID!]
|
|
386
493
|
|
|
494
|
+
"""Only return appRequests that match one of the given indexes."""
|
|
495
|
+
indexes: [AppRequestIndexFilter!]
|
|
496
|
+
|
|
387
497
|
"""Only return appRequests that are owned by one the given logins."""
|
|
388
498
|
logins: [ID!]
|
|
389
499
|
|
|
390
500
|
"""Only return appRequests that are owned by the current user."""
|
|
391
501
|
own: Boolean
|
|
392
502
|
periodIds: [ID!]
|
|
503
|
+
|
|
504
|
+
"""
|
|
505
|
+
Search for appRequests that match this search term. This will do a prefix search across all fields that are indexed.
|
|
506
|
+
"""
|
|
507
|
+
search: String
|
|
393
508
|
status: [AppRequestStatus!]
|
|
509
|
+
|
|
510
|
+
"""
|
|
511
|
+
Only return appRequests that were submitted after this date. App Requests that have not been submitted will be filtered out.
|
|
512
|
+
"""
|
|
513
|
+
submittedAfter: DateTime
|
|
514
|
+
|
|
515
|
+
"""
|
|
516
|
+
Only return appRequests that were submitted before this date. App Requests that have not been submitted will be filtered out.
|
|
517
|
+
"""
|
|
518
|
+
submittedBefore: DateTime
|
|
519
|
+
|
|
520
|
+
"""Only return appRequests that were updated after this date."""
|
|
521
|
+
updatedAfter: DateTime
|
|
522
|
+
|
|
523
|
+
"""Only return appRequests that were updated before this date."""
|
|
524
|
+
updatedBefore: DateTime
|
|
394
525
|
}
|
|
395
526
|
|
|
396
527
|
"""
|
|
@@ -406,13 +537,23 @@ type AppRequestIndexCategory {
|
|
|
406
537
|
If this is > 0, the index values should be shown on the applicant dashboard, sorted by this priority in descending order.
|
|
407
538
|
"""
|
|
408
539
|
applicantDashboardPriority: Float
|
|
540
|
+
|
|
541
|
+
"""
|
|
542
|
+
The internal category name for this index. Use this with any GraphQL filters.
|
|
543
|
+
"""
|
|
409
544
|
category: String!
|
|
545
|
+
|
|
546
|
+
"""A human-friendly label for this category that can be shown in the UI."""
|
|
410
547
|
categoryLabel: String!
|
|
411
548
|
|
|
412
549
|
"""
|
|
413
550
|
If this is > 0, the index values should be shown on the list filters, sorted by this priority in descending order.
|
|
414
551
|
"""
|
|
415
552
|
listFiltersPriority: Float
|
|
553
|
+
|
|
554
|
+
"""
|
|
555
|
+
If true, this category has few enough values that it is reasonable to list them all in a dropdown or similar UI control. If false, the list of values is likely to get very long and it would be better to use an autofill combobox or something.
|
|
556
|
+
"""
|
|
416
557
|
listable: Boolean!
|
|
417
558
|
|
|
418
559
|
"""
|
|
@@ -443,6 +584,24 @@ enum AppRequestIndexDestination {
|
|
|
443
584
|
REVIEWER_DASHBOARD
|
|
444
585
|
}
|
|
445
586
|
|
|
587
|
+
input AppRequestIndexFilter {
|
|
588
|
+
category: String!
|
|
589
|
+
tags: [String!]!
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
input AppRequestNoteFilters {
|
|
593
|
+
"""Filter notes to those attached to the specified application requests."""
|
|
594
|
+
appRequestIds: [ID!]
|
|
595
|
+
|
|
596
|
+
"""
|
|
597
|
+
Filter notes to those attached to application requests from the specified applicants (by login name).
|
|
598
|
+
"""
|
|
599
|
+
applicants: [String!]
|
|
600
|
+
|
|
601
|
+
"""Filter to the specified note IDs."""
|
|
602
|
+
ids: [ID!]
|
|
603
|
+
}
|
|
604
|
+
|
|
446
605
|
"\n The status of an appRequest. This status is computed based on the \"dbStatus\" recorded in\n the database and the status of each application.\n "
|
|
447
606
|
enum AppRequestStatus {
|
|
448
607
|
"""
|
|
@@ -461,7 +620,7 @@ enum AppRequestStatus {
|
|
|
461
620
|
APPROVAL
|
|
462
621
|
|
|
463
622
|
"""
|
|
464
|
-
|
|
623
|
+
Results have been released to the applicant, there is no acceptance phase, and at least one application was found eligible.
|
|
465
624
|
"""
|
|
466
625
|
APPROVED
|
|
467
626
|
|
|
@@ -474,10 +633,14 @@ enum AppRequestStatus {
|
|
|
474
633
|
Applicant has not yet submitted but ALL applications have been disqualified. Applicant may continue editing prompts until the App Request is closed.
|
|
475
634
|
"""
|
|
476
635
|
DISQUALIFIED
|
|
636
|
+
|
|
637
|
+
"""
|
|
638
|
+
Applicant has responded to the offer, but did not accept an offer on any application.
|
|
639
|
+
"""
|
|
477
640
|
NOT_ACCEPTED
|
|
478
641
|
|
|
479
642
|
"""
|
|
480
|
-
|
|
643
|
+
Results have been released to the applicant, there is no acceptance phase, and all applications were found ineligible.
|
|
481
644
|
"""
|
|
482
645
|
NOT_APPROVED
|
|
483
646
|
|
|
@@ -486,11 +649,21 @@ enum AppRequestStatus {
|
|
|
486
649
|
"""
|
|
487
650
|
PREAPPROVAL
|
|
488
651
|
|
|
652
|
+
"""
|
|
653
|
+
Applicant has been offered, satisfied all acceptance requirements and is ready to accept. This status is unreachable if the period has no ACCEPTANCE requirements.
|
|
654
|
+
"""
|
|
655
|
+
READY_TO_ACCEPT
|
|
656
|
+
|
|
489
657
|
"""
|
|
490
658
|
Applicant has completed all prompts and is ready to submit. At least one application is eligible to proceed.
|
|
491
659
|
"""
|
|
492
660
|
READY_TO_SUBMIT
|
|
493
661
|
|
|
662
|
+
"""
|
|
663
|
+
All applications have been reviewed and any blocking workflow stages have been completed. The application is ready for results to be released to the applicant.
|
|
664
|
+
"""
|
|
665
|
+
REVIEW_COMPLETE
|
|
666
|
+
|
|
494
667
|
"""Applicant has begun the process and has not yet submitted."""
|
|
495
668
|
STARTED
|
|
496
669
|
|
|
@@ -507,8 +680,31 @@ type Application {
|
|
|
507
680
|
actions: ApplicationActions!
|
|
508
681
|
id: ID!
|
|
509
682
|
|
|
683
|
+
"""
|
|
684
|
+
The phase in which this application became ineligible for benefits. Useful for reporting / filtering. Null if the application is not (yet) ineligible.
|
|
685
|
+
"""
|
|
686
|
+
ineligiblePhase: IneligiblePhases
|
|
687
|
+
|
|
510
688
|
"""The navigation title of the program this application is for."""
|
|
511
689
|
navTitle: String!
|
|
690
|
+
|
|
691
|
+
"""
|
|
692
|
+
The next workflow stage for this application that would be active after activating the advanceWorkflow mutation. Null if the application or current user is not allowed to advance.
|
|
693
|
+
"""
|
|
694
|
+
nextWorkflowStage: PeriodWorkflowStage
|
|
695
|
+
|
|
696
|
+
"""
|
|
697
|
+
The phase of the application. This is usually a computed field, not stored in the database.
|
|
698
|
+
"""
|
|
699
|
+
phase: ApplicationPhase!
|
|
700
|
+
|
|
701
|
+
"""
|
|
702
|
+
The previous workflow stage for this application that would be active after activating the reverseWorkflow mutation. Null if the application or current user is not allowed to reverse.
|
|
703
|
+
"""
|
|
704
|
+
previousWorkflowStage: PeriodWorkflowStage
|
|
705
|
+
|
|
706
|
+
"""The program key this application corresponds to."""
|
|
707
|
+
programKey: String!
|
|
512
708
|
requirements: [ApplicationRequirement!]!
|
|
513
709
|
status: ApplicationStatus!
|
|
514
710
|
|
|
@@ -519,12 +715,92 @@ type Application {
|
|
|
519
715
|
|
|
520
716
|
"""The title of the program this application is for."""
|
|
521
717
|
title: String!
|
|
718
|
+
|
|
719
|
+
"""
|
|
720
|
+
If the program has workflow, it may be divided into multiple stages of audit, each with their own requirements/prompts. This indicates which stage we are currently evaluating, or null if we are not in the workflow phase. An application with no workflow defined will never be in the workflow phase. Starts at 1.
|
|
721
|
+
"""
|
|
722
|
+
workflowStage: PeriodWorkflowStage
|
|
723
|
+
|
|
724
|
+
"""
|
|
725
|
+
All workflow stages defined for the program/period of this application, in evaluation order.
|
|
726
|
+
"""
|
|
727
|
+
workflowStages: [PeriodWorkflowStage!]!
|
|
522
728
|
}
|
|
523
729
|
|
|
524
730
|
type ApplicationActions {
|
|
731
|
+
advanceWorkflow: Boolean!
|
|
732
|
+
reverseWorkflow: Boolean!
|
|
525
733
|
viewAsReviewer: Boolean!
|
|
526
734
|
}
|
|
527
735
|
|
|
736
|
+
"\n The phase of the application. This is usually a computed field, not stored in the database. The phase\n is computed based on the status of the appRequest and of the requirements for the program.\n "
|
|
737
|
+
enum ApplicationPhase {
|
|
738
|
+
"""
|
|
739
|
+
The application has been reviewed and an offer has been made to the applicant. The applicant must accept the offer.
|
|
740
|
+
"""
|
|
741
|
+
ACCEPTANCE
|
|
742
|
+
|
|
743
|
+
"""
|
|
744
|
+
The applicant has submitted the application and any PREAPPROVAL requirements are passing. The application is under review.
|
|
745
|
+
"""
|
|
746
|
+
APPROVAL
|
|
747
|
+
|
|
748
|
+
"""
|
|
749
|
+
The application has been reviewed. If there was a workflow, it is complete. If there was an acceptance phase, the offer was accepted or rejected.
|
|
750
|
+
"""
|
|
751
|
+
COMPLETE
|
|
752
|
+
|
|
753
|
+
"""
|
|
754
|
+
The applicant has submitted the application, but there are automated prompts that need to be filled in before the application will appear on a reviewer's dashboard.
|
|
755
|
+
"""
|
|
756
|
+
PREAPPROVAL
|
|
757
|
+
|
|
758
|
+
"""
|
|
759
|
+
The appRequest has not finished pre-qual yet. The application doesn't properly exist yet.
|
|
760
|
+
"""
|
|
761
|
+
PREQUAL
|
|
762
|
+
|
|
763
|
+
"""
|
|
764
|
+
The applicant is filling out their portion of prompts and has not yet finished.
|
|
765
|
+
"""
|
|
766
|
+
QUALIFICATION
|
|
767
|
+
|
|
768
|
+
"""
|
|
769
|
+
No application requirements are PENDING. The application is ready for the first workflow stage, but a reviewer must manually advance the phase. This phase will be automatically skipped if there are no workflow stages configured/enabled.
|
|
770
|
+
"""
|
|
771
|
+
READY_FOR_WORKFLOW
|
|
772
|
+
|
|
773
|
+
"""
|
|
774
|
+
An offer has been made to the applicant. The acceptance requirements are no longer pending, the application is ready to be finalized.
|
|
775
|
+
"""
|
|
776
|
+
READY_TO_ACCEPT
|
|
777
|
+
|
|
778
|
+
"""
|
|
779
|
+
All non-blocking workflow stages are complete. The application is ready to be finalized.
|
|
780
|
+
"""
|
|
781
|
+
READY_TO_COMPLETE
|
|
782
|
+
|
|
783
|
+
"""
|
|
784
|
+
The applicant has filled out their portion of the prompts but has not yet submitted for review.
|
|
785
|
+
"""
|
|
786
|
+
READY_TO_SUBMIT
|
|
787
|
+
|
|
788
|
+
"""
|
|
789
|
+
The application has been reviewed and any blocking workflow stages have been completed. The application is ready for results (whether eligible or not) to be released to the applicant. A reviewer must manually advanced the phase, and will do so for the whole appRequest, not one application at a time. So the application will sit in this state until all applications are REVIEW_COMPLETE. If there is no acceptance phase (because there are no acceptance requirements), or if the application is not eligible, the makeOffer prompt will move the phase to WORKFLOW_NONBLOCKING or COMPLETE.
|
|
790
|
+
"""
|
|
791
|
+
REVIEW_COMPLETE
|
|
792
|
+
|
|
793
|
+
"""
|
|
794
|
+
The application review has been completed and now there is a workflow process to audit the review BEFORE marking the application status as eligible or ineligible. It should remain pending until the blocking workflow stages have been completed. Workflow stages that evaluate to INELIGIBLE will also make the application status INELIGIBLE. Prompts from the applicant and review phases are locked.
|
|
795
|
+
"""
|
|
796
|
+
WORKFLOW_BLOCKING
|
|
797
|
+
|
|
798
|
+
"""
|
|
799
|
+
The application has been offered and accepted and now there is a workflow process to audit the review AFTER marking the application status as eligible or ineligible. Requirements from non-blocking workflow states cannot affect the application status, but the application will not proceed to the complete phase until all workflow stages are non-PENDING.
|
|
800
|
+
"""
|
|
801
|
+
WORKFLOW_NONBLOCKING
|
|
802
|
+
}
|
|
803
|
+
|
|
528
804
|
"""
|
|
529
805
|
The specific instance of a requirement on a particular application. Stores the status of the requirement, e.g. being satisfied or not.
|
|
530
806
|
"""
|
|
@@ -553,11 +829,6 @@ type ApplicationRequirement {
|
|
|
553
829
|
navTitle: String!
|
|
554
830
|
prompts: [RequirementPrompt!]!
|
|
555
831
|
|
|
556
|
-
"""
|
|
557
|
-
When true, means that the requirement has not been made moot by an earlier requirement failing. It may still need to be hidden from navigation based on evaluatedInEarlierApplication.
|
|
558
|
-
"""
|
|
559
|
-
reachable: Boolean!
|
|
560
|
-
|
|
561
832
|
"""
|
|
562
833
|
The smart title for this requirement in the app request's period. For instance, might be "Applicant must have GPA over 3.4" instead of the regular title "Applicant must meet GPA requirement". Will fall back to the regular title for any requirement that does not provide a smart title.
|
|
563
834
|
"""
|
|
@@ -580,76 +851,82 @@ type ApplicationRequirement {
|
|
|
580
851
|
The type of requirement. This determines when the requirement is evaluated and who can see the requirement.
|
|
581
852
|
"""
|
|
582
853
|
type: RequirementType!
|
|
583
|
-
}
|
|
584
854
|
|
|
585
|
-
"\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, the status should permanently match the ApplicationStatusDB instead of being\n computed. If the appRequest is CANCELLED, all applications should be CANCELLED as well.\n "
|
|
586
|
-
enum ApplicationStatus {
|
|
587
855
|
"""
|
|
588
|
-
The
|
|
856
|
+
The stage of the workflow for this requirement. Null if not part of a workflow stage
|
|
589
857
|
"""
|
|
590
|
-
|
|
858
|
+
workflowStage: PeriodWorkflowStage
|
|
859
|
+
}
|
|
591
860
|
|
|
861
|
+
"\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 "
|
|
862
|
+
enum ApplicationStatus {
|
|
592
863
|
"""
|
|
593
|
-
|
|
864
|
+
An offer was made to the applicant and all ACCEPTANCE requirements are met (the applicant accepted the offer).
|
|
594
865
|
"""
|
|
595
866
|
ACCEPTED
|
|
596
867
|
|
|
597
868
|
"""
|
|
598
|
-
|
|
869
|
+
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.
|
|
599
870
|
"""
|
|
600
|
-
|
|
871
|
+
ELIGIBLE
|
|
601
872
|
|
|
602
|
-
"""
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
CANCELLED
|
|
873
|
+
"""
|
|
874
|
+
At least one application requirement up to and including WORKFLOW_BLOCKING requirements is not met. The review cannot proceed, but the first or current stage of the workflow should still continue.
|
|
875
|
+
"""
|
|
876
|
+
INELIGIBLE
|
|
607
877
|
|
|
608
878
|
"""
|
|
609
|
-
The
|
|
879
|
+
The application status has not yet been determined. Further prompts must be answered.
|
|
610
880
|
"""
|
|
611
|
-
|
|
881
|
+
PENDING
|
|
612
882
|
|
|
613
883
|
"""
|
|
614
|
-
|
|
884
|
+
An offer was made to the applicant and at least one ACCEPTANCE requirement is not met (the applicant rejected the offer).
|
|
615
885
|
"""
|
|
616
|
-
|
|
886
|
+
REJECTED
|
|
887
|
+
}
|
|
617
888
|
|
|
889
|
+
type Category {
|
|
618
890
|
"""
|
|
619
|
-
|
|
891
|
+
This is indexed name of the category. Categories are indexed to allow for quick filtering of a list of items. e.g. institutionalRoles
|
|
620
892
|
"""
|
|
621
|
-
|
|
893
|
+
category: String!
|
|
622
894
|
|
|
623
|
-
"""
|
|
624
|
-
|
|
895
|
+
"""Displayed Label of the category. e.g. Institutional Roles"""
|
|
896
|
+
label: String
|
|
625
897
|
|
|
626
|
-
"""
|
|
627
|
-
|
|
898
|
+
"""
|
|
899
|
+
IDs are the unique values that may be used to group an items. Multiple IDs may be assigned to an item. i.e. ["Staff", "Faculty", "Student"]
|
|
900
|
+
"""
|
|
901
|
+
tags: [CategoryTag!]!
|
|
628
902
|
|
|
629
903
|
"""
|
|
630
|
-
|
|
904
|
+
Set this to true should be available as a filter in the User list view.
|
|
631
905
|
"""
|
|
632
|
-
|
|
906
|
+
useInFilters: Boolean
|
|
633
907
|
|
|
634
908
|
"""
|
|
635
|
-
|
|
909
|
+
Set this to true should be displayed as a column in the User list view.
|
|
636
910
|
"""
|
|
637
|
-
|
|
911
|
+
useInList: Boolean
|
|
912
|
+
}
|
|
638
913
|
|
|
914
|
+
type CategoryTag {
|
|
639
915
|
"""
|
|
640
|
-
|
|
916
|
+
Displayed Label of the tag in the UI Filter. This value should be unique enough to be distinguishable between other tags within a category type.
|
|
641
917
|
"""
|
|
642
|
-
|
|
918
|
+
label: String
|
|
643
919
|
|
|
644
920
|
"""
|
|
645
|
-
|
|
921
|
+
This is the indexed name of the tagged instance within a category type and is what is stored/searched for in the database.
|
|
646
922
|
"""
|
|
647
|
-
|
|
923
|
+
tag: String!
|
|
648
924
|
}
|
|
649
925
|
|
|
650
926
|
type Configuration {
|
|
651
927
|
actions: ConfigurationAccess!
|
|
652
928
|
data: JsonData!
|
|
929
|
+
fetchedData: JsonData
|
|
653
930
|
|
|
654
931
|
"""The key being configured. Could be a requirement or prompt key."""
|
|
655
932
|
key: String!
|
|
@@ -692,13 +969,23 @@ type IndexCategory {
|
|
|
692
969
|
If this is > 0, the index values should be shown on the applicant dashboard, sorted by this priority in descending order.
|
|
693
970
|
"""
|
|
694
971
|
applicantDashboardPriority: Float
|
|
972
|
+
|
|
973
|
+
"""
|
|
974
|
+
The internal category name for this index. Use this with any GraphQL filters.
|
|
975
|
+
"""
|
|
695
976
|
category: String!
|
|
977
|
+
|
|
978
|
+
"""A human-friendly label for this category that can be shown in the UI."""
|
|
696
979
|
categoryLabel: String!
|
|
697
980
|
|
|
698
981
|
"""
|
|
699
982
|
If this is > 0, the index values should be shown on the list filters, sorted by this priority in descending order.
|
|
700
983
|
"""
|
|
701
984
|
listFiltersPriority: Float
|
|
985
|
+
|
|
986
|
+
"""
|
|
987
|
+
If true, this category has few enough values that it is reasonable to list them all in a dropdown or similar UI control. If false, the list of values is likely to get very long and it would be better to use an autofill combobox or something.
|
|
988
|
+
"""
|
|
702
989
|
listable: Boolean!
|
|
703
990
|
|
|
704
991
|
"""
|
|
@@ -719,24 +1006,111 @@ type IndexValue {
|
|
|
719
1006
|
value: String!
|
|
720
1007
|
}
|
|
721
1008
|
|
|
1009
|
+
enum IneligiblePhases {
|
|
1010
|
+
"""The application became ineligible in the acceptance phase."""
|
|
1011
|
+
ACCEPTANCE
|
|
1012
|
+
|
|
1013
|
+
"""The application became ineligible in the approval phase."""
|
|
1014
|
+
APPROVAL
|
|
1015
|
+
|
|
1016
|
+
"""The application became ineligible in the pre-approval phase."""
|
|
1017
|
+
PREAPPROVAL
|
|
1018
|
+
|
|
1019
|
+
"""The application became ineligible in the pre-qualification phase."""
|
|
1020
|
+
PREQUAL
|
|
1021
|
+
|
|
1022
|
+
"""The application became ineligible in the qualification phase."""
|
|
1023
|
+
QUALIFICATION
|
|
1024
|
+
|
|
1025
|
+
"""The application became ineligible during blocking workflow."""
|
|
1026
|
+
WORKFLOW
|
|
1027
|
+
}
|
|
1028
|
+
|
|
722
1029
|
"""Unstructured JSON data."""
|
|
723
1030
|
scalar JsonData
|
|
724
1031
|
|
|
725
1032
|
type Mutation {
|
|
1033
|
+
"""
|
|
1034
|
+
This is for the applicant to accept or reject the offer that was made based on their app request. The difference between accept and reject is determined by the status of the acceptance requirements. They will still "accept offer" after they answer that they do not want the offer. If there is non-blocking workflow on any applications, the first one in each will begin. Applications without non-blocking workflow will be advanced to the COMPLETE phase. If all applications are complete, the app request will be closed.
|
|
1035
|
+
"""
|
|
1036
|
+
acceptOffer(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1037
|
+
|
|
726
1038
|
"""Add a note to the app request."""
|
|
727
1039
|
addNote(
|
|
1040
|
+
"""The content of the note. HTML is expected."""
|
|
728
1041
|
content: String!
|
|
1042
|
+
): ValidatedAppRequestResponse!
|
|
1043
|
+
|
|
1044
|
+
"""
|
|
1045
|
+
Moves the application to the next workflow stage. If phase is READY_FOR_WORKFLOW, moves to the first or next blocking workflow stage. If on the last blocking workflow, moves to REVIEW_COMPLETE. If on the last non-blocking workflow, moves the application to COMPLETE. If all applications are COMPLETE, automatically triggers the app request close mutation.
|
|
1046
|
+
"""
|
|
1047
|
+
advanceWorkflow(applicationId: ID!): ValidatedAppRequestResponse!
|
|
1048
|
+
|
|
1049
|
+
"""
|
|
1050
|
+
Cancel or withdraw the app request, depending on its current phase. This is only available if the app request is in a cancellable state.
|
|
1051
|
+
"""
|
|
1052
|
+
cancelAppRequest(
|
|
1053
|
+
appRequestId: ID!
|
|
729
1054
|
|
|
730
1055
|
"""
|
|
731
|
-
If
|
|
1056
|
+
If the user is currently viewing some of the app request details, include the dataVersion here to make the cancellation fail when the app request has been updated by another user.
|
|
732
1057
|
"""
|
|
733
|
-
|
|
1058
|
+
dataVersion: Int
|
|
734
1059
|
): ValidatedAppRequestResponse!
|
|
735
1060
|
|
|
736
|
-
"""
|
|
737
|
-
|
|
1061
|
+
"""
|
|
1062
|
+
Close the app request. Generally this is always available and will freeze the request/applications in their current phase/status.
|
|
1063
|
+
"""
|
|
1064
|
+
closeAppRequest(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1065
|
+
|
|
1066
|
+
"""
|
|
1067
|
+
Complete the app request. This is generally only available if request is in non-blocking workflow and all applications are complete.
|
|
1068
|
+
"""
|
|
1069
|
+
completeRequest(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1070
|
+
|
|
1071
|
+
"""
|
|
1072
|
+
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.
|
|
1073
|
+
"""
|
|
1074
|
+
completeReview(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1075
|
+
|
|
1076
|
+
"""Create a new app request."""
|
|
1077
|
+
createAppRequest(login: String!, periodId: ID!, validateOnly: Boolean): ValidatedAppRequestResponse!
|
|
1078
|
+
createPeriod(copyPeriodId: String, period: PeriodUpdate!, validateOnly: Boolean): ValidatedPeriodResponse!
|
|
1079
|
+
|
|
1080
|
+
"""Delete an existing note."""
|
|
1081
|
+
deleteNote(noteId: String!): Boolean!
|
|
1082
|
+
deletePeriod(periodId: ID!): ValidatedResponse!
|
|
1083
|
+
markPeriodReviewed(periodId: ID!, validateOnly: Boolean): ValidatedPeriodResponse!
|
|
1084
|
+
|
|
1085
|
+
"""
|
|
1086
|
+
Reopen the app request. This is only available if the app request is in a state that allows reopening.
|
|
1087
|
+
"""
|
|
1088
|
+
reopenAppRequest(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1089
|
+
|
|
1090
|
+
"""
|
|
1091
|
+
Return the app request to the applicant phase. This is only available if the app request is in a state that allows returning.
|
|
1092
|
+
"""
|
|
1093
|
+
returnToApplicant(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1094
|
+
|
|
1095
|
+
"""If request is complete, undo and return to non-blocking workflow."""
|
|
1096
|
+
returnToNonBlocking(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1097
|
+
|
|
1098
|
+
"""
|
|
1099
|
+
Return the app request to the acceptance phase from non-blocking workflow or completion.
|
|
1100
|
+
"""
|
|
1101
|
+
returnToOffer(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1102
|
+
|
|
1103
|
+
"""
|
|
1104
|
+
Return the app request to the review phase from acceptance, non-blocking workflow, or completion.
|
|
1105
|
+
"""
|
|
1106
|
+
returnToReview(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
1107
|
+
|
|
1108
|
+
"""
|
|
1109
|
+
Moves the application back to the previous workflow stage. If on the first blocking workflow stage, moves back to APPROVAL. If on the first non-blocking workflow, throws an error.
|
|
1110
|
+
"""
|
|
1111
|
+
reverseWorkflow(applicationId: ID!): ValidatedAppRequestResponse!
|
|
738
1112
|
roleAddGrant(grant: AccessRoleGrantCreate!, roleId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
|
|
739
|
-
roleCreate(role: AccessRoleInput!, validateOnly: Boolean): AccessRoleValidatedResponse!
|
|
1113
|
+
roleCreate(copyRoleId: ID, role: AccessRoleInput!, validateOnly: Boolean): AccessRoleValidatedResponse!
|
|
740
1114
|
roleDelete(roleId: ID!): ValidatedResponse!
|
|
741
1115
|
roleDeleteGrant(grantId: ID!): AccessRoleValidatedResponse!
|
|
742
1116
|
roleUpdate(role: AccessRoleInput!, roleId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
|
|
@@ -744,11 +1118,24 @@ type Mutation {
|
|
|
744
1118
|
|
|
745
1119
|
"""Submit the app request."""
|
|
746
1120
|
submitAppRequest(appRequestId: ID!): ValidatedAppRequestResponse!
|
|
747
|
-
updateConfiguration(data: JsonData!, key: String!, periodId:
|
|
748
|
-
|
|
1121
|
+
updateConfiguration(data: JsonData!, key: String!, periodId: ID!, validateOnly: Boolean): ValidatedConfigurationResponse!
|
|
1122
|
+
|
|
1123
|
+
"""Update the content of an existing note."""
|
|
1124
|
+
updateNote(content: String!, noteId: String!): Note!
|
|
1125
|
+
updatePeriod(periodId: ID!, update: PeriodUpdate!, validateOnly: Boolean): ValidatedPeriodResponse!
|
|
1126
|
+
updatePeriodRequirement(disabled: Boolean!, periodId: String!, requirementKey: String!): ValidatedResponse!
|
|
749
1127
|
|
|
750
1128
|
"""Update the data for a prompt in this app request."""
|
|
751
|
-
updatePrompt(
|
|
1129
|
+
updatePrompt(
|
|
1130
|
+
data: JsonData!
|
|
1131
|
+
|
|
1132
|
+
"""
|
|
1133
|
+
The data version of the app request at the time this prompt was loaded. If provided, the API will perform an optimistic concurrency check and fail the update if someone else has updated the data in the meantime.
|
|
1134
|
+
"""
|
|
1135
|
+
dataVersion: Int
|
|
1136
|
+
promptId: ID!
|
|
1137
|
+
validateOnly: Boolean
|
|
1138
|
+
): ValidatedAppRequestResponse!
|
|
752
1139
|
}
|
|
753
1140
|
|
|
754
1141
|
type MutationMessage {
|
|
@@ -781,6 +1168,70 @@ enum MutationMessageType {
|
|
|
781
1168
|
warning
|
|
782
1169
|
}
|
|
783
1170
|
|
|
1171
|
+
"""
|
|
1172
|
+
An internal note attached to an application request. Notes are always written by reviewers and never visible to applicants. "Messages" are for reviewers and applicants communicating with one another.
|
|
1173
|
+
"""
|
|
1174
|
+
type Note {
|
|
1175
|
+
actions: NoteActions!
|
|
1176
|
+
|
|
1177
|
+
"""The app request this note is attached to."""
|
|
1178
|
+
appRequest: AppRequest!
|
|
1179
|
+
|
|
1180
|
+
"""The author of the note."""
|
|
1181
|
+
author: AccessUser!
|
|
1182
|
+
|
|
1183
|
+
"""The content of the note in HTML."""
|
|
1184
|
+
content: String!
|
|
1185
|
+
createdAt: DateTime!
|
|
1186
|
+
id: ID!
|
|
1187
|
+
updatedAt: DateTime!
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
"""Actions that can be performed on a note."""
|
|
1191
|
+
type NoteActions {
|
|
1192
|
+
delete: Boolean!
|
|
1193
|
+
update: Boolean!
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
input Pagination {
|
|
1197
|
+
"""The page number to retrieve. If not provided, will default to 1."""
|
|
1198
|
+
page: Int
|
|
1199
|
+
perPage: Int
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
type PaginationInfoWithTotalItems {
|
|
1203
|
+
"""
|
|
1204
|
+
List of indexed category data related to items within a page. Often used for filtering items.
|
|
1205
|
+
"""
|
|
1206
|
+
categories: [Category!]
|
|
1207
|
+
|
|
1208
|
+
"""
|
|
1209
|
+
The current page number, starting at 1. This is always provided - if pagination was not requested, will return 1.
|
|
1210
|
+
"""
|
|
1211
|
+
currentPage: Float!
|
|
1212
|
+
|
|
1213
|
+
"""
|
|
1214
|
+
Indicates whether requesting the next page would provide more results. Especially useful for models that cannot provide total item count for practical reasons. Note that over time, more results can appear and make this answer wrong, so in some circumstances it makes sense to request another page anyway.
|
|
1215
|
+
"""
|
|
1216
|
+
hasNextPage: Boolean!
|
|
1217
|
+
|
|
1218
|
+
"""
|
|
1219
|
+
The number of items per page. Null if pagination was not requested/forced because results per page is unlimited.
|
|
1220
|
+
"""
|
|
1221
|
+
perPage: Float
|
|
1222
|
+
|
|
1223
|
+
"""
|
|
1224
|
+
If possible, the total number of results will be provided. The API may return null if calculating the total is impractical. If pagination was not requested/forced, will equal the result count.
|
|
1225
|
+
"""
|
|
1226
|
+
totalItems: Float
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
type PaginationResponse {
|
|
1230
|
+
accessUsers: PaginationInfoWithTotalItems
|
|
1231
|
+
appRequests: PaginationInfoWithTotalItems
|
|
1232
|
+
appRequestsActivity: PaginationInfoWithTotalItems
|
|
1233
|
+
}
|
|
1234
|
+
|
|
784
1235
|
type Period {
|
|
785
1236
|
actions: PeriodActions!
|
|
786
1237
|
|
|
@@ -811,11 +1262,17 @@ type Period {
|
|
|
811
1262
|
programs: [PeriodProgram!]!
|
|
812
1263
|
prompts: [PeriodPrompt!]!
|
|
813
1264
|
requirements: [PeriodProgramRequirement!]!
|
|
1265
|
+
|
|
1266
|
+
"""
|
|
1267
|
+
Whether this period's configurations have been reviewed by an administrator. Newly created periods must be reviewed before they will accept new app requests, even if the open date has passed.
|
|
1268
|
+
"""
|
|
1269
|
+
reviewed: Boolean!
|
|
814
1270
|
}
|
|
815
1271
|
|
|
816
1272
|
type PeriodActions {
|
|
1273
|
+
createAppRequest: Boolean!
|
|
1274
|
+
delete: Boolean!
|
|
817
1275
|
update: Boolean!
|
|
818
|
-
view: Boolean!
|
|
819
1276
|
}
|
|
820
1277
|
|
|
821
1278
|
input PeriodFilters {
|
|
@@ -839,6 +1296,9 @@ input PeriodFilters {
|
|
|
839
1296
|
"""Return periods that have any of these IDs."""
|
|
840
1297
|
ids: [ID!]
|
|
841
1298
|
|
|
1299
|
+
"""Return periods that have any of these names."""
|
|
1300
|
+
names: [String!]
|
|
1301
|
+
|
|
842
1302
|
"""true -> open periods. false -> closed periods. null -> all periods."""
|
|
843
1303
|
openNow: Boolean
|
|
844
1304
|
|
|
@@ -858,7 +1318,6 @@ type PeriodProgram {
|
|
|
858
1318
|
Whether the program is enabled in this period. This is set by the system administrator.
|
|
859
1319
|
"""
|
|
860
1320
|
enabled: Boolean!
|
|
861
|
-
group: PeriodProgramActions!
|
|
862
1321
|
key: ID!
|
|
863
1322
|
navTitle: String!
|
|
864
1323
|
period: Period!
|
|
@@ -940,33 +1399,29 @@ input PeriodUpdate {
|
|
|
940
1399
|
openDate: DateTime!
|
|
941
1400
|
}
|
|
942
1401
|
|
|
943
|
-
type
|
|
944
|
-
key: ID!
|
|
945
|
-
navTitle: String!
|
|
946
|
-
title: String!
|
|
947
|
-
}
|
|
948
|
-
|
|
949
|
-
input ProgramFilters {
|
|
950
|
-
keys: [String!]
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
type ProgramGroup {
|
|
954
|
-
key: ID!
|
|
955
|
-
|
|
1402
|
+
type PeriodWorkflowStage {
|
|
956
1403
|
"""
|
|
957
|
-
|
|
1404
|
+
Whether this stage is blocking. If true, the application cannot be completed and shown to the applicant until all requirements in this stage are satisfied.
|
|
958
1405
|
"""
|
|
959
|
-
|
|
960
|
-
programs(filter: ProgramFilters): [Program!]!
|
|
1406
|
+
blocking: Boolean!
|
|
961
1407
|
|
|
962
1408
|
"""
|
|
963
|
-
|
|
1409
|
+
Globally unique key for this workflow stage. Use lowercase snake_case, alphanumeric and underscore only.
|
|
964
1410
|
"""
|
|
1411
|
+
key: String!
|
|
1412
|
+
|
|
1413
|
+
"""A human readable title for the workflow stage."""
|
|
965
1414
|
title: String!
|
|
966
1415
|
}
|
|
967
1416
|
|
|
968
|
-
|
|
969
|
-
|
|
1417
|
+
type Program {
|
|
1418
|
+
key: ID!
|
|
1419
|
+
navTitle: String!
|
|
1420
|
+
title: String!
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
input ProgramFilters {
|
|
1424
|
+
keys: [String!]
|
|
970
1425
|
}
|
|
971
1426
|
|
|
972
1427
|
"""
|
|
@@ -978,11 +1433,6 @@ enum PromptVisibility {
|
|
|
978
1433
|
"""
|
|
979
1434
|
APPLICATION_DUPE
|
|
980
1435
|
|
|
981
|
-
"""
|
|
982
|
-
The prompt is intended to be filled in by an automation, but is otherwise available to be answered. It may or may not be visible in various UIs but it is not editable in any of them.
|
|
983
|
-
"""
|
|
984
|
-
AUTOMATION
|
|
985
|
-
|
|
986
1436
|
"""
|
|
987
1437
|
This RequirementPrompt is available to be answered. It is the first appearance of this prompt in the App Request. It should be visible in both the applicant and reviewer UI.
|
|
988
1438
|
"""
|
|
@@ -1002,7 +1452,19 @@ enum PromptVisibility {
|
|
|
1002
1452
|
type Query {
|
|
1003
1453
|
"\n This is the global access object. Each field represents a global permission\n like the ability to view the role management interface.\n "
|
|
1004
1454
|
access: Access!
|
|
1005
|
-
accessUsers(filter: AccessUserFilter): [AccessUser!]!
|
|
1455
|
+
accessUsers(filter: AccessUserFilter, paged: Pagination): [AccessUser!]!
|
|
1456
|
+
|
|
1457
|
+
"""
|
|
1458
|
+
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.
|
|
1459
|
+
"""
|
|
1460
|
+
appRequestActivity(
|
|
1461
|
+
"""
|
|
1462
|
+
Filters to apply to the activity log. This can be used to filter by action type, date range, etc.
|
|
1463
|
+
"""
|
|
1464
|
+
filters: AppRequestActivityFilters
|
|
1465
|
+
id: String!
|
|
1466
|
+
paged: Pagination
|
|
1467
|
+
): [AppRequestActivity!]!
|
|
1006
1468
|
appRequestIndexes(
|
|
1007
1469
|
categories: [String!]
|
|
1008
1470
|
|
|
@@ -1011,9 +1473,14 @@ type Query {
|
|
|
1011
1473
|
"""
|
|
1012
1474
|
for: AppRequestIndexDestination
|
|
1013
1475
|
): [IndexCategory!]!
|
|
1014
|
-
appRequests(filter: AppRequestFilter): [AppRequest!]!
|
|
1476
|
+
appRequests(filter: AppRequestFilter, paged: Pagination): [AppRequest!]!
|
|
1477
|
+
|
|
1478
|
+
"""
|
|
1479
|
+
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.
|
|
1480
|
+
"""
|
|
1481
|
+
controlGroups: [AccessControlGroup!]!
|
|
1482
|
+
pageInfo: PaginationResponse!
|
|
1015
1483
|
periods(filter: PeriodFilters): [Period!]!
|
|
1016
|
-
programGroups(filter: ProgramGroupFilter): [ProgramGroup!]!
|
|
1017
1484
|
programs(filter: ProgramFilters): [Program!]!
|
|
1018
1485
|
roles(filter: AccessRoleFilter): [AccessRole!]!
|
|
1019
1486
|
|
|
@@ -1021,11 +1488,12 @@ type Query {
|
|
|
1021
1488
|
A list of all possible scopes. Scopes are used to limit users when they are accessing the system through an alternate UI or login method. For instance, if you generate an authentication token to give to a third party, it may have a scope identifying that third party and limiting their access even though they are acting as you. Roles must match the token scope in order to apply permissions.
|
|
1022
1489
|
"""
|
|
1023
1490
|
scopes: [String!]!
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1491
|
+
userIndexes(
|
|
1492
|
+
"""
|
|
1493
|
+
Returns indexes that are flagged to appear in this destination. Also sorts for this destination.
|
|
1494
|
+
"""
|
|
1495
|
+
for: AppRequestIndexDestination
|
|
1496
|
+
): [IndexCategory!]!
|
|
1029
1497
|
}
|
|
1030
1498
|
|
|
1031
1499
|
"""
|
|
@@ -1035,17 +1503,14 @@ type RequirementPrompt {
|
|
|
1035
1503
|
"""Actions that the user can take on this prompt."""
|
|
1036
1504
|
actions: RequirementPromptActions!
|
|
1037
1505
|
|
|
1038
|
-
"""
|
|
1506
|
+
"""
|
|
1507
|
+
Whether the prompt has been answered on this request. Note that the answer may be marked invalidated, which means that even though it has been answered, the current answer can't be used and the user needs to answer it again.
|
|
1508
|
+
"""
|
|
1039
1509
|
answered: Boolean!
|
|
1040
1510
|
|
|
1041
1511
|
"""The configuration data for this prompt in the app request's period."""
|
|
1042
1512
|
configurationData: JsonData!
|
|
1043
1513
|
|
|
1044
|
-
"""
|
|
1045
|
-
All the configuration data that could be relevant for this prompt. This includes its own config, and also the config data for any requirements and programs that are related to it.
|
|
1046
|
-
"""
|
|
1047
|
-
configurationRelatedData: JsonData!
|
|
1048
|
-
|
|
1049
1514
|
"""
|
|
1050
1515
|
The data that has been gathered from the user in response to this prompt. The schema is controlled by the question's implementation.
|
|
1051
1516
|
"""
|
|
@@ -1062,7 +1527,7 @@ type RequirementPrompt {
|
|
|
1062
1527
|
description: String
|
|
1063
1528
|
|
|
1064
1529
|
"""
|
|
1065
|
-
Any data that the API needs to provide to the UI to
|
|
1530
|
+
Any data that the API needs to provide to the UI to build the prompt form properly. For instance, it could pull reference information from an external system, e.g. a student's course schedule, for display in the prompt dialog. Null if the user is not currently allowed to update the prompt.
|
|
1066
1531
|
"""
|
|
1067
1532
|
fetchedData(
|
|
1068
1533
|
"""
|
|
@@ -1070,18 +1535,33 @@ type RequirementPrompt {
|
|
|
1070
1535
|
"""
|
|
1071
1536
|
schemaVersion: String
|
|
1072
1537
|
): JsonData
|
|
1538
|
+
|
|
1539
|
+
"""
|
|
1540
|
+
Extra configuration data that is relevant for this prompt. This configuration is explicitly gathered from related requirements and prompts by the gatherConfig function in the prompt definition.
|
|
1541
|
+
"""
|
|
1542
|
+
gatheredConfigData: JsonData!
|
|
1073
1543
|
id: ID!
|
|
1074
1544
|
|
|
1075
1545
|
"""
|
|
1076
|
-
When true, this prompt has been invalidated by the answer to another prompt. The `answered` field
|
|
1546
|
+
When true, this prompt has been invalidated by the answer to another prompt. The `answered` field will remain true so be sure to check this field as well when determining whether the prompt is complete.
|
|
1077
1547
|
"""
|
|
1078
1548
|
invalidated: Boolean!
|
|
1079
1549
|
|
|
1550
|
+
"""
|
|
1551
|
+
If the prompt has been invalidated, this may contain a reason why. It should be displayed to the user.
|
|
1552
|
+
"""
|
|
1553
|
+
invalidatedReason: String
|
|
1554
|
+
|
|
1080
1555
|
"""
|
|
1081
1556
|
A human and machine readable identifier for the prompt. Will be used to match prompt data with UI and API code that handles it.
|
|
1082
1557
|
"""
|
|
1083
1558
|
key: String!
|
|
1084
1559
|
|
|
1560
|
+
"""
|
|
1561
|
+
This prompt's requirement follows a requirement that has already marked the application as ineligible. The prompt still has visibility of AVAILABLE OR REQUEST_DUPE OR APPLICATION_DUPE as normal, but should probably be shown to the user as disabled or not shown at all.
|
|
1562
|
+
"""
|
|
1563
|
+
moot: Boolean!
|
|
1564
|
+
|
|
1085
1565
|
"""
|
|
1086
1566
|
A human readable title for the prompt in the navigation. You probably want it to be shorter than the full title. If not provided, the title will be used.
|
|
1087
1567
|
"""
|
|
@@ -1170,6 +1650,11 @@ enum RequirementType {
|
|
|
1170
1650
|
A requirement that should have a non-pending status before an application may be submitted for review. Programs with a DISQUALIFYING requirement of type APPLICATION should be visible to the submitter but visually distinct as disabled/ineligible.
|
|
1171
1651
|
"""
|
|
1172
1652
|
QUALIFICATION
|
|
1653
|
+
|
|
1654
|
+
"""
|
|
1655
|
+
This requirement belongs to a workflow stage. It should only be included in a workflow stage and should not appear in the standard requirementKeys array of a program.
|
|
1656
|
+
"""
|
|
1657
|
+
WORKFLOW
|
|
1173
1658
|
}
|
|
1174
1659
|
|
|
1175
1660
|
type RoleActions {
|
|
@@ -1178,7 +1663,7 @@ type RoleActions {
|
|
|
1178
1663
|
}
|
|
1179
1664
|
|
|
1180
1665
|
type ValidatedAppRequestResponse {
|
|
1181
|
-
appRequest: AppRequest
|
|
1666
|
+
appRequest: AppRequest
|
|
1182
1667
|
messages: [MutationMessage!]!
|
|
1183
1668
|
|
|
1184
1669
|
"""
|