@hmcts/ccd-case-ui-toolkit 7.0.12 → 7.0.13

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.
@@ -4534,6 +4534,7 @@ class Constants {
4534
4534
  }
4535
4535
  Constants.MANDATORY = 'MANDATORY';
4536
4536
  Constants.REGEX_WHITESPACES = '^[^ ]+(?:\\s+[^ ]+)*$';
4537
+ Constants.TASK_COMPLETION_ERROR = 'The associated task for this event failed to complete automatically. Please complete the task manually in the Tasks tab on the case';
4537
4538
  Constants.ɵfac = function Constants_Factory(t) { return new (t || Constants)(); };
4538
4539
  Constants.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Constants, factory: Constants.ɵfac });
4539
4540
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(Constants, [{
@@ -8656,7 +8657,7 @@ ValidPageListCaseFieldsService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({
8656
8657
  }], function () { return [{ type: FieldsUtils }]; }, null); })();
8657
8658
 
8658
8659
  class CaseEditComponent {
8659
- constructor(fb, caseNotifier, router, route, fieldsUtils, fieldsPurger, registrarService, wizardFactory, sessionStorageService, windowsService, formValueService, formErrorService, loadingService, validPageListCaseFieldsService, workAllocationService) {
8660
+ constructor(fb, caseNotifier, router, route, fieldsUtils, fieldsPurger, registrarService, wizardFactory, sessionStorageService, windowsService, formValueService, formErrorService, loadingService, validPageListCaseFieldsService, workAllocationService, alertService) {
8660
8661
  this.fb = fb;
8661
8662
  this.caseNotifier = caseNotifier;
8662
8663
  this.router = router;
@@ -8672,6 +8673,7 @@ class CaseEditComponent {
8672
8673
  this.loadingService = loadingService;
8673
8674
  this.validPageListCaseFieldsService = validPageListCaseFieldsService;
8674
8675
  this.workAllocationService = workAllocationService;
8676
+ this.alertService = alertService;
8675
8677
  this.cancelled = new EventEmitter();
8676
8678
  this.submitted = new EventEmitter();
8677
8679
  this.isEventCompletionChecksRequired = false;
@@ -8960,6 +8962,7 @@ class CaseEditComponent {
8960
8962
  const loadingSpinnerToken = this.loadingService.register();
8961
8963
  // keep the initial event response to finalise process after task completion
8962
8964
  let eventResponse;
8965
+ this.sessionStorageService.setItem('taskCompletionError', 'false');
8963
8966
  submit(caseEventData).pipe(switchMap((response) => {
8964
8967
  eventResponse = response;
8965
8968
  return this.postCompleteTaskIfRequired();
@@ -8981,10 +8984,13 @@ class CaseEditComponent {
8981
8984
  this.isSubmitting = false;
8982
8985
  }
8983
8986
  else {
8987
+ this.sessionStorageService.setItem('taskCompletionError', 'true');
8984
8988
  // task assignment/completion error - handled within workallocation service
8985
8989
  // could set task to be deleted (or completed later)?
8986
- // note: think error messages only shown if user is caseworker - might reqauire changing
8987
8990
  this.finishEventCompletionLogic(eventResponse);
8991
+ // below allows error to be shown on navigation to confirmation page
8992
+ this.alertService.setPreserveAlerts(true);
8993
+ this.alertService.error({ phrase: Constants.TASK_COMPLETION_ERROR });
8988
8994
  }
8989
8995
  });
8990
8996
  }
@@ -9040,14 +9046,14 @@ class CaseEditComponent {
9040
9046
  }
9041
9047
  CaseEditComponent.ORIGIN_QUERY_PARAM = 'origin';
9042
9048
  CaseEditComponent.ALERT_MESSAGE = 'Page is being refreshed so you will be redirected to the first page of this event.';
9043
- CaseEditComponent.ɵfac = function CaseEditComponent_Factory(t) { return new (t || CaseEditComponent)(i0.ɵɵdirectiveInject(i3.FormBuilder), i0.ɵɵdirectiveInject(CaseNotifier), i0.ɵɵdirectiveInject(i1$1.Router), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(FieldsUtils), i0.ɵɵdirectiveInject(FieldsPurger), i0.ɵɵdirectiveInject(ConditionalShowRegistrarService), i0.ɵɵdirectiveInject(WizardFactoryService), i0.ɵɵdirectiveInject(SessionStorageService), i0.ɵɵdirectiveInject(WindowService), i0.ɵɵdirectiveInject(FormValueService), i0.ɵɵdirectiveInject(FormErrorService), i0.ɵɵdirectiveInject(LoadingService), i0.ɵɵdirectiveInject(ValidPageListCaseFieldsService), i0.ɵɵdirectiveInject(WorkAllocationService)); };
9049
+ CaseEditComponent.ɵfac = function CaseEditComponent_Factory(t) { return new (t || CaseEditComponent)(i0.ɵɵdirectiveInject(i3.FormBuilder), i0.ɵɵdirectiveInject(CaseNotifier), i0.ɵɵdirectiveInject(i1$1.Router), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(FieldsUtils), i0.ɵɵdirectiveInject(FieldsPurger), i0.ɵɵdirectiveInject(ConditionalShowRegistrarService), i0.ɵɵdirectiveInject(WizardFactoryService), i0.ɵɵdirectiveInject(SessionStorageService), i0.ɵɵdirectiveInject(WindowService), i0.ɵɵdirectiveInject(FormValueService), i0.ɵɵdirectiveInject(FormErrorService), i0.ɵɵdirectiveInject(LoadingService), i0.ɵɵdirectiveInject(ValidPageListCaseFieldsService), i0.ɵɵdirectiveInject(WorkAllocationService), i0.ɵɵdirectiveInject(AlertService)); };
9044
9050
  CaseEditComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditComponent, selectors: [["ccd-case-edit"]], inputs: { eventTrigger: "eventTrigger", submit: "submit", validate: "validate", saveDraft: "saveDraft", caseDetails: "caseDetails" }, outputs: { cancelled: "cancelled", submitted: "submitted" }, features: [i0.ɵɵProvidersFeature([GreyBarService])], decls: 1, vars: 0, template: function CaseEditComponent_Template(rf, ctx) { if (rf & 1) {
9045
9051
  i0.ɵɵelement(0, "router-outlet");
9046
9052
  } }, dependencies: [i1$1.RouterOutlet], styles: ["#fieldset-case-data[_ngcontent-%COMP%]{margin-bottom:30px}#fieldset-case-data[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{width:1%;white-space:nowrap;vertical-align:top}.compound-field[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:0}#confirmation-header[_ngcontent-%COMP%]{width:630px;background-color:#17958b;border:solid 1px #979797;color:#fff;text-align:center}#confirmation-body[_ngcontent-%COMP%]{width:630px;background-color:#fff}.valign-top[_ngcontent-%COMP%]{vertical-align:top}.summary-fields[_ngcontent-%COMP%]{margin-bottom:30px}.summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border-bottom:0px}a.disabled[_ngcontent-%COMP%]{pointer-events:none;cursor:default}.case-field-label[_ngcontent-%COMP%]{width:45%}.case-field-content[_ngcontent-%COMP%]{width:50%}.no-bottom-border[_ngcontent-%COMP%]{border-bottom:none}.case-field-change[_ngcontent-%COMP%]{width:5%}"] });
9047
9053
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditComponent, [{
9048
9054
  type: Component,
9049
9055
  args: [{ selector: 'ccd-case-edit', providers: [GreyBarService], template: "<router-outlet></router-outlet>\n", styles: ["#fieldset-case-data{margin-bottom:30px}#fieldset-case-data th{width:1%;white-space:nowrap;vertical-align:top}.compound-field td{padding:0}#confirmation-header{width:630px;background-color:#17958b;border:solid 1px #979797;color:#fff;text-align:center}#confirmation-body{width:630px;background-color:#fff}.valign-top{vertical-align:top}.summary-fields{margin-bottom:30px}.summary-fields tbody tr th,.summary-fields tbody tr td{border-bottom:0px}a.disabled{pointer-events:none;cursor:default}.case-field-label{width:45%}.case-field-content{width:50%}.no-bottom-border{border-bottom:none}.case-field-change{width:5%}\n"] }]
9050
- }], function () { return [{ type: i3.FormBuilder }, { type: CaseNotifier }, { type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: FieldsUtils }, { type: FieldsPurger }, { type: ConditionalShowRegistrarService }, { type: WizardFactoryService }, { type: SessionStorageService }, { type: WindowService }, { type: FormValueService }, { type: FormErrorService }, { type: LoadingService }, { type: ValidPageListCaseFieldsService }, { type: WorkAllocationService }]; }, { eventTrigger: [{
9056
+ }], function () { return [{ type: i3.FormBuilder }, { type: CaseNotifier }, { type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: FieldsUtils }, { type: FieldsPurger }, { type: ConditionalShowRegistrarService }, { type: WizardFactoryService }, { type: SessionStorageService }, { type: WindowService }, { type: FormValueService }, { type: FormErrorService }, { type: LoadingService }, { type: ValidPageListCaseFieldsService }, { type: WorkAllocationService }, { type: AlertService }]; }, { eventTrigger: [{
9051
9057
  type: Input
9052
9058
  }], submit: [{
9053
9059
  type: Input
@@ -11788,7 +11794,7 @@ class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
11788
11794
  // Extract all flags-related data from the CaseEventTrigger object in the snapshot data
11789
11795
  if (this.route.snapshot.data.eventTrigger) {
11790
11796
  // Get the HMCTSServiceId from supplementary data, if it exists (required for retrieving the available flag types in
11791
- // the first instance, only falling back on case type ID or jurisidiction if it's not present)
11797
+ // the first instance, only falling back on case type ID or jurisdiction if it's not present)
11792
11798
  if (this.route.snapshot.data.eventTrigger.supplementary_data
11793
11799
  && this.route.snapshot.data.eventTrigger.supplementary_data.HMCTSServiceId) {
11794
11800
  this.hmctsServiceId = this.route.snapshot.data.eventTrigger.supplementary_data.HMCTSServiceId;
@@ -12129,32 +12135,36 @@ class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
12129
12135
  this.flagCommentsOptional = true;
12130
12136
  }
12131
12137
  populateNewFlagDetailInstance() {
12138
+ const langSearchTerm = this.caseFlagParentFormGroup?.value['languageSearchTerm'];
12139
+ const manualLangEntry = this.caseFlagParentFormGroup?.value['manualLanguageEntry'];
12140
+ const flagType = this.caseFlagParentFormGroup?.value['flagType'];
12141
+ const otherDesc = this.caseFlagParentFormGroup?.value['otherDescription'];
12132
12142
  const formValues = this.caseFlagParentFormGroup?.value;
12133
12143
  return {
12134
- name: formValues?.flagType?.name,
12135
- name_cy: formValues?.flagType?.name_cy,
12144
+ name: this.flagType?.name,
12145
+ name_cy: flagType?.name_cy,
12136
12146
  // Currently, subTypeValue, subTypeValue_cy and subTypeKey are applicable only to language flag types
12137
- subTypeValue: formValues?.languageSearchTerm && this.rpxTranslationService.language === 'en'
12138
- ? formValues?.languageSearchTerm.value
12139
- : formValues?.manualLanguageEntry && this.rpxTranslationService.language === 'en'
12140
- ? formValues?.manualLanguageEntry
12147
+ subTypeValue: langSearchTerm && this.rpxTranslationService.language === 'en'
12148
+ ? langSearchTerm.value
12149
+ : manualLangEntry && this.rpxTranslationService.language === 'en'
12150
+ ? manualLangEntry
12141
12151
  : null,
12142
- subTypeValue_cy: formValues?.languageSearchTerm && this.rpxTranslationService.language === 'cy'
12143
- ? formValues?.languageSearchTerm.value_cy
12144
- : formValues?.manualLanguageEntry && this.rpxTranslationService.language === 'cy'
12145
- ? formValues?.manualLanguageEntry
12152
+ subTypeValue_cy: langSearchTerm && this.rpxTranslationService.language === 'cy'
12153
+ ? langSearchTerm?.value_cy
12154
+ : manualLangEntry && this.rpxTranslationService.language === 'cy'
12155
+ ? manualLangEntry
12146
12156
  : null,
12147
12157
  // For user-entered (i.e. non-Reference Data) languages, there is no key
12148
- subTypeKey: formValues?.languageSearchTerm
12149
- ? formValues?.languageSearchTerm.key
12158
+ subTypeKey: langSearchTerm
12159
+ ? langSearchTerm.key
12150
12160
  : null,
12151
- otherDescription: formValues?.flagType?.flagCode === this.otherFlagTypeCode &&
12152
- formValues?.otherDescription && this.rpxTranslationService.language === 'en'
12153
- ? formValues?.otherDescription
12161
+ otherDescription: flagType?.flagCode === this.otherFlagTypeCode &&
12162
+ otherDesc && this.rpxTranslationService.language === 'en'
12163
+ ? otherDesc
12154
12164
  : null,
12155
- otherDescription_cy: formValues?.flagType?.flagCode === this.otherFlagTypeCode &&
12156
- formValues?.otherDescription && this.rpxTranslationService.language === 'cy'
12157
- ? formValues?.otherDescription
12165
+ otherDescription_cy: flagType?.flagCode === this.otherFlagTypeCode &&
12166
+ otherDesc && this.rpxTranslationService.language === 'cy'
12167
+ ? otherDesc
12158
12168
  : null,
12159
12169
  flagComment: this.rpxTranslationService.language === 'en'
12160
12170
  ? formValues?.flagComments
@@ -12164,18 +12174,18 @@ class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
12164
12174
  : null,
12165
12175
  flagUpdateComment: formValues?.statusReason,
12166
12176
  dateTimeCreated: new Date().toISOString(),
12167
- path: formValues?.flagType?.Path &&
12168
- formValues?.flagType?.Path.map(pathValue => Object.assign({ id: null, value: pathValue })),
12169
- hearingRelevant: formValues?.flagType?.hearingRelevant ? 'Yes' : 'No',
12170
- flagCode: formValues?.flagType?.flagCode,
12177
+ path: flagType?.Path &&
12178
+ flagType?.Path.map(pathValue => Object.assign({ id: null, value: pathValue })),
12179
+ hearingRelevant: flagType?.hearingRelevant ? 'Yes' : 'No',
12180
+ flagCode: flagType?.flagCode,
12171
12181
  // Status should be set to whatever the default is for this flag type, if flag is being created by an external
12172
12182
  // user, otherwise it should be set to "Active" if Case Flags v2.1 is NOT enabled, or the selected status if it is
12173
12183
  status: this.isDisplayContextParameterExternal
12174
- ? formValues?.flagType?.defaultStatus
12184
+ ? flagType?.defaultStatus
12175
12185
  : !this.isDisplayContextParameter2Point1Enabled
12176
12186
  ? CaseFlagStatus.ACTIVE
12177
12187
  : CaseFlagStatus[formValues?.selectedStatus],
12178
- availableExternally: formValues?.flagType?.externallyAvailable ? 'Yes' : 'No'
12188
+ availableExternally: flagType?.externallyAvailable ? 'Yes' : 'No'
12179
12189
  };
12180
12190
  }
12181
12191
  moveToFinalReviewStage() {
@@ -30099,7 +30109,7 @@ function CaseEventTriggerComponent_div_0_Template(rf, ctx) { if (rf & 1) {
30099
30109
  i0.ɵɵproperty("caseDetails", ctx_r0.caseDetails)("submit", ctx_r0.submit())("validate", ctx_r0.validate())("eventTrigger", ctx_r0.eventTrigger);
30100
30110
  } }
30101
30111
  class CaseEventTriggerComponent {
30102
- constructor(ngZone, casesService, caseNotifier, router, alertService, route, caseReferencePipe, activityPollingService) {
30112
+ constructor(ngZone, casesService, caseNotifier, router, alertService, route, caseReferencePipe, activityPollingService, sessionStorageService) {
30103
30113
  this.ngZone = ngZone;
30104
30114
  this.casesService = casesService;
30105
30115
  this.caseNotifier = caseNotifier;
@@ -30108,6 +30118,7 @@ class CaseEventTriggerComponent {
30108
30118
  this.route = route;
30109
30119
  this.caseReferencePipe = caseReferencePipe;
30110
30120
  this.activityPollingService = activityPollingService;
30121
+ this.sessionStorageService = sessionStorageService;
30111
30122
  this.BANNER = DisplayMode.BANNER;
30112
30123
  }
30113
30124
  ngOnInit() {
@@ -30156,21 +30167,30 @@ class CaseEventTriggerComponent {
30156
30167
  }
30157
30168
  submitted(event) {
30158
30169
  const eventStatus = event['status'];
30170
+ const taskCompletionFailed = this.sessionStorageService.getItem('taskCompletionError') === 'true';
30159
30171
  this.router
30160
30172
  .navigate([this.parentUrl])
30161
30173
  .then(() => {
30162
30174
  const caseReference = this.caseReferencePipe.transform(this.caseDetails.case_id.toString());
30163
30175
  const replacements = { CASEREFERENCE: caseReference, NAME: this.eventTrigger.name };
30164
- if (EventStatusService.isIncomplete(eventStatus)) {
30176
+ this.alertService.setPreserveAlerts(true);
30177
+ if (taskCompletionFailed) {
30178
+ // if task still present in session storage, we know that the task has not been correctly completed
30179
+ this.alertService.warning({
30180
+ phrase: CaseEventTriggerComponent.EVENT_COMPLETION_MESSAGE + '. ' + Constants.TASK_COMPLETION_ERROR,
30181
+ replacements
30182
+ });
30183
+ this.sessionStorageService.removeItem('taskCompletionError');
30184
+ }
30185
+ else if (EventStatusService.isIncomplete(eventStatus)) {
30165
30186
  this.alertService.warning({
30166
- phrase: `Case #%CASEREFERENCE% has been updated with event: %NAME%
30167
- but the callback service cannot be completed`,
30187
+ phrase: CaseEventTriggerComponent.EVENT_COMPLETION_MESSAGE + CaseEventTriggerComponent.CALLBACK_FAILED_MESSAGE,
30168
30188
  replacements
30169
30189
  });
30170
30190
  }
30171
30191
  else {
30172
30192
  this.alertService.success({
30173
- phrase: 'Case #%CASEREFERENCE% has been updated with event: %NAME%',
30193
+ phrase: CaseEventTriggerComponent.EVENT_COMPLETION_MESSAGE,
30174
30194
  replacements,
30175
30195
  preserve: true
30176
30196
  });
@@ -30189,7 +30209,9 @@ class CaseEventTriggerComponent {
30189
30209
  return !!(this.eventTrigger && this.caseDetails);
30190
30210
  }
30191
30211
  }
30192
- CaseEventTriggerComponent.ɵfac = function CaseEventTriggerComponent_Factory(t) { return new (t || CaseEventTriggerComponent)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(CasesService), i0.ɵɵdirectiveInject(CaseNotifier), i0.ɵɵdirectiveInject(i1$1.Router), i0.ɵɵdirectiveInject(AlertService), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(CaseReferencePipe), i0.ɵɵdirectiveInject(ActivityPollingService)); };
30212
+ CaseEventTriggerComponent.EVENT_COMPLETION_MESSAGE = `Case #%CASEREFERENCE% has been updated with event: %NAME%`;
30213
+ CaseEventTriggerComponent.CALLBACK_FAILED_MESSAGE = ' but the callback service cannot be completed';
30214
+ CaseEventTriggerComponent.ɵfac = function CaseEventTriggerComponent_Factory(t) { return new (t || CaseEventTriggerComponent)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(CasesService), i0.ɵɵdirectiveInject(CaseNotifier), i0.ɵɵdirectiveInject(i1$1.Router), i0.ɵɵdirectiveInject(AlertService), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(CaseReferencePipe), i0.ɵɵdirectiveInject(ActivityPollingService), i0.ɵɵdirectiveInject(SessionStorageService)); };
30193
30215
  CaseEventTriggerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEventTriggerComponent, selectors: [["ccd-case-event-trigger"]], decls: 1, vars: 1, consts: [["class", "screen-990", 4, "ngIf"], [1, "screen-990"], [3, "caseId", "displayMode"], [3, "caseDetails", "submit", "validate", "eventTrigger", "cancelled", "submitted"]], template: function CaseEventTriggerComponent_Template(rf, ctx) { if (rf & 1) {
30194
30216
  i0.ɵɵtemplate(0, CaseEventTriggerComponent_div_0_Template, 3, 6, "div", 0);
30195
30217
  } if (rf & 2) {
@@ -30198,7 +30220,7 @@ CaseEventTriggerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: C
30198
30220
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEventTriggerComponent, [{
30199
30221
  type: Component,
30200
30222
  args: [{ selector: 'ccd-case-event-trigger', template: "<div *ngIf=\"isDataLoaded()\" class=\"screen-990\">\n <ccd-activity [caseId]=\"caseDetails.case_id\" [displayMode]=\"BANNER\"></ccd-activity>\n <ccd-case-edit [caseDetails]=\"caseDetails\"\n [submit]=\"submit()\"\n [validate]=\"validate()\"\n [eventTrigger]=\"eventTrigger\"\n (cancelled)=\"cancel()\"\n (submitted)=\"submitted($event)\"></ccd-case-edit>\n</div>\n" }]
30201
- }], function () { return [{ type: i0.NgZone }, { type: CasesService }, { type: CaseNotifier }, { type: i1$1.Router }, { type: AlertService }, { type: i1$1.ActivatedRoute }, { type: CaseReferencePipe }, { type: ActivityPollingService }]; }, null); })();
30223
+ }], function () { return [{ type: i0.NgZone }, { type: CasesService }, { type: CaseNotifier }, { type: i1$1.Router }, { type: AlertService }, { type: i1$1.ActivatedRoute }, { type: CaseReferencePipe }, { type: ActivityPollingService }, { type: SessionStorageService }]; }, null); })();
30202
30224
 
30203
30225
  function CaseViewComponent_div_0_Template(rf, ctx) { if (rf & 1) {
30204
30226
  i0.ɵɵelementStart(0, "div");