@hmcts/ccd-case-ui-toolkit 7.0.38-client-context-2 → 7.0.38-default-tab-fix

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.
Files changed (31) hide show
  1. package/esm2020/lib/shared/components/case-editor/case-edit/case-edit.component.mjs +11 -11
  2. package/esm2020/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.mjs +14 -16
  3. package/esm2020/lib/shared/components/case-editor/services/cases.service.mjs +27 -53
  4. package/esm2020/lib/shared/components/case-editor/services/event-completion-state-machine.service.mjs +6 -14
  5. package/esm2020/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.mjs +8 -3
  6. package/esm2020/lib/shared/components/event-start/event-guard/event-start.guard.mjs +5 -13
  7. package/esm2020/lib/shared/components/event-start/services/event-start-state-machine.service.mjs +3 -11
  8. package/esm2020/lib/shared/domain/work-allocation/Task.mjs +1 -1
  9. package/esm2020/lib/shared/services/fields/fields.utils.mjs +1 -8
  10. package/esm2020/lib/shared/services/profile/profile.service.mjs +1 -2
  11. package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs +56 -112
  12. package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  13. package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs +56 -112
  14. package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  15. package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -1
  16. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts +2 -1
  17. 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
  18. package/lib/shared/components/case-editor/services/cases.service.d.ts +1 -2
  19. package/lib/shared/components/case-editor/services/cases.service.d.ts.map +1 -1
  20. package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts +0 -1
  21. package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts.map +1 -1
  22. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +1 -0
  23. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  24. package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts +1 -1
  25. package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts.map +1 -1
  26. package/lib/shared/components/event-start/services/event-start-state-machine.service.d.ts.map +1 -1
  27. package/lib/shared/domain/work-allocation/Task.d.ts +0 -4
  28. package/lib/shared/domain/work-allocation/Task.d.ts.map +1 -1
  29. package/lib/shared/services/fields/fields.utils.d.ts +0 -2
  30. package/lib/shared/services/fields/fields.utils.d.ts.map +1 -1
  31. package/package.json +1 -1
