@hmcts/opal-frontend-common 0.0.90 → 0.0.92
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/fesm2022/{hmcts-opal-frontend-common-access-denied.component-DNNxndx-.mjs → hmcts-opal-frontend-common-access-denied.component-BCLRLZqh.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-account-created.component-3MER1dhS.mjs → hmcts-opal-frontend-common-account-created.component-D0g9FjWl.mjs} +4 -4
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-account-summary-base.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-creditor-details-base.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-alias-base.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-base.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-removal-base.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-base.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-nested-form-base.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-instances-table-base.mjs +30 -0
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-constants.mjs +26 -0
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-interfaces.mjs +4 -0
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-types.mjs +4 -0
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base.mjs +282 -0
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-pagination.mjs +13 -4
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-table-filter.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-alphagov-alphagov-accessible-autocomplete.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item-custom-account-information-item-label.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item-custom-account-information-item-value.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-action-links.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-horizontal-scroll-pane.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-page-header.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-scrollable-panes-custom-scrollable-panes-inner-pane.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-scrollable-panes.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar-custom-summary-metric-bar-item-custom-summary-metric-bar-item-label.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar-custom-summary-metric-bar-item-custom-summary-metric-bar-item-value.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar-custom-summary-metric-bar-item.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane-custom-vertical-scroll-pane-inner-pane.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane-custom-vertical-scroll-pane-outer-pane.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-accordion.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-back-link.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-button.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-cancel-link.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-checkboxes.mjs +12 -12
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-date-input.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-details.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-error-summary.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-footer.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-header.mjs +6 -6
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-inset-text.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-list-govuk-list-link.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-list.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-notification-banner.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-pagination.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-panel.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-radio.mjs +12 -12
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-select.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-summary-card-list.mjs +6 -6
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-summary-list.mjs +12 -12
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-table.mjs +12 -12
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-list-item.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-panel.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tag.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-task-list.mjs +6 -6
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-area.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-input-prefix-suffix.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-input.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-hod-hod-loading-spinner.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-alert.mjs +21 -21
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-badge.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-button-menu-moj-button-menu-item.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-button-menu.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-date-picker.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-header.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-option-moj-filter-panel-option-form-group-item.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-option-moj-filter-panel-option-form-group-keyword.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-option.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-selected-moj-filter-panel-selected-tag.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-selected.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-header.mjs +6 -6
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-inset-text.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-notification-badge.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-page-header.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-pagination.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-primary-navigation.mjs +6 -6
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-sortable-table.mjs +18 -18
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.mjs +6 -6
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-ticket-panel.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-timeline.mjs +6 -6
- package/fesm2022/{hmcts-opal-frontend-common-concurrency-failure.component-UnC_Qex5.mjs → hmcts-opal-frontend-common-concurrency-failure.component-CdkYMvv-.mjs} +4 -4
- package/fesm2022/hmcts-opal-frontend-common-directives-capitalisation.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-directives-govuk-button.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-directives-moj-multi-select.mjs +6 -6
- package/fesm2022/{hmcts-opal-frontend-common-internal-server-error.component-Cj-ueGWj.mjs → hmcts-opal-frontend-common-internal-server-error.component-CinCBLVo.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-pages-access-denied.component-DNNxndx-.mjs → hmcts-opal-frontend-common-pages-access-denied.component-BCLRLZqh.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-pages-account-created.component-3MER1dhS.mjs → hmcts-opal-frontend-common-pages-account-created.component-D0g9FjWl.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-pages-concurrency-failure.component-UnC_Qex5.mjs → hmcts-opal-frontend-common-pages-concurrency-failure.component-CdkYMvv-.mjs} +4 -4
- package/fesm2022/hmcts-opal-frontend-common-pages-dashboard-page.mjs +3 -3
- package/fesm2022/{hmcts-opal-frontend-common-pages-internal-server-error.component-Cj-ueGWj.mjs → hmcts-opal-frontend-common-pages-internal-server-error.component-CinCBLVo.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-pages-permission-denied.component-ClXrjyA5.mjs → hmcts-opal-frontend-common-pages-permission-denied.component-BPb5CZQD.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-pages-sign-in-stub.component-Cxvc5NV2.mjs → hmcts-opal-frontend-common-pages-sign-in-stub.component-Cnlwqv_f.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-pages-sign-in.component-dBd0gJTr.mjs → hmcts-opal-frontend-common-pages-sign-in.component-DWLTU9wd.mjs} +4 -4
- package/fesm2022/hmcts-opal-frontend-common-pages.mjs +6 -6
- package/fesm2022/{hmcts-opal-frontend-common-permission-denied.component-ClXrjyA5.mjs → hmcts-opal-frontend-common-permission-denied.component-BPb5CZQD.mjs} +4 -4
- package/fesm2022/hmcts-opal-frontend-common-pipes-date-format.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-pipes-days-ago.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-pipes-monetary.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-pipes-national-insurance.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-resolvers-title.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-app-initializer-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-app-insights-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-auth-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-date-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-history-transformation-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-launch-darkly-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-opal-user-service.mjs +119 -10
- package/fesm2022/hmcts-opal-frontend-common-services-permissions-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-session-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-sort-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-transfer-state-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-transformation-service.mjs +3 -3
- package/fesm2022/hmcts-opal-frontend-common-services-utils-service.mjs +3 -3
- package/fesm2022/{hmcts-opal-frontend-common-sign-in-stub.component-Cxvc5NV2.mjs → hmcts-opal-frontend-common-sign-in-stub.component-Cnlwqv_f.mjs} +4 -4
- package/fesm2022/{hmcts-opal-frontend-common-sign-in.component-jf34_3Vv.mjs → hmcts-opal-frontend-common-sign-in.component-DIZlLA6t.mjs} +4 -4
- package/fesm2022/hmcts-opal-frontend-common.mjs +6 -6
- package/package.json +27 -2
- package/types/hmcts-opal-frontend-common-components-abstract-abstract-report-instances-table-base.d.ts +13 -0
- package/types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-constants.d.ts +21 -0
- package/types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-interfaces.d.ts +34 -0
- package/types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-types.d.ts +3 -0
- package/types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base.d.ts +198 -0
- package/types/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-pagination.d.ts +4 -0
- package/types/hmcts-opal-frontend-common-services-opal-user-service.d.ts +56 -4
|
@@ -2,7 +2,7 @@ import { HttpClient } from '@angular/common/http';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, Injectable } from '@angular/core';
|
|
4
4
|
import { GlobalStore } from '@hmcts/opal-frontend-common/stores/global';
|
|
5
|
-
import { map, tap } from 'rxjs';
|
|
5
|
+
import { of, map, filter, tap, catchError, throwError, finalize, shareReplay } from 'rxjs';
|
|
6
6
|
|
|
7
7
|
const OPAL_USER_PATHS = {
|
|
8
8
|
loggedInUserState: '/api/user-state',
|
|
@@ -22,12 +22,28 @@ const OPAL_USER_STATE_RESPONSE_STATUS = {
|
|
|
22
22
|
DEACTIVATED: 'deactivated',
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
+
const USER_STATE_CACHE_TTL_HEADER = 'X-OPAL-User-State-Cache-TTL-Ms';
|
|
25
26
|
class OpalUserService {
|
|
26
27
|
http = inject(HttpClient);
|
|
27
28
|
globalStore = inject(GlobalStore);
|
|
29
|
+
inFlightUserState$;
|
|
30
|
+
userStateRequestGeneration = 0;
|
|
31
|
+
userStateCacheExpiresAtMilliseconds = 0;
|
|
32
|
+
/**
|
|
33
|
+
* Converts the user-state API status into the service domain status.
|
|
34
|
+
*
|
|
35
|
+
* @param status - The status value returned by the user-state API.
|
|
36
|
+
* @returns The mapped domain status, or null when the API status is null.
|
|
37
|
+
*/
|
|
28
38
|
toOpalUserStatus(status) {
|
|
29
39
|
return status ? OPAL_USER_STATE_RESPONSE_STATUS[status] : null;
|
|
30
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Gets the configured user-state domain from the global store.
|
|
43
|
+
*
|
|
44
|
+
* @returns The trimmed user-state domain.
|
|
45
|
+
* @throws When no non-blank user-state domain has been configured.
|
|
46
|
+
*/
|
|
31
47
|
getUserStateDomain() {
|
|
32
48
|
const userStateDomain = this.globalStore.userStateDomain();
|
|
33
49
|
if (typeof userStateDomain === 'string' && userStateDomain.trim()) {
|
|
@@ -37,6 +53,10 @@ class OpalUserService {
|
|
|
37
53
|
}
|
|
38
54
|
/**
|
|
39
55
|
* Maps the Redis-backed user state response into the existing domain-specific user state shape.
|
|
56
|
+
*
|
|
57
|
+
* @param userState - The raw user-state API response.
|
|
58
|
+
* @returns The mapped user state for the configured domain.
|
|
59
|
+
* @throws When the response does not include the configured domain.
|
|
40
60
|
*/
|
|
41
61
|
toOpalUserState(userState) {
|
|
42
62
|
const userStateDomain = this.getUserStateDomain();
|
|
@@ -53,37 +73,126 @@ class OpalUserService {
|
|
|
53
73
|
business_unit_users: userStateDomainState.business_unit_users,
|
|
54
74
|
};
|
|
55
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Extracts the body from the observed user-state HTTP response.
|
|
78
|
+
*
|
|
79
|
+
* @param response - The full HTTP response from the user-state endpoint.
|
|
80
|
+
* @returns The response body.
|
|
81
|
+
* @throws When the response body is empty.
|
|
82
|
+
*/
|
|
83
|
+
getUserStateResponseBody(response) {
|
|
84
|
+
if (!response.body) {
|
|
85
|
+
throw new Error('User state response body is required.');
|
|
86
|
+
}
|
|
87
|
+
return response.body;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Checks whether a user state can be used as a cached logged-in user.
|
|
91
|
+
*
|
|
92
|
+
* @param userState - The user state currently held in the global store.
|
|
93
|
+
* @returns True when the user state contains a positive numeric user ID.
|
|
94
|
+
*/
|
|
95
|
+
isValidCachedUserState(userState) {
|
|
96
|
+
return typeof userState.user_id === 'number' && userState.user_id > 0;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Gets the current cached user state when it is populated and unexpired.
|
|
100
|
+
*
|
|
101
|
+
* @returns The cached user state, or null when the cache is empty or expired.
|
|
102
|
+
*/
|
|
103
|
+
getCachedUserState() {
|
|
104
|
+
const userState = this.globalStore.userState();
|
|
105
|
+
if (this.isValidCachedUserState(userState) && Date.now() < this.userStateCacheExpiresAtMilliseconds) {
|
|
106
|
+
return userState;
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Calculates the local cache TTL from the response header and configured maximum TTL.
|
|
112
|
+
*
|
|
113
|
+
* @param response - The full HTTP response from the user-state endpoint.
|
|
114
|
+
* @returns The TTL in milliseconds. A zero response header expires the local cache immediately.
|
|
115
|
+
*/
|
|
116
|
+
getUserStateCacheTtlMilliseconds(response) {
|
|
117
|
+
const configuredTtlMilliseconds = this.globalStore.userStateCacheExpirationMilliseconds();
|
|
118
|
+
const responseTtlHeader = response.headers.get(USER_STATE_CACHE_TTL_HEADER);
|
|
119
|
+
if (responseTtlHeader === null) {
|
|
120
|
+
return configuredTtlMilliseconds;
|
|
121
|
+
}
|
|
122
|
+
const responseTtlMilliseconds = Number(responseTtlHeader);
|
|
123
|
+
if (Number.isFinite(responseTtlMilliseconds) && responseTtlMilliseconds >= 0) {
|
|
124
|
+
return Math.min(responseTtlMilliseconds, configuredTtlMilliseconds);
|
|
125
|
+
}
|
|
126
|
+
return configuredTtlMilliseconds;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Invalidates local cache controls and marks existing in-flight requests as stale.
|
|
130
|
+
*/
|
|
131
|
+
clearLocalUserStateCache() {
|
|
132
|
+
this.userStateRequestGeneration += 1;
|
|
133
|
+
this.userStateCacheExpiresAtMilliseconds = 0;
|
|
134
|
+
this.inFlightUserState$ = undefined;
|
|
135
|
+
}
|
|
56
136
|
/**
|
|
57
137
|
* Retrieves the logged-in user's state as an observable.
|
|
58
138
|
*
|
|
59
|
-
*
|
|
139
|
+
* Uses the global store as a local cache until the effective user-state TTL expires, shares concurrent HTTP
|
|
140
|
+
* requests, and ignores stale responses after the local cache has been invalidated.
|
|
60
141
|
*
|
|
61
142
|
* @returns {Observable<IOpalUserState>} An observable that emits the logged-in user's state.
|
|
62
143
|
*/
|
|
63
144
|
getLoggedInUserState() {
|
|
64
|
-
|
|
145
|
+
const cachedUserState = this.getCachedUserState();
|
|
146
|
+
if (cachedUserState) {
|
|
147
|
+
return of(cachedUserState);
|
|
148
|
+
}
|
|
149
|
+
if (this.inFlightUserState$) {
|
|
150
|
+
return this.inFlightUserState$;
|
|
151
|
+
}
|
|
152
|
+
const requestGeneration = this.userStateRequestGeneration;
|
|
153
|
+
this.inFlightUserState$ = this.http
|
|
154
|
+
.get(OPAL_USER_PATHS.loggedInUserState, { observe: 'response' })
|
|
155
|
+
.pipe(map((response) => ({
|
|
156
|
+
userState: this.toOpalUserState(this.getUserStateResponseBody(response)),
|
|
157
|
+
userStateCacheTtlMilliseconds: this.getUserStateCacheTtlMilliseconds(response),
|
|
158
|
+
requestGeneration,
|
|
159
|
+
})), filter(({ requestGeneration }) => requestGeneration === this.userStateRequestGeneration), tap(({ userState, userStateCacheTtlMilliseconds }) => {
|
|
160
|
+
this.globalStore.setUserState(userState);
|
|
161
|
+
this.userStateCacheExpiresAtMilliseconds = Date.now() + userStateCacheTtlMilliseconds;
|
|
162
|
+
}), map(({ userState }) => userState), catchError((error) => {
|
|
163
|
+
if (requestGeneration === this.userStateRequestGeneration) {
|
|
164
|
+
this.userStateCacheExpiresAtMilliseconds = 0;
|
|
165
|
+
}
|
|
166
|
+
return throwError(() => error);
|
|
167
|
+
}), finalize(() => {
|
|
168
|
+
if (requestGeneration === this.userStateRequestGeneration) {
|
|
169
|
+
this.inFlightUserState$ = undefined;
|
|
170
|
+
}
|
|
171
|
+
}), shareReplay(1));
|
|
172
|
+
return this.inFlightUserState$;
|
|
65
173
|
}
|
|
66
174
|
/**
|
|
67
|
-
*
|
|
175
|
+
* Clears the global store user state and invalidates local user-state cache controls.
|
|
68
176
|
*
|
|
69
|
-
* Useful for logout
|
|
177
|
+
* Useful for logout and identity switches to avoid reusing stale state or accepting stale in-flight responses.
|
|
70
178
|
*/
|
|
71
179
|
clearUserStateCache() {
|
|
72
180
|
this.globalStore.setUserState({});
|
|
181
|
+
this.clearLocalUserStateCache();
|
|
73
182
|
}
|
|
74
183
|
/**
|
|
75
|
-
* Fetches the latest user state from the Redis-backed frontend endpoint.
|
|
184
|
+
* Fetches the latest user state from the Redis-backed frontend endpoint, bypassing the current local cache.
|
|
76
185
|
*
|
|
77
186
|
* @returns An Observable that emits the current {@link IOpalUserState}.
|
|
78
187
|
*/
|
|
79
188
|
refreshUserState() {
|
|
80
|
-
this.
|
|
189
|
+
this.clearLocalUserStateCache();
|
|
81
190
|
return this.getLoggedInUserState();
|
|
82
191
|
}
|
|
83
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
84
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
192
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: OpalUserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
193
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: OpalUserService, providedIn: 'root' });
|
|
85
194
|
}
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: OpalUserService, decorators: [{
|
|
87
196
|
type: Injectable,
|
|
88
197
|
args: [{ providedIn: 'root' }]
|
|
89
198
|
}] });
|
|
@@ -51,10 +51,10 @@ class PermissionsService {
|
|
|
51
51
|
// if we don't have any roles, we can't have any permissions
|
|
52
52
|
return true;
|
|
53
53
|
}
|
|
54
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
55
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
55
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionsService, providedIn: 'root' });
|
|
56
56
|
}
|
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionsService, decorators: [{
|
|
58
58
|
type: Injectable,
|
|
59
59
|
args: [{
|
|
60
60
|
providedIn: 'root',
|
|
@@ -25,10 +25,10 @@ class SessionService {
|
|
|
25
25
|
}), shareReplay(1));
|
|
26
26
|
return this.tokenExpiryCache$;
|
|
27
27
|
}
|
|
28
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
29
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
28
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SessionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
29
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SessionService, providedIn: 'root' });
|
|
30
30
|
}
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SessionService, decorators: [{
|
|
32
32
|
type: Injectable,
|
|
33
33
|
args: [{ providedIn: 'root' }]
|
|
34
34
|
}] });
|
|
@@ -79,10 +79,10 @@ class SortService {
|
|
|
79
79
|
arraySortDesc(array) {
|
|
80
80
|
return sort(array).desc();
|
|
81
81
|
}
|
|
82
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
83
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
82
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SortService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
83
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SortService, providedIn: 'root' });
|
|
84
84
|
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SortService, decorators: [{
|
|
86
86
|
type: Injectable,
|
|
87
87
|
args: [{
|
|
88
88
|
providedIn: 'root',
|
|
@@ -82,10 +82,10 @@ class TransferStateService {
|
|
|
82
82
|
this.globalStore.setFeatureFlags(featureFlagConfig.releases);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
86
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
85
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: TransferStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
86
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: TransferStateService, providedIn: 'root' });
|
|
87
87
|
}
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
88
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: TransferStateService, decorators: [{
|
|
89
89
|
type: Injectable,
|
|
90
90
|
args: [{
|
|
91
91
|
providedIn: 'root',
|
|
@@ -89,10 +89,10 @@ class TransformationService {
|
|
|
89
89
|
}
|
|
90
90
|
return result;
|
|
91
91
|
}
|
|
92
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
93
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
92
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: TransformationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
93
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: TransformationService, providedIn: 'root' });
|
|
94
94
|
}
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: TransformationService, decorators: [{
|
|
96
96
|
type: Injectable,
|
|
97
97
|
args: [{
|
|
98
98
|
providedIn: 'root',
|
|
@@ -153,10 +153,10 @@ class UtilsService {
|
|
|
153
153
|
hasSetProperty(value) {
|
|
154
154
|
return Object.values(value ?? {}).some((v) => (typeof v === 'boolean' ? v === true : v !== null && v !== ''));
|
|
155
155
|
}
|
|
156
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
157
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
156
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
157
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UtilsService, providedIn: 'root' });
|
|
158
158
|
}
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
159
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UtilsService, decorators: [{
|
|
160
160
|
type: Injectable,
|
|
161
161
|
args: [{
|
|
162
162
|
providedIn: 'root',
|
|
@@ -28,10 +28,10 @@ class SignInStubComponent {
|
|
|
28
28
|
ngOnInit() {
|
|
29
29
|
this.setupSignInForm();
|
|
30
30
|
}
|
|
31
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
32
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
31
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SignInStubComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.18", type: SignInStubComponent, isStandalone: true, selector: "opal-lib-sign-in-stub", outputs: { signInFormSubmit: "signInFormSubmit" }, ngImport: i0, template: "<form (submit)=\"handleFormSubmit()\">\n <div class=\"govuk-grid-column-two-thirds\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 class=\"govuk-fieldset__heading\">Sign in</h1>\n </legend>\n\n <div [formGroup]=\"signInForm\">\n <opal-lib-govuk-text-input\n labelText=\"Email\"\n inputId=\"email\"\n inputName=\"email\"\n inputClasses=\"govuk-!-width-one-half\"\n [control]=\"signInForm.controls['email']\"\n ></opal-lib-govuk-text-input>\n </div>\n </fieldset>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-one-third\">\n <opal-lib-govuk-button buttonId=\"submitForm\" type=\"submit\"> Sign in</opal-lib-govuk-button>\n </div>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: GovukTextInputComponent, selector: "opal-lib-govuk-text-input", inputs: ["labelText", "labelClasses", "inputId", "inputName", "inputClasses", "hintText", "hintHtml", "errors", "control"] }, { kind: "component", type: GovukButtonComponent, selector: "opal-lib-govuk-button", inputs: ["buttonId", "type", "buttonClasses"], outputs: ["buttonClickEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
33
33
|
}
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SignInStubComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
36
36
|
args: [{ selector: 'opal-lib-sign-in-stub', imports: [FormsModule, ReactiveFormsModule, GovukTextInputComponent, GovukButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form (submit)=\"handleFormSubmit()\">\n <div class=\"govuk-grid-column-two-thirds\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 class=\"govuk-fieldset__heading\">Sign in</h1>\n </legend>\n\n <div [formGroup]=\"signInForm\">\n <opal-lib-govuk-text-input\n labelText=\"Email\"\n inputId=\"email\"\n inputName=\"email\"\n inputClasses=\"govuk-!-width-one-half\"\n [control]=\"signInForm.controls['email']\"\n ></opal-lib-govuk-text-input>\n </div>\n </fieldset>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-one-third\">\n <opal-lib-govuk-button buttonId=\"submitForm\" type=\"submit\"> Sign in</opal-lib-govuk-button>\n </div>\n </div>\n </div>\n</form>\n" }]
|
|
37
37
|
}], propDecorators: { signInFormSubmit: [{
|
|
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
39
39
|
}] } });
|
|
40
40
|
|
|
41
41
|
export { SignInStubComponent };
|
|
42
|
-
//# sourceMappingURL=hmcts-opal-frontend-common-sign-in-stub.component-
|
|
42
|
+
//# sourceMappingURL=hmcts-opal-frontend-common-sign-in-stub.component-Cnlwqv_f.mjs.map
|
|
@@ -16,13 +16,13 @@ class SignInComponent {
|
|
|
16
16
|
handleStubSignInFormSubmit(formData) {
|
|
17
17
|
this.document.location.href = `${SSO_ENDPOINTS.login}?email=${formData.email}`;
|
|
18
18
|
}
|
|
19
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
20
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
19
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: SignInComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: SignInComponent, isStandalone: true, selector: "opal-lib-sign-in", ngImport: i0, template: "@defer (when !globalStore.ssoEnabled()) {\n <opal-lib-sign-in-stub (signInFormSubmit)=\"handleStubSignInFormSubmit($event)\"></opal-lib-sign-in-stub>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import('./hmcts-opal-frontend-common-sign-in-stub.component-Cnlwqv_f.mjs').then(m => m.SignInStubComponent)]] });
|
|
21
21
|
}
|
|
22
|
-
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.2.
|
|
22
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.2.18", ngImport: i0, type: SignInComponent, resolveDeferredDeps: () => [import('./hmcts-opal-frontend-common-sign-in-stub.component-Cnlwqv_f.mjs').then(m => m.SignInStubComponent)], resolveMetadata: SignInStubComponent => ({ decorators: [{
|
|
23
23
|
type: Component,
|
|
24
24
|
args: [{ selector: 'opal-lib-sign-in', imports: [SignInStubComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@defer (when !globalStore.ssoEnabled()) {\n <opal-lib-sign-in-stub (signInFormSubmit)=\"handleStubSignInFormSubmit($event)\"></opal-lib-sign-in-stub>\n}\n" }]
|
|
25
25
|
}], ctorParameters: null, propDecorators: null }) });
|
|
26
26
|
|
|
27
27
|
export { SignInComponent };
|
|
28
|
-
//# sourceMappingURL=hmcts-opal-frontend-common-sign-in.component-
|
|
28
|
+
//# sourceMappingURL=hmcts-opal-frontend-common-sign-in.component-DIZlLA6t.mjs.map
|
|
@@ -35,39 +35,39 @@ const routing = [
|
|
|
35
35
|
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
|
|
36
36
|
{
|
|
37
37
|
path: PAGES_ROUTING_PATHS.children.accessDenied,
|
|
38
|
-
loadComponent: () => import('./hmcts-opal-frontend-common-access-denied.component-
|
|
38
|
+
loadComponent: () => import('./hmcts-opal-frontend-common-access-denied.component-BCLRLZqh.mjs').then((c) => c.AccessDeniedComponent),
|
|
39
39
|
canActivate: [authGuard, accountGuard],
|
|
40
40
|
data: { title: PAGES_ROUTING_TITLES.children.accessDenied },
|
|
41
41
|
resolve: { title: TitleResolver },
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
path: PAGES_ROUTING_PATHS.children.concurrencyFailure,
|
|
45
|
-
loadComponent: () => import('./hmcts-opal-frontend-common-concurrency-failure.component-
|
|
45
|
+
loadComponent: () => import('./hmcts-opal-frontend-common-concurrency-failure.component-CdkYMvv-.mjs').then((c) => c.ConcurrencyFailureComponent),
|
|
46
46
|
data: { title: PAGES_ROUTING_TITLES.children.concurrencyFailure },
|
|
47
47
|
resolve: { title: TitleResolver },
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
path: PAGES_ROUTING_PATHS.children.permissionDenied,
|
|
51
|
-
loadComponent: () => import('./hmcts-opal-frontend-common-permission-denied.component-
|
|
51
|
+
loadComponent: () => import('./hmcts-opal-frontend-common-permission-denied.component-BPb5CZQD.mjs').then((c) => c.PermissionDeniedComponent),
|
|
52
52
|
data: { title: PAGES_ROUTING_TITLES.children.permissionDenied },
|
|
53
53
|
resolve: { title: TitleResolver },
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
path: PAGES_ROUTING_PATHS.children.internalServerError,
|
|
57
|
-
loadComponent: () => import('./hmcts-opal-frontend-common-internal-server-error.component-
|
|
57
|
+
loadComponent: () => import('./hmcts-opal-frontend-common-internal-server-error.component-CinCBLVo.mjs').then((c) => c.InternalServerErrorComponent),
|
|
58
58
|
data: { title: PAGES_ROUTING_TITLES.children.internalServerError },
|
|
59
59
|
resolve: { title: TitleResolver },
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
path: PAGES_ROUTING_PATHS.children.signIn,
|
|
63
|
-
loadComponent: () => import('./hmcts-opal-frontend-common-sign-in.component-
|
|
63
|
+
loadComponent: () => import('./hmcts-opal-frontend-common-sign-in.component-DIZlLA6t.mjs').then((c) => c.SignInComponent),
|
|
64
64
|
canActivate: [signedInGuard],
|
|
65
65
|
data: { title: PAGES_ROUTING_TITLES.children.signIn },
|
|
66
66
|
resolve: { title: TitleResolver },
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
path: PAGES_ROUTING_PATHS.children.accountCreated,
|
|
70
|
-
loadComponent: () => import('./hmcts-opal-frontend-common-account-created.component-
|
|
70
|
+
loadComponent: () => import('./hmcts-opal-frontend-common-account-created.component-D0g9FjWl.mjs').then((c) => c.AccountCreated),
|
|
71
71
|
canActivate: [authGuard],
|
|
72
72
|
data: { title: PAGES_ROUTING_TITLES.children.accountCreated },
|
|
73
73
|
resolve: { title: TitleResolver },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hmcts/opal-frontend-common",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.92",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@microsoft/applicationinsights-web": "^3.3.6",
|
|
29
|
-
"@ministryofjustice/frontend": "^
|
|
29
|
+
"@ministryofjustice/frontend": "^10.0.0",
|
|
30
30
|
"accessible-autocomplete": "^3.0.1",
|
|
31
31
|
"fast-sort": "^3.4.1",
|
|
32
32
|
"govuk-frontend": "^6.0.0",
|
|
@@ -126,6 +126,31 @@
|
|
|
126
126
|
"types": "./types/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-pagination.d.ts",
|
|
127
127
|
"default": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-pagination.mjs"
|
|
128
128
|
},
|
|
129
|
+
"./components/abstract/abstract-report-instances-table-base": {
|
|
130
|
+
"import": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-instances-table-base.mjs",
|
|
131
|
+
"types": "./types/hmcts-opal-frontend-common-components-abstract-abstract-report-instances-table-base.d.ts",
|
|
132
|
+
"default": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-instances-table-base.mjs"
|
|
133
|
+
},
|
|
134
|
+
"./components/abstract/abstract-report-summary-list-base": {
|
|
135
|
+
"import": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base.mjs",
|
|
136
|
+
"types": "./types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base.d.ts",
|
|
137
|
+
"default": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base.mjs"
|
|
138
|
+
},
|
|
139
|
+
"./components/abstract/abstract-report-summary-list-base/constants": {
|
|
140
|
+
"import": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-constants.mjs",
|
|
141
|
+
"types": "./types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-constants.d.ts",
|
|
142
|
+
"default": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-constants.mjs"
|
|
143
|
+
},
|
|
144
|
+
"./components/abstract/abstract-report-summary-list-base/interfaces": {
|
|
145
|
+
"import": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-interfaces.mjs",
|
|
146
|
+
"types": "./types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-interfaces.d.ts",
|
|
147
|
+
"default": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-interfaces.mjs"
|
|
148
|
+
},
|
|
149
|
+
"./components/abstract/abstract-report-summary-list-base/types": {
|
|
150
|
+
"import": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-types.mjs",
|
|
151
|
+
"types": "./types/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-types.d.ts",
|
|
152
|
+
"default": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-report-summary-list-base-types.mjs"
|
|
153
|
+
},
|
|
129
154
|
"./components/abstract/abstract-tab-data": {
|
|
130
155
|
"import": "./fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-tab-data.mjs",
|
|
131
156
|
"types": "./types/hmcts-opal-frontend-common-components-abstract-abstract-tab-data.d.ts",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { IAbstractTableData } from '@hmcts/opal-frontend-common/components/abstract/abstract-sortable-table/interfaces';
|
|
3
|
+
import { SortableValuesType } from '@hmcts/opal-frontend-common/components/abstract/abstract-sortable-table/types';
|
|
4
|
+
import { AbstractSortableTablePaginationComponent } from '@hmcts/opal-frontend-common/components/abstract/abstract-sortable-table-pagination';
|
|
5
|
+
|
|
6
|
+
declare abstract class AbstractReportInstancesTableBaseComponent<TTableData extends IAbstractTableData<SortableValuesType>> extends AbstractSortableTablePaginationComponent {
|
|
7
|
+
set tableData(tableData: TTableData[]);
|
|
8
|
+
paginatedTableDataComputed: i0.Signal<TTableData[]>;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractReportInstancesTableBaseComponent<any>, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AbstractReportInstancesTableBaseComponent<any>, "ng-component", never, { "tableData": { "alias": "tableData"; "required": true; }; }, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { AbstractReportInstancesTableBaseComponent };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare const ABSTRACT_REPORT_SUMMARY_LIST_LAST_7_DAYS = "last7Days";
|
|
2
|
+
declare const ABSTRACT_REPORT_SUMMARY_LIST_CUSTOM_DAYS = "customDays";
|
|
3
|
+
declare const ABSTRACT_REPORT_SUMMARY_LIST_DATE_RANGE = "dateRange";
|
|
4
|
+
declare const ABSTRACT_REPORT_SUMMARY_LIST_FILTER_STATE: {
|
|
5
|
+
readonly dateFilter: "last7Days";
|
|
6
|
+
readonly days: "";
|
|
7
|
+
readonly dateFrom: "";
|
|
8
|
+
readonly dateTo: "";
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
declare const ABSTRACT_REPORT_SUMMARY_LIST_STATUS: {
|
|
12
|
+
readonly requested: "REQUESTED";
|
|
13
|
+
readonly ready: "READY";
|
|
14
|
+
readonly inProgress: "IN_PROGRESS";
|
|
15
|
+
};
|
|
16
|
+
declare const ABSTRACT_REPORT_SUMMARY_LIST_STATUS_DISPLAY: {
|
|
17
|
+
readonly inProgress: "In progress";
|
|
18
|
+
readonly noContent: "No content";
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { ABSTRACT_REPORT_SUMMARY_LIST_CUSTOM_DAYS, ABSTRACT_REPORT_SUMMARY_LIST_DATE_RANGE, ABSTRACT_REPORT_SUMMARY_LIST_FILTER_STATE, ABSTRACT_REPORT_SUMMARY_LIST_LAST_7_DAYS, ABSTRACT_REPORT_SUMMARY_LIST_STATUS, ABSTRACT_REPORT_SUMMARY_LIST_STATUS_DISPLAY };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AbstractReportSummaryListDateFilter } from '@hmcts/opal-frontend-common/components/abstract/abstract-report-summary-list-base/types';
|
|
2
|
+
|
|
3
|
+
interface IAbstractReportSummaryListDateFieldIds {
|
|
4
|
+
days: string;
|
|
5
|
+
dateFrom: string;
|
|
6
|
+
dateTo: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface IAbstractReportSummaryListDateFormats {
|
|
10
|
+
input: string;
|
|
11
|
+
output: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface IAbstractReportSummaryListDateValidationMessages {
|
|
15
|
+
customDaysRequired: string;
|
|
16
|
+
dateRangeRequired: string;
|
|
17
|
+
invalidDate: string;
|
|
18
|
+
futureDate: string;
|
|
19
|
+
dateFromAfterDateTo: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface IAbstractReportSummaryListFilterState {
|
|
23
|
+
dateFilter: AbstractReportSummaryListDateFilter;
|
|
24
|
+
days: string;
|
|
25
|
+
dateFrom: string;
|
|
26
|
+
dateTo: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface IAbstractReportSummaryListQueryState {
|
|
30
|
+
fromDate: string | null;
|
|
31
|
+
toDate: string | null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type { IAbstractReportSummaryListDateFieldIds, IAbstractReportSummaryListDateFormats, IAbstractReportSummaryListDateValidationMessages, IAbstractReportSummaryListFilterState, IAbstractReportSummaryListQueryState };
|