@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
|
@@ -3909,6 +3909,13 @@ class FieldsUtils {
|
|
|
3909
3909
|
return '';
|
|
3910
3910
|
}
|
|
3911
3911
|
}
|
|
3912
|
+
static getUserTaskFromClientContext(clientContextStr) {
|
|
3913
|
+
if (clientContextStr) {
|
|
3914
|
+
let clientContext = JSON.parse(clientContextStr);
|
|
3915
|
+
return clientContext.client_context.user_task;
|
|
3916
|
+
}
|
|
3917
|
+
return null;
|
|
3918
|
+
}
|
|
3912
3919
|
buildCanShowPredicate(eventTrigger, form) {
|
|
3913
3920
|
const currentState = this.getCurrentEventState(eventTrigger, form);
|
|
3914
3921
|
return (page) => {
|
|
@@ -6801,6 +6808,7 @@ class ProfileService {
|
|
|
6801
6808
|
.set('experimental', 'true')
|
|
6802
6809
|
.set('Accept', ProfileService.V2_MEDIATYPE_USER_PROFILE)
|
|
6803
6810
|
.set('Content-Type', 'application/json');
|
|
6811
|
+
// Not adding client context header because header is added to call immediately afterwards
|
|
6804
6812
|
return this.httpService
|
|
6805
6813
|
.get(url, { headers, observe: 'body' })
|
|
6806
6814
|
.pipe(map((p) => plainToClass(Profile, p)));
|
|
@@ -7667,6 +7675,7 @@ class CasesService {
|
|
|
7667
7675
|
let headers = new HttpHeaders();
|
|
7668
7676
|
headers = headers.set('experimental', 'true');
|
|
7669
7677
|
headers = headers.set('Content-Type', 'application/json');
|
|
7678
|
+
headers = this.addClientContextHeader(headers);
|
|
7670
7679
|
if (Draft.isDraft(caseId)) {
|
|
7671
7680
|
headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_DRAFT_TRIGGER);
|
|
7672
7681
|
}
|
|
@@ -7677,9 +7686,11 @@ class CasesService {
|
|
|
7677
7686
|
headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_CASE_TRIGGER);
|
|
7678
7687
|
}
|
|
7679
7688
|
return this.http
|
|
7680
|
-
.get(url, { headers, observe: '
|
|
7681
|
-
.pipe(map(
|
|
7682
|
-
|
|
7689
|
+
.get(url, { headers, observe: 'response' })
|
|
7690
|
+
.pipe(map((response) => {
|
|
7691
|
+
console.log('response barking mad', response);
|
|
7692
|
+
this.updateClientContextStorage(response.headers);
|
|
7693
|
+
return FieldsUtils.handleNestedDynamicLists(response.body);
|
|
7683
7694
|
}), catchError(error => {
|
|
7684
7695
|
this.errorService.setError(error);
|
|
7685
7696
|
return throwError(error);
|
|
@@ -7688,13 +7699,17 @@ class CasesService {
|
|
|
7688
7699
|
createEvent(caseDetails, eventData) {
|
|
7689
7700
|
const caseId = caseDetails.case_id;
|
|
7690
7701
|
const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/events`;
|
|
7691
|
-
|
|
7702
|
+
let headers = new HttpHeaders()
|
|
7692
7703
|
.set('experimental', 'true')
|
|
7693
7704
|
.set('Accept', CasesService.V2_MEDIATYPE_CREATE_EVENT)
|
|
7694
7705
|
.set('Content-Type', 'application/json');
|
|
7706
|
+
headers = this.addClientContextHeader(headers);
|
|
7695
7707
|
return this.http
|
|
7696
|
-
.post(url, eventData, { headers, observe: '
|
|
7697
|
-
.pipe(
|
|
7708
|
+
.post(url, eventData, { headers, observe: 'response' })
|
|
7709
|
+
.pipe(map((response) => {
|
|
7710
|
+
this.updateClientContextStorage(response.headers);
|
|
7711
|
+
return response.body;
|
|
7712
|
+
}), catchError(error => {
|
|
7698
7713
|
this.errorService.setError(error);
|
|
7699
7714
|
return throwError(error);
|
|
7700
7715
|
}));
|
|
@@ -7702,13 +7717,17 @@ class CasesService {
|
|
|
7702
7717
|
validateCase(ctid, eventData, pageId) {
|
|
7703
7718
|
const pageIdString = pageId ? `?pageId=${pageId}` : '';
|
|
7704
7719
|
const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/validate${pageIdString}`;
|
|
7705
|
-
|
|
7720
|
+
let headers = new HttpHeaders()
|
|
7706
7721
|
.set('experimental', 'true')
|
|
7707
7722
|
.set('Accept', CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE)
|
|
7708
7723
|
.set('Content-Type', 'application/json');
|
|
7724
|
+
headers = this.addClientContextHeader(headers);
|
|
7709
7725
|
return this.http
|
|
7710
|
-
.post(url, eventData, { headers, observe: '
|
|
7711
|
-
.pipe(
|
|
7726
|
+
.post(url, eventData, { headers, observe: 'response' })
|
|
7727
|
+
.pipe(map((response) => {
|
|
7728
|
+
this.updateClientContextStorage(response.headers);
|
|
7729
|
+
return response.body;
|
|
7730
|
+
}), catchError(error => {
|
|
7712
7731
|
this.errorService.setError(error);
|
|
7713
7732
|
return throwError(error);
|
|
7714
7733
|
}));
|
|
@@ -7719,26 +7738,34 @@ class CasesService {
|
|
|
7719
7738
|
ignoreWarning = 'true';
|
|
7720
7739
|
}
|
|
7721
7740
|
const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/cases?ignore-warning=${ignoreWarning}`;
|
|
7722
|
-
|
|
7741
|
+
let headers = new HttpHeaders()
|
|
7723
7742
|
.set('experimental', 'true')
|
|
7724
7743
|
.set('Accept', CasesService.V2_MEDIATYPE_CREATE_CASE)
|
|
7725
7744
|
.set('Content-Type', 'application/json');
|
|
7745
|
+
headers = this.addClientContextHeader(headers);
|
|
7726
7746
|
return this.http
|
|
7727
|
-
.post(url, eventData, { headers, observe: '
|
|
7728
|
-
.pipe(
|
|
7747
|
+
.post(url, eventData, { headers, observe: 'response' })
|
|
7748
|
+
.pipe(map((response) => {
|
|
7749
|
+
this.updateClientContextStorage(response.headers);
|
|
7750
|
+
return response.body;
|
|
7751
|
+
}), catchError(error => {
|
|
7729
7752
|
this.errorService.setError(error);
|
|
7730
7753
|
return throwError(error);
|
|
7731
7754
|
}));
|
|
7732
7755
|
}
|
|
7733
7756
|
getPrintDocuments(caseId) {
|
|
7734
7757
|
const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/documents`;
|
|
7735
|
-
|
|
7758
|
+
let headers = new HttpHeaders()
|
|
7736
7759
|
.set('experimental', 'true')
|
|
7737
7760
|
.set('Accept', CasesService.V2_MEDIATYPE_CASE_DOCUMENTS)
|
|
7738
7761
|
.set('Content-Type', 'application/json');
|
|
7762
|
+
headers = this.addClientContextHeader(headers);
|
|
7739
7763
|
return this.http
|
|
7740
|
-
.get(url, { headers, observe: '
|
|
7741
|
-
.pipe(map(
|
|
7764
|
+
.get(url, { headers, observe: 'response' })
|
|
7765
|
+
.pipe(map((response) => {
|
|
7766
|
+
this.updateClientContextStorage(response.headers);
|
|
7767
|
+
return response.body.documentResources;
|
|
7768
|
+
}), catchError(error => {
|
|
7742
7769
|
this.errorService.setError(error);
|
|
7743
7770
|
return throwError(error);
|
|
7744
7771
|
}));
|
|
@@ -7771,17 +7798,6 @@ class CasesService {
|
|
|
7771
7798
|
wizardPage.case_fields = this.orderService.sort(this.wizardPageFieldToCaseFieldMapper.mapAll(wizardPage.wizard_page_fields, eventTrigger.case_fields));
|
|
7772
7799
|
});
|
|
7773
7800
|
}
|
|
7774
|
-
/*
|
|
7775
|
-
Checks if the user has role of pui-case-manager and returns true or false
|
|
7776
|
-
*/
|
|
7777
|
-
isPuiCaseManager() {
|
|
7778
|
-
const userInfoStr = this.sessionStorageService.getItem('userDetails');
|
|
7779
|
-
if (userInfoStr) {
|
|
7780
|
-
const userInfo = JSON.parse(userInfoStr);
|
|
7781
|
-
return userInfo && userInfo.roles && (userInfo.roles.indexOf(CasesService.PUI_CASE_MANAGER) !== -1);
|
|
7782
|
-
}
|
|
7783
|
-
return false;
|
|
7784
|
-
}
|
|
7785
7801
|
getCourtOrHearingCentreName(locationId) {
|
|
7786
7802
|
return this.http.post(`/api/locations/getLocationsById`, { locations: [{ locationId }] });
|
|
7787
7803
|
}
|
|
@@ -7848,6 +7864,25 @@ class CasesService {
|
|
|
7848
7864
|
.get(url)
|
|
7849
7865
|
.pipe(catchError(error => throwError(error)));
|
|
7850
7866
|
}
|
|
7867
|
+
addClientContextHeader(headers) {
|
|
7868
|
+
const clientContextDetails = this.sessionStorageService.getItem('clientContext');
|
|
7869
|
+
if (clientContextDetails) {
|
|
7870
|
+
// may require URI encoding in certain circumstances
|
|
7871
|
+
const clientContext = window.btoa(clientContextDetails);
|
|
7872
|
+
if (clientContext) {
|
|
7873
|
+
headers = headers.set('Client-Context', clientContext);
|
|
7874
|
+
}
|
|
7875
|
+
}
|
|
7876
|
+
return headers;
|
|
7877
|
+
}
|
|
7878
|
+
updateClientContextStorage(headers) {
|
|
7879
|
+
// for mocking - TODO: Kasi Remove/Uncomment for testing
|
|
7880
|
+
// headers = this.setMockClientContextHeader(headers);
|
|
7881
|
+
if (headers && headers.get('Client-Context')) {
|
|
7882
|
+
const clientContextString = window.atob(headers.get('Client-Context'));
|
|
7883
|
+
this.sessionStorageService.setItem('clientContext', clientContextString);
|
|
7884
|
+
}
|
|
7885
|
+
}
|
|
7851
7886
|
}
|
|
7852
7887
|
// Internal (UI) API
|
|
7853
7888
|
CasesService.V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';
|
|
@@ -8338,8 +8373,7 @@ class EventCompletionStateMachineService {
|
|
|
8338
8373
|
entryActionForStateCompleteEventAndTask(state, context) {
|
|
8339
8374
|
// Trigger final state to complete processing of state machine
|
|
8340
8375
|
state.trigger(EventCompletionStates.Final);
|
|
8341
|
-
|
|
8342
|
-
if (taskStr) {
|
|
8376
|
+
if (this.getTaskFromClientContext(context)) {
|
|
8343
8377
|
context.sessionStorageService.setItem('assignNeeded', 'false');
|
|
8344
8378
|
// just set event can be completed
|
|
8345
8379
|
context.component.eventCanBeCompleted.emit(true);
|
|
@@ -8358,9 +8392,7 @@ class EventCompletionStateMachineService {
|
|
|
8358
8392
|
entryActionForStateTaskUnassigned(state, context) {
|
|
8359
8393
|
// Trigger final state to complete processing of state machine
|
|
8360
8394
|
state.trigger(EventCompletionStates.Final);
|
|
8361
|
-
|
|
8362
|
-
const taskStr = context.sessionStorageService.getItem('taskToComplete');
|
|
8363
|
-
if (taskStr) {
|
|
8395
|
+
if (this.getTaskFromClientContext(context)) {
|
|
8364
8396
|
context.sessionStorageService.setItem('assignNeeded', 'true');
|
|
8365
8397
|
context.component.eventCanBeCompleted.emit(true);
|
|
8366
8398
|
}
|
|
@@ -8395,6 +8427,11 @@ class EventCompletionStateMachineService {
|
|
|
8395
8427
|
addTransitionsForStateTaskUnassigned() {
|
|
8396
8428
|
this.stateTaskUnassigned.addTransition(EventCompletionStates.Final, this.stateFinal);
|
|
8397
8429
|
}
|
|
8430
|
+
getTaskFromClientContext(context) {
|
|
8431
|
+
const clientContextStr = context.sessionStorageService.getItem('clientContext');
|
|
8432
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
8433
|
+
return userTask ? userTask.task_data : null;
|
|
8434
|
+
}
|
|
8398
8435
|
}
|
|
8399
8436
|
EventCompletionStateMachineService.ɵfac = function EventCompletionStateMachineService_Factory(t) { return new (t || EventCompletionStateMachineService)(); };
|
|
8400
8437
|
EventCompletionStateMachineService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventCompletionStateMachineService, factory: EventCompletionStateMachineService.ɵfac });
|
|
@@ -8853,11 +8890,9 @@ class CaseEditComponent {
|
|
|
8853
8890
|
this.isSubmitting = true;
|
|
8854
8891
|
// We have to run the event completion checks if task in session storage
|
|
8855
8892
|
// and if the task is in session storage, then is it associated to the case
|
|
8856
|
-
|
|
8857
|
-
const
|
|
8858
|
-
|
|
8859
|
-
taskInSessionStorage = JSON.parse(taskStr);
|
|
8860
|
-
}
|
|
8893
|
+
const clientContextStr = this.sessionStorageService.getItem('clientContext');
|
|
8894
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
8895
|
+
const taskInSessionStorage = userTask ? userTask.task_data : null;
|
|
8861
8896
|
if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId(caseDetails)) {
|
|
8862
8897
|
// Show event completion component to perform event completion checks
|
|
8863
8898
|
this.eventCompletionParams = ({
|
|
@@ -9056,14 +9091,16 @@ class CaseEditComponent {
|
|
|
9056
9091
|
});
|
|
9057
9092
|
}
|
|
9058
9093
|
postCompleteTaskIfRequired() {
|
|
9059
|
-
const
|
|
9094
|
+
const clientContextStr = this.sessionStorageService.getItem('clientContext');
|
|
9095
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
9096
|
+
const [task, taskToBeCompleted] = userTask ? [userTask.task_data, userTask.complete_task] : [null, false];
|
|
9060
9097
|
const assignNeeded = this.sessionStorageService.getItem('assignNeeded') === 'true';
|
|
9061
|
-
if (
|
|
9062
|
-
const task = JSON.parse(taskStr);
|
|
9098
|
+
if (task && assignNeeded && taskToBeCompleted) {
|
|
9099
|
+
// const task: Task = JSON.parse(taskStr);
|
|
9063
9100
|
return this.workAllocationService.assignAndCompleteTask(task.id);
|
|
9064
9101
|
}
|
|
9065
|
-
else if (
|
|
9066
|
-
const task = JSON.parse(taskStr);
|
|
9102
|
+
else if (task && taskToBeCompleted) {
|
|
9103
|
+
// const task: Task = JSON.parse(taskStr);
|
|
9067
9104
|
return this.workAllocationService.completeTask(task.id);
|
|
9068
9105
|
}
|
|
9069
9106
|
return of(true);
|
|
@@ -10587,8 +10624,12 @@ class CaseEventCompletionTaskReassignedComponent {
|
|
|
10587
10624
|
}
|
|
10588
10625
|
onContinue() {
|
|
10589
10626
|
// Get task details
|
|
10590
|
-
const
|
|
10591
|
-
|
|
10627
|
+
const clientContextStr = this.sessionStorageService.getItem('clientContext');
|
|
10628
|
+
const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
|
|
10629
|
+
const task = userTask ? userTask.task_data : null;
|
|
10630
|
+
// not complete_task not utilised here as related to event completion
|
|
10631
|
+
// service wanting task associated with event to not be completed not directly relevant
|
|
10632
|
+
if (task) {
|
|
10592
10633
|
this.sessionStorageService.setItem('assignNeeded', 'true');
|
|
10593
10634
|
// set event can be completed to true
|
|
10594
10635
|
this.parentComponent.eventCanBeCompleted.emit(true);
|
|
@@ -32312,18 +32353,26 @@ class EventStartGuard {
|
|
|
32312
32353
|
task = tasksAssignedToUser[0];
|
|
32313
32354
|
}
|
|
32314
32355
|
// if one task assigned to user, allow user to complete event
|
|
32315
|
-
|
|
32356
|
+
const storeClientContext = {
|
|
32357
|
+
client_context: {
|
|
32358
|
+
user_task: {
|
|
32359
|
+
task_data: task,
|
|
32360
|
+
complete_task: true
|
|
32361
|
+
}
|
|
32362
|
+
}
|
|
32363
|
+
};
|
|
32364
|
+
this.sessionStorageService.setItem(EventStartGuard.CLIENT_CONTEXT, JSON.stringify(storeClientContext));
|
|
32316
32365
|
return true;
|
|
32317
32366
|
}
|
|
32318
32367
|
}
|
|
32319
32368
|
removeTaskFromSessionStorage() {
|
|
32320
|
-
this.sessionStorageService.removeItem(EventStartGuard.
|
|
32369
|
+
this.sessionStorageService.removeItem(EventStartGuard.CLIENT_CONTEXT);
|
|
32321
32370
|
}
|
|
32322
32371
|
checkForTasks(payload, caseId, eventId, taskId) {
|
|
32323
32372
|
if (taskId && payload?.tasks?.length > 0) {
|
|
32324
32373
|
const task = payload.tasks.find((t) => t.id == taskId);
|
|
32325
32374
|
if (task) {
|
|
32326
|
-
this.sessionStorageService.setItem(EventStartGuard.
|
|
32375
|
+
this.sessionStorageService.setItem(EventStartGuard.CLIENT_CONTEXT, JSON.stringify(task));
|
|
32327
32376
|
}
|
|
32328
32377
|
else {
|
|
32329
32378
|
this.removeTaskFromSessionStorage();
|
|
@@ -32345,7 +32394,7 @@ class EventStartGuard {
|
|
|
32345
32394
|
}
|
|
32346
32395
|
}
|
|
32347
32396
|
}
|
|
32348
|
-
EventStartGuard.
|
|
32397
|
+
EventStartGuard.CLIENT_CONTEXT = 'clientContext';
|
|
32349
32398
|
EventStartGuard.ɵfac = function EventStartGuard_Factory(t) { return new (t || EventStartGuard)(i0.ɵɵinject(WorkAllocationService), i0.ɵɵinject(i1$1.Router), i0.ɵɵinject(SessionStorageService)); };
|
|
32350
32399
|
EventStartGuard.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventStartGuard, factory: EventStartGuard.ɵfac });
|
|
32351
32400
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventStartGuard, [{
|
|
@@ -32483,9 +32532,17 @@ class EventStartStateMachineService {
|
|
|
32483
32532
|
task = context.tasks[0];
|
|
32484
32533
|
}
|
|
32485
32534
|
const taskStr = JSON.stringify(task);
|
|
32486
|
-
console.log('entryActionForStateOneTaskAssignedToUser: setting
|
|
32535
|
+
console.log('entryActionForStateOneTaskAssignedToUser: setting client context task_data to ' + taskStr);
|
|
32487
32536
|
// Store task to session
|
|
32488
|
-
|
|
32537
|
+
const clientContext = {
|
|
32538
|
+
client_context: {
|
|
32539
|
+
user_task: {
|
|
32540
|
+
task_data: task,
|
|
32541
|
+
complete_task: true
|
|
32542
|
+
}
|
|
32543
|
+
}
|
|
32544
|
+
};
|
|
32545
|
+
context.sessionStorageService.setItem('clientContext', JSON.stringify(clientContext));
|
|
32489
32546
|
// Allow user to perform the event
|
|
32490
32547
|
context.router.navigate([`/cases/case-details/${context.caseId}/trigger/${context.eventId}`], { relativeTo: context.route });
|
|
32491
32548
|
}
|