@hmcts/ccd-case-ui-toolkit 7.0.37-rc2 → 7.0.38-client-context
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/esm2020/lib/shared/components/case-editor/case-edit/case-edit.component.mjs +11 -11
- package/esm2020/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.mjs +16 -14
- package/esm2020/lib/shared/components/case-editor/services/cases.service.mjs +54 -27
- package/esm2020/lib/shared/components/case-editor/services/event-completion-state-machine.service.mjs +9 -6
- package/esm2020/lib/shared/components/event-start/event-guard/event-start.guard.mjs +13 -5
- package/esm2020/lib/shared/components/event-start/services/event-start-state-machine.service.mjs +11 -3
- package/esm2020/lib/shared/domain/work-allocation/Task.mjs +1 -1
- package/esm2020/lib/shared/services/fields/fields.utils.mjs +8 -1
- package/esm2020/lib/shared/services/profile/profile.service.mjs +2 -1
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs +106 -49
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs +106 -49
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts +1 -2
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/cases.service.d.ts +2 -1
- package/lib/shared/components/case-editor/services/cases.service.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts +1 -0
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts.map +1 -1
- package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts +1 -1
- package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts.map +1 -1
- package/lib/shared/components/event-start/services/event-start-state-machine.service.d.ts.map +1 -1
- package/lib/shared/domain/work-allocation/Task.d.ts +4 -0
- package/lib/shared/domain/work-allocation/Task.d.ts.map +1 -1
- package/lib/shared/services/fields/fields.utils.d.ts +2 -0
- package/lib/shared/services/fields/fields.utils.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -3903,6 +3903,13 @@ class FieldsUtils {
|
|
|
3903
3903
|
return '';
|
|
3904
3904
|
}
|
|
3905
3905
|
}
|
|
3906
|
+
static getUserTaskFromClientContext(clientContextStr) {
|
|
3907
|
+
if (clientContextStr) {
|
|
3908
|
+
let clientContext = JSON.parse(clientContextStr);
|
|
3909
|
+
return clientContext.client_context.user_task;
|
|
3910
|
+
}
|
|
3911
|
+
return null;
|
|
3912
|
+
}
|
|
3906
3913
|
buildCanShowPredicate(eventTrigger, form) {
|
|
3907
3914
|
const currentState = this.getCurrentEventState(eventTrigger, form);
|
|
3908
3915
|
return (page) => {
|
|
@@ -7067,6 +7074,7 @@ class ProfileService {
|
|
|
7067
7074
|
.set('experimental', 'true')
|
|
7068
7075
|
.set('Accept', ProfileService.V2_MEDIATYPE_USER_PROFILE)
|
|
7069
7076
|
.set('Content-Type', 'application/json');
|
|
7077
|
+
// Not adding client context header because header is added to call immediately afterwards
|
|
7070
7078
|
return this.httpService
|
|
7071
7079
|
.get(url, { headers, observe: 'body' })
|
|
7072
7080
|
.pipe(map((p) => plainToClass(Profile, p)));
|
|
@@ -7961,6 +7969,7 @@ class CasesService {
|
|
|
7961
7969
|
let headers = new HttpHeaders();
|
|
7962
7970
|
headers = headers.set('experimental', 'true');
|
|
7963
7971
|
headers = headers.set('Content-Type', 'application/json');
|
|
7972
|
+
headers = this.addClientContextHeader(headers);
|
|
7964
7973
|
if (Draft.isDraft(caseId)) {
|
|
7965
7974
|
headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_DRAFT_TRIGGER);
|
|
7966
7975
|
}
|
|
@@ -7971,9 +7980,11 @@ class CasesService {
|
|
|
7971
7980
|
headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_CASE_TRIGGER);
|
|
7972
7981
|
}
|
|
7973
7982
|
return this.http
|
|
7974
|
-
.get(url, { headers, observe: '
|
|
7975
|
-
.pipe(map(
|
|
7976
|
-
|
|
7983
|
+
.get(url, { headers, observe: 'response' })
|
|
7984
|
+
.pipe(map((response) => {
|
|
7985
|
+
console.log('response barking mad', response);
|
|
7986
|
+
this.updateClientContextStorage(response.headers);
|
|
7987
|
+
return FieldsUtils.handleNestedDynamicLists(response.body);
|
|
7977
7988
|
}), catchError(error => {
|
|
7978
7989
|
this.errorService.setError(error);
|
|
7979
7990
|
return throwError(error);
|
|
@@ -7982,13 +7993,17 @@ class CasesService {
|
|
|
7982
7993
|
createEvent(caseDetails, eventData) {
|
|
7983
7994
|
const caseId = caseDetails.case_id;
|
|
7984
7995
|
const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/events`;
|
|
7985
|
-
|
|
7996
|
+
let headers = new HttpHeaders()
|
|
7986
7997
|
.set('experimental', 'true')
|
|
7987
7998
|
.set('Accept', CasesService.V2_MEDIATYPE_CREATE_EVENT)
|
|
7988
7999
|
.set('Content-Type', 'application/json');
|
|
8000
|
+
headers = this.addClientContextHeader(headers);
|
|
7989
8001
|
return this.http
|
|
7990
|
-
.post(url, eventData, { headers, observe: '
|
|
7991
|
-
.pipe(
|
|
8002
|
+
.post(url, eventData, { headers, observe: 'response' })
|
|
8003
|
+
.pipe(map((response) => {
|
|
8004
|
+
this.updateClientContextStorage(response.headers);
|
|
8005
|
+
return response.body;
|
|
8006
|
+
}), catchError(error => {
|
|
7992
8007
|
this.errorService.setError(error);
|
|
7993
8008
|
return throwError(error);
|
|
7994
8009
|
}));
|
|
@@ -7996,13 +8011,17 @@ class CasesService {
|
|
|
7996
8011
|
validateCase(ctid, eventData, pageId) {
|
|
7997
8012
|
const pageIdString = pageId ? `?pageId=${pageId}` : '';
|
|
7998
8013
|
const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/validate${pageIdString}`;
|
|
7999
|
-
|
|
8014
|
+
let headers = new HttpHeaders()
|
|
8000
8015
|
.set('experimental', 'true')
|
|
8001
8016
|
.set('Accept', CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE)
|
|
8002
8017
|
.set('Content-Type', 'application/json');
|
|
8018
|
+
headers = this.addClientContextHeader(headers);
|
|
8003
8019
|
return this.http
|
|
8004
|
-
.post(url, eventData, { headers, observe: '
|
|
8005
|
-
.pipe(
|
|
8020
|
+
.post(url, eventData, { headers, observe: 'response' })
|
|
8021
|
+
.pipe(map((response) => {
|
|
8022
|
+
this.updateClientContextStorage(response.headers);
|
|
8023
|
+
return response.body;
|
|
8024
|
+
}), catchError(error => {
|
|
8006
8025
|
this.errorService.setError(error);
|
|
8007
8026
|
return throwError(error);
|
|
8008
8027
|
}));
|
|
@@ -8013,26 +8032,34 @@ class CasesService {
|
|
|
8013
8032
|
ignoreWarning = 'true';
|
|
8014
8033
|
}
|
|
8015
8034
|
const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/cases?ignore-warning=${ignoreWarning}`;
|
|
8016
|
-
|
|
8035
|
+
let headers = new HttpHeaders()
|
|
8017
8036
|
.set('experimental', 'true')
|
|
8018
8037
|
.set('Accept', CasesService.V2_MEDIATYPE_CREATE_CASE)
|
|
8019
8038
|
.set('Content-Type', 'application/json');
|
|
8039
|
+
headers = this.addClientContextHeader(headers);
|
|
8020
8040
|
return this.http
|
|
8021
|
-
.post(url, eventData, { headers, observe: '
|
|
8022
|
-
.pipe(
|
|
8041
|
+
.post(url, eventData, { headers, observe: 'response' })
|
|
8042
|
+
.pipe(map((response) => {
|
|
8043
|
+
this.updateClientContextStorage(response.headers);
|
|
8044
|
+
return response.body;
|
|
8045
|
+
}), catchError(error => {
|
|
8023
8046
|
this.errorService.setError(error);
|
|
8024
8047
|
return throwError(error);
|
|
8025
8048
|
}));
|
|
8026
8049
|
}
|
|
8027
8050
|
getPrintDocuments(caseId) {
|
|
8028
8051
|
const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/documents`;
|
|
8029
|
-
|
|
8052
|
+
let headers = new HttpHeaders()
|
|
8030
8053
|
.set('experimental', 'true')
|
|
8031
8054
|
.set('Accept', CasesService.V2_MEDIATYPE_CASE_DOCUMENTS)
|
|
8032
8055
|
.set('Content-Type', 'application/json');
|
|
8056
|
+
headers = this.addClientContextHeader(headers);
|
|
8033
8057
|
return this.http
|
|
8034
|
-
.get(url, { headers, observe: '
|
|
8035
|
-
.pipe(map(
|
|
8058
|
+
.get(url, { headers, observe: 'response' })
|
|
8059
|
+
.pipe(map((response) => {
|
|
8060
|
+
this.updateClientContextStorage(response.headers);
|
|
8061
|
+
return response.body.documentResources;
|
|
8062
|
+
}), catchError(error => {
|
|
8036
8063
|
this.errorService.setError(error);
|
|
8037
8064
|
return throwError(error);
|
|
8038
8065
|
}));
|
|
@@ -8065,17 +8092,6 @@ class CasesService {
|
|
|
8065
8092
|
wizardPage.case_fields = this.orderService.sort(this.wizardPageFieldToCaseFieldMapper.mapAll(wizardPage.wizard_page_fields, eventTrigger.case_fields));
|
|
8066
8093
|
});
|
|
8067
8094
|
}
|
|
8068
|
-
/*
|
|
8069
|
-
Checks if the user has role of pui-case-manager and returns true or false
|
|
8070
|
-
*/
|
|
8071
|
-
isPuiCaseManager() {
|
|
8072
|
-
const userInfoStr = this.sessionStorageService.getItem('userDetails');
|
|
8073
|
-
if (userInfoStr) {
|
|
8074
|
-
const userInfo = JSON.parse(userInfoStr);
|
|
8075
|
-
return userInfo && userInfo.roles && (userInfo.roles.indexOf(CasesService.PUI_CASE_MANAGER) !== -1);
|
|
8076
|
-
}
|
|
8077
|
-
return false;
|
|
8078
|
-
}
|
|
8079
8095
|
getCourtOrHearingCentreName(locationId) {
|
|
8080
8096
|
return this.http.post(`/api/locations/getLocationsById`, { locations: [{ locationId }] });
|
|
8081
8097
|
}
|
|
@@ -8120,6 +8136,25 @@ class CasesService {
|
|
|
8120
8136
|
.get(url)
|
|
8121
8137
|
.pipe(catchError(error => throwError(error)));
|
|
8122
8138
|
}
|
|
8139
|
+
addClientContextHeader(headers) {
|
|
8140
|
+
const clientContextDetails = this.sessionStorageService.getItem('clientContext');
|
|
8141
|
+
if (clientContextDetails) {
|
|
8142
|
+
// may require URI encoding in certain circumstances
|
|
8143
|
+
const clientContext = window.btoa(clientContextDetails);
|
|
8144
|
+
if (clientContext) {
|
|
8145
|
+
headers = headers.set('Client-Context', clientContext);
|
|
8146
|
+
}
|
|
8147
|
+
}
|
|
8148
|
+
return headers;
|
|
8149
|
+
}
|
|
8150
|
+
updateClientContextStorage(headers) {
|
|
8151
|
+
// for mocking - TODO: Kasi Remove/Uncomment for testing
|
|
8152
|
+
// headers = this.setMockClientContextHeader(headers);
|
|
8153
|
+
if (headers && headers.get('Client-Context')) {
|
|
8154
|
+
const clientContextString = window.atob(headers.get('Client-Context'));
|
|
8155
|
+
this.sessionStorageService.setItem('clientContext', clientContextString);
|
|
8156
|
+
}
|
|
8157
|
+
}
|
|
8123
8158
|
}
|
|
8124
8159
|
// Internal (UI) API
|
|
8125
8160
|
CasesService.V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';
|
|
@@ -8633,8 +8668,7 @@ class EventCompletionStateMachineService {
|
|
|
8633
8668
|
entryActionForStateCompleteEventAndTask(state, context) {
|
|
8634
8669
|
// Trigger final state to complete processing of state machine
|
|
8635
8670
|
state.trigger(EventCompletionStates.Final);
|
|
8636
|
-
|
|
8637
|
-
if (taskStr) {
|
|
8671
|
+
if (this.getTaskFromClientContext(context)) {
|
|
8638
8672
|
context.sessionStorageService.setItem('assignNeeded', 'false');
|
|
8639
8673
|
// just set event can be completed
|
|
8640
8674
|
context.component.eventCanBeCompleted.emit(true);
|
|
@@ -8653,9 +8687,7 @@ class EventCompletionStateMachineService {
|
|
|
8653
8687
|
entryActionForStateTaskUnassigned(state, context) {
|
|
8654
8688
|
// Trigger final state to complete processing of state machine
|
|
8655
8689
|
state.trigger(EventCompletionStates.Final);
|
|
8656
|
-
|
|
8657
|
-
const taskStr = context.sessionStorageService.getItem('taskToComplete');
|
|
8658
|
-
if (taskStr) {
|
|
8690
|
+
if (this.getTaskFromClientContext(context)) {
|
|
8659
8691
|
context.sessionStorageService.setItem('assignNeeded', 'true');
|
|
8660
8692
|
context.component.eventCanBeCompleted.emit(true);
|
|
8661
8693
|
}
|
|
@@ -8690,6 +8722,11 @@ class EventCompletionStateMachineService {
|
|
|
8690
8722
|
addTransitionsForStateTaskUnassigned() {
|
|
8691
8723
|
this.stateTaskUnassigned.addTransition(EventCompletionStates.Final, this.stateFinal);
|
|
8692
8724
|
}
|
|
8725
|
+
getTaskFromClientContext(context) {
|
|
8726
|
+
const clientContextStr = context.sessionStorageService.getItem('clientContext');
|
|
8727
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
8728
|
+
return userTask ? userTask.task_data : null;
|
|
8729
|
+
}
|
|
8693
8730
|
}
|
|
8694
8731
|
EventCompletionStateMachineService.ɵfac = function EventCompletionStateMachineService_Factory(t) { return new (t || EventCompletionStateMachineService)(); };
|
|
8695
8732
|
EventCompletionStateMachineService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventCompletionStateMachineService, factory: EventCompletionStateMachineService.ɵfac });
|
|
@@ -9158,11 +9195,9 @@ class CaseEditComponent {
|
|
|
9158
9195
|
this.isSubmitting = true;
|
|
9159
9196
|
// We have to run the event completion checks if task in session storage
|
|
9160
9197
|
// and if the task is in session storage, then is it associated to the case
|
|
9161
|
-
|
|
9162
|
-
const
|
|
9163
|
-
|
|
9164
|
-
taskInSessionStorage = JSON.parse(taskStr);
|
|
9165
|
-
}
|
|
9198
|
+
const clientContextStr = this.sessionStorageService.getItem('clientContext');
|
|
9199
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
9200
|
+
const taskInSessionStorage = userTask ? userTask.task_data : null;
|
|
9166
9201
|
if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId(caseDetails)) {
|
|
9167
9202
|
// Show event completion component to perform event completion checks
|
|
9168
9203
|
this.eventCompletionParams = ({
|
|
@@ -9361,14 +9396,16 @@ class CaseEditComponent {
|
|
|
9361
9396
|
});
|
|
9362
9397
|
}
|
|
9363
9398
|
postCompleteTaskIfRequired() {
|
|
9364
|
-
const
|
|
9399
|
+
const clientContextStr = this.sessionStorageService.getItem('clientContext');
|
|
9400
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
9401
|
+
const [task, taskToBeCompleted] = userTask ? [userTask.task_data, userTask.complete_task] : [null, false];
|
|
9365
9402
|
const assignNeeded = this.sessionStorageService.getItem('assignNeeded') === 'true';
|
|
9366
|
-
if (
|
|
9367
|
-
const task = JSON.parse(taskStr);
|
|
9403
|
+
if (task && assignNeeded && taskToBeCompleted) {
|
|
9404
|
+
// const task: Task = JSON.parse(taskStr);
|
|
9368
9405
|
return this.workAllocationService.assignAndCompleteTask(task.id);
|
|
9369
9406
|
}
|
|
9370
|
-
else if (
|
|
9371
|
-
const task = JSON.parse(taskStr);
|
|
9407
|
+
else if (task && taskToBeCompleted) {
|
|
9408
|
+
// const task: Task = JSON.parse(taskStr);
|
|
9372
9409
|
return this.workAllocationService.completeTask(task.id);
|
|
9373
9410
|
}
|
|
9374
9411
|
return of(true);
|
|
@@ -11019,8 +11056,12 @@ class CaseEventCompletionTaskReassignedComponent {
|
|
|
11019
11056
|
}
|
|
11020
11057
|
onContinue() {
|
|
11021
11058
|
// Get task details
|
|
11022
|
-
const
|
|
11023
|
-
|
|
11059
|
+
const clientContextStr = this.sessionStorageService.getItem('clientContext');
|
|
11060
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
11061
|
+
const task = userTask ? userTask.task_data : null;
|
|
11062
|
+
// not complete_task not utilised here as related to event completion
|
|
11063
|
+
// service wanting task associated with event to not be completed not directly relevant
|
|
11064
|
+
if (task) {
|
|
11024
11065
|
this.sessionStorageService.setItem('assignNeeded', 'true');
|
|
11025
11066
|
// set event can be completed to true
|
|
11026
11067
|
this.parentComponent.eventCanBeCompleted.emit(true);
|
|
@@ -35047,19 +35088,27 @@ class EventStartGuard {
|
|
|
35047
35088
|
task = tasksAssignedToUser[0];
|
|
35048
35089
|
}
|
|
35049
35090
|
// if one task assigned to user, allow user to complete event
|
|
35050
|
-
|
|
35091
|
+
const storeClientContext = {
|
|
35092
|
+
client_context: {
|
|
35093
|
+
user_task: {
|
|
35094
|
+
task_data: task,
|
|
35095
|
+
complete_task: true
|
|
35096
|
+
}
|
|
35097
|
+
}
|
|
35098
|
+
};
|
|
35099
|
+
this.sessionStorageService.setItem(EventStartGuard.CLIENT_CONTEXT, JSON.stringify(storeClientContext));
|
|
35051
35100
|
return true;
|
|
35052
35101
|
}
|
|
35053
35102
|
}
|
|
35054
35103
|
removeTaskFromSessionStorage() {
|
|
35055
|
-
this.sessionStorageService.removeItem(EventStartGuard.
|
|
35104
|
+
this.sessionStorageService.removeItem(EventStartGuard.CLIENT_CONTEXT);
|
|
35056
35105
|
}
|
|
35057
35106
|
checkForTasks(payload, caseId, eventId, taskId) {
|
|
35058
35107
|
var _a;
|
|
35059
35108
|
if (taskId && ((_a = payload === null || payload === void 0 ? void 0 : payload.tasks) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
35060
35109
|
const task = payload.tasks.find((t) => t.id == taskId);
|
|
35061
35110
|
if (task) {
|
|
35062
|
-
this.sessionStorageService.setItem(EventStartGuard.
|
|
35111
|
+
this.sessionStorageService.setItem(EventStartGuard.CLIENT_CONTEXT, JSON.stringify(task));
|
|
35063
35112
|
}
|
|
35064
35113
|
else {
|
|
35065
35114
|
this.removeTaskFromSessionStorage();
|
|
@@ -35081,7 +35130,7 @@ class EventStartGuard {
|
|
|
35081
35130
|
}
|
|
35082
35131
|
}
|
|
35083
35132
|
}
|
|
35084
|
-
EventStartGuard.
|
|
35133
|
+
EventStartGuard.CLIENT_CONTEXT = 'clientContext';
|
|
35085
35134
|
EventStartGuard.ɵfac = function EventStartGuard_Factory(t) { return new (t || EventStartGuard)(i0.ɵɵinject(WorkAllocationService), i0.ɵɵinject(i1$1.Router), i0.ɵɵinject(SessionStorageService)); };
|
|
35086
35135
|
EventStartGuard.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventStartGuard, factory: EventStartGuard.ɵfac });
|
|
35087
35136
|
(function () {
|
|
@@ -35221,9 +35270,17 @@ class EventStartStateMachineService {
|
|
|
35221
35270
|
task = context.tasks[0];
|
|
35222
35271
|
}
|
|
35223
35272
|
const taskStr = JSON.stringify(task);
|
|
35224
|
-
console.log('entryActionForStateOneTaskAssignedToUser: setting
|
|
35273
|
+
console.log('entryActionForStateOneTaskAssignedToUser: setting client context task_data to ' + taskStr);
|
|
35225
35274
|
// Store task to session
|
|
35226
|
-
|
|
35275
|
+
const clientContext = {
|
|
35276
|
+
client_context: {
|
|
35277
|
+
user_task: {
|
|
35278
|
+
task_data: task,
|
|
35279
|
+
complete_task: true
|
|
35280
|
+
}
|
|
35281
|
+
}
|
|
35282
|
+
};
|
|
35283
|
+
context.sessionStorageService.setItem('clientContext', JSON.stringify(clientContext));
|
|
35227
35284
|
// Allow user to perform the event
|
|
35228
35285
|
context.router.navigate([`/cases/case-details/${context.caseId}/trigger/${context.eventId}`], { relativeTo: context.route });
|
|
35229
35286
|
}
|