@@ -3903,13 +3903,6 @@ 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
- }
3913
3906
  buildCanShowPredicate(eventTrigger, form) {
3914
3907
  const currentState = this.getCurrentEventState(eventTrigger, form);
3915
3908
  return (page) => {
@@ -7074,7 +7067,6 @@ class ProfileService {
7074
7067
  .set('experimental', 'true')
7075
7068
  .set('Accept', ProfileService.V2_MEDIATYPE_USER_PROFILE)
7076
7069
  .set('Content-Type', 'application/json');
7077
- // Not adding client context header because header is added to call immediately afterwards
7078
7070
  return this.httpService
7079
7071
  .get(url, { headers, observe: 'body' })
7080
7072
  .pipe(map((p) => plainToClass(Profile, p)));
@@ -7969,7 +7961,6 @@ class CasesService {
7969
7961
  let headers = new HttpHeaders();
7970
7962
  headers = headers.set('experimental', 'true');
7971
7963
  headers = headers.set('Content-Type', 'application/json');
7972
- headers = this.addClientContextHeader(headers);
7973
7964
  if (Draft.isDraft(caseId)) {
7974
7965
  headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_DRAFT_TRIGGER);
7975
7966
  }
@@ -7980,10 +7971,9 @@ class CasesService {
7980
7971
  headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_CASE_TRIGGER);
7981
7972
  }
7982
7973
  return this.http
7983
- .get(url, { headers, observe: 'response' })
7984
- .pipe(map((response) => {
7985
- this.updateClientContextStorage(response.headers);
7986
- return FieldsUtils.handleNestedDynamicLists(response.body);
7974
+ .get(url, { headers, observe: 'body' })
7975
+ .pipe(map(body => {
7976
+ return FieldsUtils.handleNestedDynamicLists(body);
7987
7977
  }), catchError(error => {
7988
7978
  this.errorService.setError(error);
7989
7979
  return throwError(error);
@@ -7992,17 +7982,13 @@ class CasesService {
7992
7982
  createEvent(caseDetails, eventData) {
7993
7983
  const caseId = caseDetails.case_id;
7994
7984
  const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/events`;
7995
- let headers = new HttpHeaders()
7985
+ const headers = new HttpHeaders()
7996
7986
  .set('experimental', 'true')
7997
7987
  .set('Accept', CasesService.V2_MEDIATYPE_CREATE_EVENT)
7998
7988
  .set('Content-Type', 'application/json');
7999
- headers = this.addClientContextHeader(headers);
8000
7989
  return this.http
8001
- .post(url, eventData, { headers, observe: 'response' })
8002
- .pipe(map((response) => {
8003
- this.updateClientContextStorage(response.headers);
8004
- return response.body;
8005
- }), catchError(error => {
7990
+ .post(url, eventData, { headers, observe: 'body' })
7991
+ .pipe(catchError(error => {
8006
7992
  this.errorService.setError(error);
8007
7993
  return throwError(error);
8008
7994
  }));
@@ -8010,17 +7996,13 @@ class CasesService {
8010
7996
  validateCase(ctid, eventData, pageId) {
8011
7997
  const pageIdString = pageId ? `?pageId=${pageId}` : '';
8012
7998
  const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/validate${pageIdString}`;
8013
- let headers = new HttpHeaders()
7999
+ const headers = new HttpHeaders()
8014
8000
  .set('experimental', 'true')
8015
8001
  .set('Accept', CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE)
8016
8002
  .set('Content-Type', 'application/json');
8017
- headers = this.addClientContextHeader(headers);
8018
8003
  return this.http
8019
- .post(url, eventData, { headers, observe: 'response' })
8020
- .pipe(map((response) => {
8021
- this.updateClientContextStorage(response.headers);
8022
- return response.body;
8023
- }), catchError(error => {
8004
+ .post(url, eventData, { headers, observe: 'body' })
8005
+ .pipe(catchError(error => {
8024
8006
  this.errorService.setError(error);
8025
8007
  return throwError(error);
8026
8008
  }));
@@ -8031,34 +8013,26 @@ class CasesService {
8031
8013
  ignoreWarning = 'true';
8032
8014
  }
8033
8015
  const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/cases?ignore-warning=${ignoreWarning}`;
8034
- let headers = new HttpHeaders()
8016
+ const headers = new HttpHeaders()
8035
8017
  .set('experimental', 'true')
8036
8018
  .set('Accept', CasesService.V2_MEDIATYPE_CREATE_CASE)
8037
8019
  .set('Content-Type', 'application/json');
8038
- headers = this.addClientContextHeader(headers);
8039
8020
  return this.http
8040
- .post(url, eventData, { headers, observe: 'response' })
8041
- .pipe(map((response) => {
8042
- this.updateClientContextStorage(response.headers);
8043
- return response.body;
8044
- }), catchError(error => {
8021
+ .post(url, eventData, { headers, observe: 'body' })
8022
+ .pipe(catchError(error => {
8045
8023
  this.errorService.setError(error);
8046
8024
  return throwError(error);
8047
8025
  }));
8048
8026
  }
8049
8027
  getPrintDocuments(caseId) {
8050
8028
  const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/documents`;
8051
- let headers = new HttpHeaders()
8029
+ const headers = new HttpHeaders()
8052
8030
  .set('experimental', 'true')
8053
8031
  .set('Accept', CasesService.V2_MEDIATYPE_CASE_DOCUMENTS)
8054
8032
  .set('Content-Type', 'application/json');
8055
- headers = this.addClientContextHeader(headers);
8056
8033
  return this.http
8057
- .get(url, { headers, observe: 'response' })
8058
- .pipe(map((response) => {
8059
- this.updateClientContextStorage(response.headers);
8060
- return response.body.documentResources;
8061
- }), catchError(error => {
8034
+ .get(url, { headers, observe: 'body' })
8035
+ .pipe(map(body => body.documentResources), catchError(error => {
8062
8036
  this.errorService.setError(error);
8063
8037
  return throwError(error);
8064
8038
  }));
@@ -8091,6 +8065,17 @@ class CasesService {
8091
8065
  wizardPage.case_fields = this.orderService.sort(this.wizardPageFieldToCaseFieldMapper.mapAll(wizardPage.wizard_page_fields, eventTrigger.case_fields));
8092
8066
  });
8093
8067
  }
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
+ }
8094
8079
  getCourtOrHearingCentreName(locationId) {
8095
8080
  return this.http.post(`/api/locations/getLocationsById`, { locations: [{ locationId }] });
8096
8081
  }
@@ -8135,25 +8120,6 @@ class CasesService {
8135
8120
  .get(url)
8136
8121
  .pipe(catchError(error => throwError(error)));
8137
8122
  }
8138
- addClientContextHeader(headers) {
8139
- const clientContextDetails = this.sessionStorageService.getItem('clientContext');
8140
- if (clientContextDetails) {
8141
- // may require URI encoding in certain circumstances
8142
- const clientContext = window.btoa(clientContextDetails);
8143
- if (clientContext) {
8144
- headers = headers.set('Client-Context', clientContext);
8145
- }
8146
- }
8147
- return headers;
8148
- }
8149
- updateClientContextStorage(headers) {
8150
- // for mocking - TODO: Kasi Remove/Uncomment for testing
8151
- // headers = this.setMockClientContextHeader(headers);
8152
- if (headers && headers.get('Client-Context')) {
8153
- const clientContextString = window.atob(headers.get('Client-Context'));
8154
- this.sessionStorageService.setItem('clientContext', clientContextString);
8155
- }
8156
- }
8157
8123
  }
8158
8124
  // Internal (UI) API
8159
8125
  CasesService.V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';
@@ -8667,9 +8633,8 @@ class EventCompletionStateMachineService {
8667
8633
  entryActionForStateCompleteEventAndTask(state, context) {
8668
8634
  // Trigger final state to complete processing of state machine
8669
8635
  state.trigger(EventCompletionStates.Final);
8670
- const clientContextStr = context.sessionStorageService.getItem('clientContext');
8671
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
8672
- if (userTask === null || userTask === void 0 ? void 0 : userTask.task_data) {
8636
+ const taskStr = context.sessionStorageService.getItem('taskToComplete');
8637
+ if (taskStr) {
8673
8638
  context.sessionStorageService.setItem('assignNeeded', 'false');
8674
8639
  // just set event can be completed
8675
8640
  context.component.eventCanBeCompleted.emit(true);
@@ -8688,9 +8653,9 @@ class EventCompletionStateMachineService {
8688
8653
  entryActionForStateTaskUnassigned(state, context) {
8689
8654
  // Trigger final state to complete processing of state machine
8690
8655
  state.trigger(EventCompletionStates.Final);
8691
- const clientContextStr = context.sessionStorageService.getItem('clientContext');
8692
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
8693
- if (userTask === null || userTask === void 0 ? void 0 : userTask.task_data) {
8656
+ // Get task details
8657
+ const taskStr = context.sessionStorageService.getItem('taskToComplete');
8658
+ if (taskStr) {
8694
8659
  context.sessionStorageService.setItem('assignNeeded', 'true');
8695
8660
  context.component.eventCanBeCompleted.emit(true);
8696
8661
  }
@@ -8725,12 +8690,6 @@ class EventCompletionStateMachineService {
8725
8690
  addTransitionsForStateTaskUnassigned() {
8726
8691
  this.stateTaskUnassigned.addTransition(EventCompletionStates.Final, this.stateFinal);
8727
8692
  }
8728
- taskPresentInSessionStorage(context) {
8729
- const clientContextStr = context.sessionStorageService.getItem('clientContext');
8730
- console.log('clienht cintedt ', clientContextStr);
8731
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
8732
- return !!userTask.task_data;
8733
- }
8734
8693
  }
8735
8694
  EventCompletionStateMachineService.ɵfac = function EventCompletionStateMachineService_Factory(t) { return new (t || EventCompletionStateMachineService)(); };
8736
8695
  EventCompletionStateMachineService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventCompletionStateMachineService, factory: EventCompletionStateMachineService.ɵfac });
@@ -9199,9 +9158,11 @@ class CaseEditComponent {
9199
9158
  this.isSubmitting = true;
9200
9159
  // We have to run the event completion checks if task in session storage
9201
9160
  // and if the task is in session storage, then is it associated to the case
9202
- const clientContextStr = this.sessionStorageService.getItem('clientContext');
9203
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
9204
- const taskInSessionStorage = userTask ? userTask.task_data : null;
9161
+ let taskInSessionStorage;
9162
+ const taskStr = this.sessionStorageService.getItem('taskToComplete');
9163
+ if (taskStr) {
9164
+ taskInSessionStorage = JSON.parse(taskStr);
9165
+ }
9205
9166
  if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId(caseDetails)) {
9206
9167
  // Show event completion component to perform event completion checks
9207
9168
  this.eventCompletionParams = ({
@@ -9400,16 +9361,14 @@ class CaseEditComponent {
9400
9361
  });
9401
9362
  }
9402
9363
  postCompleteTaskIfRequired() {
9403
- const clientContextStr = this.sessionStorageService.getItem('clientContext');
9404
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
9405
- const [task, taskToBeCompleted] = userTask ? [userTask.task_data, userTask.complete_task] : [null, false];
9364
+ const taskStr = this.sessionStorageService.getItem('taskToComplete');
9406
9365
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded') === 'true';
9407
- if (task && assignNeeded && taskToBeCompleted) {
9408
- // const task: Task = JSON.parse(taskStr);
9366
+ if (taskStr && assignNeeded) {
9367
+ const task = JSON.parse(taskStr);
9409
9368
  return this.workAllocationService.assignAndCompleteTask(task.id);
9410
9369
  }
9411
- else if (task && taskToBeCompleted) {
9412
- // const task: Task = JSON.parse(taskStr);
9370
+ else if (taskStr) {
9371
+ const task = JSON.parse(taskStr);
9413
9372
  return this.workAllocationService.completeTask(task.id);
9414
9373
  }
9415
9374
  return of(true);
@@ -11060,12 +11019,8 @@ class CaseEventCompletionTaskReassignedComponent {
11060
11019
  }
11061
11020
  onContinue() {
11062
11021
  // Get task details
11063
- const clientContextStr = this.sessionStorageService.getItem('clientContext');
11064
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
11065
- const task = userTask ? userTask.task_data : null;
11066
- // not complete_task not utilised here as related to event completion
11067
- // service wanting task associated with event to not be completed not directly relevant
11068
- if (task) {
11022
+ const taskStr = this.sessionStorageService.getItem('taskToComplete');
11023
+ if (taskStr) {
11069
11024
  this.sessionStorageService.setItem('assignNeeded', 'true');
11070
11025
  // set event can be completed to true
11071
11026
  this.parentComponent.eventCanBeCompleted.emit(true);
@@ -34035,8 +33990,8 @@ class CaseFullAccessViewComponent {
34035
33990
  else {
34036
33991
  // sort with the order of CCD predefined tabs
34037
33992
  this.caseDetails.tabs.sort((aTab, bTab) => aTab.order > bTab.order ? 1 : (bTab.order > aTab.order ? -1 : 0));
34038
- // preselect the 1st order of CCD predefined tabs
34039
- const preSelectTab = this.caseDetails.tabs[0];
33993
+ // select the first tab checking if the tab is visible
33994
+ const preSelectTab = this.findPreSelectedActiveTab();
34040
33995
  this.router.navigate(['cases', 'case-details', this.caseDetails.case_id], { fragment: preSelectTab.label }).then(() => {
34041
33996
  matTab = this.tabGroup._tabs.find((x) => x.textLabel === preSelectTab.label);
34042
33997
  // Update selectedIndex only if matTab.position is a non-zero number (positive or negative); this means the
@@ -34067,6 +34022,11 @@ class CaseFullAccessViewComponent {
34067
34022
  }
34068
34023
  }
34069
34024
  }
34025
+ findPreSelectedActiveTab() {
34026
+ const unOrderedTabsInSortedTabs = this.caseDetails.tabs
34027
+ .filter((tab) => !tab.order && this.sortedTabs.some((sortedTab) => sortedTab.id === tab.id));
34028
+ return unOrderedTabsInSortedTabs.length ? unOrderedTabsInSortedTabs[0] : this.sortedTabs[0];
34029
+ }
34070
34030
  // Refactored under EXUI-110 to address infinite tab loop to use tabIndexChanged instead
34071
34031
  tabChanged(tabIndexChanged) {
34072
34032
  var _a;
@@ -35092,27 +35052,19 @@ class EventStartGuard {
35092
35052
  task = tasksAssignedToUser[0];
35093
35053
  }
35094
35054
  // if one task assigned to user, allow user to complete event
35095
- const storeClientContext = {
35096
- client_context: {
35097
- user_task: {
35098
- task_data: task,
35099
- complete_task: true
35100
- }
35101
- }
35102
- };
35103
- this.sessionStorageService.setItem(EventStartGuard.CLIENT_CONTEXT, JSON.stringify(storeClientContext));
35055
+ this.sessionStorageService.setItem(EventStartGuard.TASK_TO_COMPLETE, JSON.stringify(task));
35104
35056
  return true;
35105
35057
  }
35106
35058
  }
35107
35059
  removeTaskFromSessionStorage() {
35108
- this.sessionStorageService.removeItem(EventStartGuard.CLIENT_CONTEXT);
35060
+ this.sessionStorageService.removeItem(EventStartGuard.TASK_TO_COMPLETE);
35109
35061
  }
35110
35062
  checkForTasks(payload, caseId, eventId, taskId) {
35111
35063
  var _a;
35112
35064
  if (taskId && ((_a = payload === null || payload === void 0 ? void 0 : payload.tasks) === null || _a === void 0 ? void 0 : _a.length) > 0) {
35113
35065
  const task = payload.tasks.find((t) => t.id == taskId);
35114
35066
  if (task) {
35115
- this.sessionStorageService.setItem(EventStartGuard.CLIENT_CONTEXT, JSON.stringify(task));
35067
+ this.sessionStorageService.setItem(EventStartGuard.TASK_TO_COMPLETE, JSON.stringify(task));
35116
35068
  }
35117
35069
  else {
35118
35070
  this.removeTaskFromSessionStorage();
@@ -35134,7 +35086,7 @@ class EventStartGuard {
35134
35086
  }
35135
35087
  }
35136
35088
  }
35137
- EventStartGuard.CLIENT_CONTEXT = 'clientContext';
35089
+ EventStartGuard.TASK_TO_COMPLETE = 'taskToComplete';
35138
35090
  EventStartGuard.ɵfac = function EventStartGuard_Factory(t) { return new (t || EventStartGuard)(i0.ɵɵinject(WorkAllocationService), i0.ɵɵinject(i1$1.Router), i0.ɵɵinject(SessionStorageService)); };
35139
35091
  EventStartGuard.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventStartGuard, factory: EventStartGuard.ɵfac });
35140
35092
  (function () {
@@ -35274,17 +35226,9 @@ class EventStartStateMachineService {
35274
35226
  task = context.tasks[0];
35275
35227
  }
35276
35228
  const taskStr = JSON.stringify(task);
35277
- console.log('entryActionForStateOneTaskAssignedToUser: setting client context task_data to ' + taskStr);
35229
+ console.log('entryActionForStateOneTaskAssignedToUser: setting taskToComplete to ' + taskStr);
35278
35230
  // Store task to session
35279
- const clientContext = {
35280
- client_context: {
35281
- user_task: {
35282
- task_data: task,
35283
- complete_task: true
35284
- }
35285
- }
35286
- };
35287
- context.sessionStorageService.setItem('clientContext', JSON.stringify(clientContext));
35231
+ context.sessionStorageService.setItem('taskToComplete', taskStr);
35288
35232
  // Allow user to perform the event
35289
35233
  context.router.navigate([`/cases/case-details/${context.caseId}/trigger/${context.eventId}`], { relativeTo: context.route });
35290
35234
  }