@hmcts/ccd-case-ui-toolkit 7.0.38-client-context → 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 -54
  4. package/esm2020/lib/shared/components/case-editor/services/event-completion-state-machine.service.mjs +6 -9
  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 -108
  12. package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  13. package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs +56 -108
  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,11 +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
- console.log('response barking mad', response);
7986
- this.updateClientContextStorage(response.headers);
7987
- return FieldsUtils.handleNestedDynamicLists(response.body);
7974
+ .get(url, { headers, observe: 'body' })
7975
+ .pipe(map(body => {
7976
+ return FieldsUtils.handleNestedDynamicLists(body);
7988
7977
  }), catchError(error => {
7989
7978
  this.errorService.setError(error);
7990
7979
  return throwError(error);
@@ -7993,17 +7982,13 @@ class CasesService {
7993
7982
  createEvent(caseDetails, eventData) {
7994
7983
  const caseId = caseDetails.case_id;
7995
7984
  const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/events`;
7996
- let headers = new HttpHeaders()
7985
+ const headers = new HttpHeaders()
7997
7986
  .set('experimental', 'true')
7998
7987
  .set('Accept', CasesService.V2_MEDIATYPE_CREATE_EVENT)
7999
7988
  .set('Content-Type', 'application/json');
8000
- headers = this.addClientContextHeader(headers);
8001
7989
  return this.http
8002
- .post(url, eventData, { headers, observe: 'response' })
8003
- .pipe(map((response) => {
8004
- this.updateClientContextStorage(response.headers);
8005
- return response.body;
8006
- }), catchError(error => {
7990
+ .post(url, eventData, { headers, observe: 'body' })
7991
+ .pipe(catchError(error => {
8007
7992
  this.errorService.setError(error);
8008
7993
  return throwError(error);
8009
7994
  }));
@@ -8011,17 +7996,13 @@ class CasesService {
8011
7996
  validateCase(ctid, eventData, pageId) {
8012
7997
  const pageIdString = pageId ? `?pageId=${pageId}` : '';
8013
7998
  const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/validate${pageIdString}`;
8014
- let headers = new HttpHeaders()
7999
+ const headers = new HttpHeaders()
8015
8000
  .set('experimental', 'true')
8016
8001
  .set('Accept', CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE)
8017
8002
  .set('Content-Type', 'application/json');
8018
- headers = this.addClientContextHeader(headers);
8019
8003
  return this.http
8020
- .post(url, eventData, { headers, observe: 'response' })
8021
- .pipe(map((response) => {
8022
- this.updateClientContextStorage(response.headers);
8023
- return response.body;
8024
- }), catchError(error => {
8004
+ .post(url, eventData, { headers, observe: 'body' })
8005
+ .pipe(catchError(error => {
8025
8006
  this.errorService.setError(error);
8026
8007
  return throwError(error);
8027
8008
  }));
@@ -8032,34 +8013,26 @@ class CasesService {
8032
8013
  ignoreWarning = 'true';
8033
8014
  }
8034
8015
  const url = `${this.appConfig.getCaseDataUrl()}/case-types/${ctid}/cases?ignore-warning=${ignoreWarning}`;
8035
- let headers = new HttpHeaders()
8016
+ const headers = new HttpHeaders()
8036
8017
  .set('experimental', 'true')
8037
8018
  .set('Accept', CasesService.V2_MEDIATYPE_CREATE_CASE)
8038
8019
  .set('Content-Type', 'application/json');
8039
- headers = this.addClientContextHeader(headers);
8040
8020
  return this.http
8041
- .post(url, eventData, { headers, observe: 'response' })
8042
- .pipe(map((response) => {
8043
- this.updateClientContextStorage(response.headers);
8044
- return response.body;
8045
- }), catchError(error => {
8021
+ .post(url, eventData, { headers, observe: 'body' })
8022
+ .pipe(catchError(error => {
8046
8023
  this.errorService.setError(error);
8047
8024
  return throwError(error);
8048
8025
  }));
8049
8026
  }
8050
8027
  getPrintDocuments(caseId) {
8051
8028
  const url = `${this.appConfig.getCaseDataUrl()}/cases/${caseId}/documents`;
8052
- let headers = new HttpHeaders()
8029
+ const headers = new HttpHeaders()
8053
8030
  .set('experimental', 'true')
8054
8031
  .set('Accept', CasesService.V2_MEDIATYPE_CASE_DOCUMENTS)
8055
8032
  .set('Content-Type', 'application/json');
8056
- headers = this.addClientContextHeader(headers);
8057
8033
  return this.http
8058
- .get(url, { headers, observe: 'response' })
8059
- .pipe(map((response) => {
8060
- this.updateClientContextStorage(response.headers);
8061
- return response.body.documentResources;
8062
- }), catchError(error => {
8034
+ .get(url, { headers, observe: 'body' })
8035
+ .pipe(map(body => body.documentResources), catchError(error => {
8063
8036
  this.errorService.setError(error);
8064
8037
  return throwError(error);
8065
8038
  }));
@@ -8092,6 +8065,17 @@ class CasesService {
8092
8065
  wizardPage.case_fields = this.orderService.sort(this.wizardPageFieldToCaseFieldMapper.mapAll(wizardPage.wizard_page_fields, eventTrigger.case_fields));
8093
8066
  });
8094
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
+ }
8095
8079
  getCourtOrHearingCentreName(locationId) {
8096
8080
  return this.http.post(`/api/locations/getLocationsById`, { locations: [{ locationId }] });
8097
8081
  }
@@ -8136,25 +8120,6 @@ class CasesService {
8136
8120
  .get(url)
8137
8121
  .pipe(catchError(error => throwError(error)));
8138
8122
  }
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
- }
8158
8123
  }
8159
8124
  // Internal (UI) API
8160
8125
  CasesService.V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';
@@ -8668,7 +8633,8 @@ class EventCompletionStateMachineService {
8668
8633
  entryActionForStateCompleteEventAndTask(state, context) {
8669
8634
  // Trigger final state to complete processing of state machine
8670
8635
  state.trigger(EventCompletionStates.Final);
8671
- if (this.getTaskFromClientContext(context)) {
8636
+ const taskStr = context.sessionStorageService.getItem('taskToComplete');
8637
+ if (taskStr) {
8672
8638
  context.sessionStorageService.setItem('assignNeeded', 'false');
8673
8639
  // just set event can be completed
8674
8640
  context.component.eventCanBeCompleted.emit(true);
@@ -8687,7 +8653,9 @@ class EventCompletionStateMachineService {
8687
8653
  entryActionForStateTaskUnassigned(state, context) {
8688
8654
  // Trigger final state to complete processing of state machine
8689
8655
  state.trigger(EventCompletionStates.Final);
8690
- if (this.getTaskFromClientContext(context)) {
8656
+ // Get task details
8657
+ const taskStr = context.sessionStorageService.getItem('taskToComplete');
8658
+ if (taskStr) {
8691
8659
  context.sessionStorageService.setItem('assignNeeded', 'true');
8692
8660
  context.component.eventCanBeCompleted.emit(true);
8693
8661
  }
@@ -8722,11 +8690,6 @@ class EventCompletionStateMachineService {
8722
8690
  addTransitionsForStateTaskUnassigned() {
8723
8691
  this.stateTaskUnassigned.addTransition(EventCompletionStates.Final, this.stateFinal);
8724
8692
  }
8725
- getTaskFromClientContext(context) {
8726
- const clientContextStr = context.sessionStorageService.getItem('clientContext');
8727
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
8728
- return userTask ? userTask.task_data : null;
8729
- }
8730
8693
  }
8731
8694
  EventCompletionStateMachineService.ɵfac = function EventCompletionStateMachineService_Factory(t) { return new (t || EventCompletionStateMachineService)(); };
8732
8695
  EventCompletionStateMachineService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventCompletionStateMachineService, factory: EventCompletionStateMachineService.ɵfac });
@@ -9195,9 +9158,11 @@ class CaseEditComponent {
9195
9158
  this.isSubmitting = true;
9196
9159
  // We have to run the event completion checks if task in session storage
9197
9160
  // and if the task is in session storage, then is it associated to the case
9198
- const clientContextStr = this.sessionStorageService.getItem('clientContext');
9199
- const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
9200
- 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
+ }
9201
9166
  if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId(caseDetails)) {
9202
9167
  // Show event completion component to perform event completion checks
9203
9168
  this.eventCompletionParams = ({
@@ -9396,16 +9361,14 @@ class CaseEditComponent {
9396
9361
  });
9397
9362
  }
9398
9363
  postCompleteTaskIfRequired() {
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];
9364
+ const taskStr = this.sessionStorageService.getItem('taskToComplete');
9402
9365
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded') === 'true';
9403
- if (task && assignNeeded && taskToBeCompleted) {
9404
- // const task: Task = JSON.parse(taskStr);
9366
+ if (taskStr && assignNeeded) {
9367
+ const task = JSON.parse(taskStr);
9405
9368
  return this.workAllocationService.assignAndCompleteTask(task.id);
9406
9369
  }
9407
- else if (task && taskToBeCompleted) {
9408
- // const task: Task = JSON.parse(taskStr);
9370
+ else if (taskStr) {
9371
+ const task = JSON.parse(taskStr);
9409
9372
  return this.workAllocationService.completeTask(task.id);
9410
9373
  }
9411
9374
  return of(true);
@@ -11056,12 +11019,8 @@ class CaseEventCompletionTaskReassignedComponent {
11056
11019
  }
11057
11020
  onContinue() {
11058
11021
  // Get task details
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) {
11022
+ const taskStr = this.sessionStorageService.getItem('taskToComplete');
11023
+ if (taskStr) {
11065
11024
  this.sessionStorageService.setItem('assignNeeded', 'true');
11066
11025
  // set event can be completed to true
11067
11026
  this.parentComponent.eventCanBeCompleted.emit(true);
@@ -34031,8 +33990,8 @@ class CaseFullAccessViewComponent {
34031
33990
  else {
34032
33991
  // sort with the order of CCD predefined tabs
34033
33992
  this.caseDetails.tabs.sort((aTab, bTab) => aTab.order > bTab.order ? 1 : (bTab.order > aTab.order ? -1 : 0));
34034
- // preselect the 1st order of CCD predefined tabs
34035
- const preSelectTab = this.caseDetails.tabs[0];
33993
+ // select the first tab checking if the tab is visible
33994
+ const preSelectTab = this.findPreSelectedActiveTab();
34036
33995
  this.router.navigate(['cases', 'case-details', this.caseDetails.case_id], { fragment: preSelectTab.label }).then(() => {
34037
33996
  matTab = this.tabGroup._tabs.find((x) => x.textLabel === preSelectTab.label);
34038
33997
  // Update selectedIndex only if matTab.position is a non-zero number (positive or negative); this means the
@@ -34063,6 +34022,11 @@ class CaseFullAccessViewComponent {
34063
34022
  }
34064
34023
  }
34065
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
+ }
34066
34030
  // Refactored under EXUI-110 to address infinite tab loop to use tabIndexChanged instead
34067
34031
  tabChanged(tabIndexChanged) {
34068
34032
  var _a;
@@ -35088,27 +35052,19 @@ class EventStartGuard {
35088
35052
  task = tasksAssignedToUser[0];
35089
35053
  }
35090
35054
  // if one task assigned to user, allow user to complete event
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));
35055
+ this.sessionStorageService.setItem(EventStartGuard.TASK_TO_COMPLETE, JSON.stringify(task));
35100
35056
  return true;
35101
35057
  }
35102
35058
  }
35103
35059
  removeTaskFromSessionStorage() {
35104
- this.sessionStorageService.removeItem(EventStartGuard.CLIENT_CONTEXT);
35060
+ this.sessionStorageService.removeItem(EventStartGuard.TASK_TO_COMPLETE);
35105
35061
  }
35106
35062
  checkForTasks(payload, caseId, eventId, taskId) {
35107
35063
  var _a;
35108
35064
  if (taskId && ((_a = payload === null || payload === void 0 ? void 0 : payload.tasks) === null || _a === void 0 ? void 0 : _a.length) > 0) {
35109
35065
  const task = payload.tasks.find((t) => t.id == taskId);
35110
35066
  if (task) {
35111
- this.sessionStorageService.setItem(EventStartGuard.CLIENT_CONTEXT, JSON.stringify(task));
35067
+ this.sessionStorageService.setItem(EventStartGuard.TASK_TO_COMPLETE, JSON.stringify(task));
35112
35068
  }
35113
35069
  else {
35114
35070
  this.removeTaskFromSessionStorage();
@@ -35130,7 +35086,7 @@ class EventStartGuard {
35130
35086
  }
35131
35087
  }
35132
35088
  }
35133
- EventStartGuard.CLIENT_CONTEXT = 'clientContext';
35089
+ EventStartGuard.TASK_TO_COMPLETE = 'taskToComplete';
35134
35090
  EventStartGuard.ɵfac = function EventStartGuard_Factory(t) { return new (t || EventStartGuard)(i0.ɵɵinject(WorkAllocationService), i0.ɵɵinject(i1$1.Router), i0.ɵɵinject(SessionStorageService)); };
35135
35091
  EventStartGuard.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventStartGuard, factory: EventStartGuard.ɵfac });
35136
35092
  (function () {
@@ -35270,17 +35226,9 @@ class EventStartStateMachineService {
35270
35226
  task = context.tasks[0];
35271
35227
  }
35272
35228
  const taskStr = JSON.stringify(task);
35273
- console.log('entryActionForStateOneTaskAssignedToUser: setting client context task_data to ' + taskStr);
35229
+ console.log('entryActionForStateOneTaskAssignedToUser: setting taskToComplete to ' + taskStr);
35274
35230
  // Store task to session
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));
35231
+ context.sessionStorageService.setItem('taskToComplete', taskStr);
35284
35232
  // Allow user to perform the event
35285
35233
  context.router.navigate([`/cases/case-details/${context.caseId}/trigger/${context.eventId}`], { relativeTo: context.route });
35286
35234
  }