udp-react-enterprise-component-library 26.2.1-beta.2 → 26.2.1-beta.4
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/dist/.tsbuildinfo +1 -1
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.d.ts.map +1 -1
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js +7 -7
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js.map +1 -1
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.mjs +2 -2
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.mjs.map +1 -1
- package/dist/UI/forms/PaymentReversalForm.js +4 -4
- package/dist/UI/forms/PaymentReversalForm.js.map +1 -1
- package/dist/UI/forms/PaymentReversalForm.mjs +4 -4
- package/dist/UI/forms/PaymentReversalForm.mjs.map +1 -1
- package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.d.ts.map +1 -1
- package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.js +68 -67
- package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.js.map +1 -1
- package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.mjs +4 -4
- package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.mjs.map +1 -1
- package/dist/UI/widgets/ItemsWidgetCard.d.ts.map +1 -1
- package/dist/UI/widgets/ItemsWidgetCard.js +21 -21
- package/dist/UI/widgets/ItemsWidgetCard.js.map +1 -1
- package/dist/UI/widgets/ItemsWidgetCard.mjs +2 -2
- package/dist/UI/widgets/ItemsWidgetCard.mjs.map +1 -1
- package/dist/actions/ActionWrapper.d.ts.map +1 -1
- package/dist/actions/ActionWrapper.js +33 -41
- package/dist/actions/ActionWrapper.js.map +1 -1
- package/dist/actions/ActionWrapper.mjs +80 -117
- package/dist/actions/ActionWrapper.mjs.map +1 -1
- package/dist/dataBrowser/DataBrowserContainer.d.ts.map +1 -1
- package/dist/dataBrowser/DataBrowserContainer.js +35 -36
- package/dist/dataBrowser/DataBrowserContainer.js.map +1 -1
- package/dist/dataBrowser/DataBrowserContainer.mjs +2 -2
- package/dist/dataBrowser/DataBrowserContainer.mjs.map +1 -1
- package/dist/hooks/crudForeignKeyData.d.ts +11 -0
- package/dist/hooks/crudForeignKeyData.d.ts.map +1 -0
- package/dist/hooks/crudForeignKeyData.js +63 -0
- package/dist/hooks/crudForeignKeyData.js.map +1 -0
- package/dist/hooks/crudForeignKeyData.mjs +68 -0
- package/dist/hooks/crudForeignKeyData.mjs.map +1 -0
- package/dist/index.mjs +4 -4
- package/dist/inquiry/InquiryContainer.mjs +1 -1
- package/dist/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts +1 -1
- package/dist/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts.map +1 -1
- package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.d.ts.map +1 -1
- package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.js +21 -34
- package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.js.map +1 -1
- package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.mjs +2 -2
- package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.mjs.map +1 -1
- package/dist/shell/Shell.d.ts.map +1 -1
- package/dist/shell/Shell.js +32 -49
- package/dist/shell/Shell.js.map +1 -1
- package/dist/shell/Shell.mjs +9 -10
- package/dist/shell/Shell.mjs.map +1 -1
- package/dist/udp/fileImportMapping/FileImportConfigCard.mjs +1 -1
- package/dist/udp/fileImportMapping/FileImportMappingWizard.mjs +1 -1
- package/dist/udp/lookups/LookupCreationSheet.mjs +1 -1
- package/dist/udp/pages/UdpLookupManagementPage/UdpLookupManagementPage.mjs +1 -1
- package/dist/utilities/auth/UserErrorModal.d.ts +12 -0
- package/dist/utilities/auth/UserErrorModal.d.ts.map +1 -0
- package/dist/utilities/auth/UserErrorModal.js +16 -0
- package/dist/utilities/auth/UserErrorModal.js.map +1 -0
- package/dist/utilities/auth/UserErrorModal.mjs +50 -0
- package/dist/utilities/auth/UserErrorModal.mjs.map +1 -0
- package/dist/utilities/auth/UserProvider.d.ts.map +1 -1
- package/dist/utilities/auth/UserProvider.js +8 -8
- package/dist/utilities/auth/UserProvider.js.map +1 -1
- package/dist/utilities/auth/UserProvider.mjs +29 -49
- package/dist/utilities/auth/UserProvider.mjs.map +1 -1
- package/dist/utilities/tenant/TenantAccessDialog.mjs +1 -1
- package/dist/utilities/tenant/TenantProvider.d.ts.map +1 -1
- package/dist/utilities/tenant/TenantProvider.js +17 -13
- package/dist/utilities/tenant/TenantProvider.js.map +1 -1
- package/dist/utilities/tenant/TenantProvider.mjs +7 -7
- package/dist/utilities/tenant/TenantProvider.mjs.map +1 -1
- package/package.json +11 -3
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
import React, { useCallback, useMemo, useEffect, useContext } from 'react';
|
|
1
|
+
import React, { lazy, Suspense, useCallback, useMemo, useEffect, useContext } from 'react';
|
|
2
2
|
import { useUser } from '../auth/useUser';
|
|
3
3
|
import { UserDispatchContext } from '../auth/internal';
|
|
4
4
|
import { useApiQuery } from '../useApiQuery';
|
|
5
5
|
import { TenantContext } from './tenantContext';
|
|
6
6
|
import { ConfigService } from '../../configService';
|
|
7
|
-
import { UdpDialog } from '../../UI/fluent-web-components/UdpDialog';
|
|
8
7
|
import { useAccount } from '@azure/msal-react';
|
|
9
8
|
import { MenuProvider } from '../menus/MenuProvider';
|
|
10
|
-
import { TenantAccessDialog } from './TenantAccessDialog';
|
|
11
9
|
import { storeTenant } from '../storage/UnitySessionStorage';
|
|
12
10
|
import { TenantTypeEnums } from '../../enums/unitySystemEnums';
|
|
13
11
|
import { useTenantStore } from '../../stores/tenantStore';
|
|
14
12
|
import { useProductsStore } from '../../stores/productsStore';
|
|
15
13
|
import { LoadingIndicator } from '../../UI/loading/LoadingIndicator';
|
|
14
|
+
// Lazy-load the tenant dialogs — they render the stencil-based UdpDialog /
|
|
15
|
+
// UdpAutocomplete components which transitively pull in udp-fluent-icon
|
|
16
|
+
// (~574 KB), @fluentui/web-components, @microsoft/fast-element, etc. Tenant
|
|
17
|
+
// mismatch / no-tenants paths are rare, so this whole tree should only load
|
|
18
|
+
// when actually needed.
|
|
19
|
+
const TenantAccessDialog = lazy(() => import('./TenantAccessDialog').then((m) => ({ default: m.TenantAccessDialog })));
|
|
20
|
+
const UdpDialog = lazy(() => import('../../UI/fluent-web-components/UdpDialog').then((m) => ({ default: m.UdpDialog })));
|
|
16
21
|
const useTenantStoreSync = (activeTenant) => {
|
|
17
22
|
const setCurrentTenant = useTenantStore((state) => state.setCurrentTenant);
|
|
18
23
|
useEffect(() => {
|
|
@@ -40,7 +45,7 @@ const useTenantStoreSync = (activeTenant) => {
|
|
|
40
45
|
activeTenant === null || activeTenant === void 0 ? void 0 : activeTenant.tenantName,
|
|
41
46
|
activeTenant === null || activeTenant === void 0 ? void 0 : activeTenant.tenantType,
|
|
42
47
|
activeTenant === null || activeTenant === void 0 ? void 0 : activeTenant.theme,
|
|
43
|
-
setCurrentTenant
|
|
48
|
+
setCurrentTenant,
|
|
44
49
|
]);
|
|
45
50
|
};
|
|
46
51
|
export const TenantProvider = ({ children }) => {
|
|
@@ -48,7 +53,7 @@ export const TenantProvider = ({ children }) => {
|
|
|
48
53
|
const user = useUser();
|
|
49
54
|
const activeAccount = useAccount();
|
|
50
55
|
const { changeTenant } = useContext(UserDispatchContext);
|
|
51
|
-
const { data: tenants, isLoading: tenantsLoading, refetch: refresh } = useApiQuery(ConfigService.securityV2ApiUrl, `user/tenants?productId=${ConfigService.config.UNITY_PRODUCT_ID}`, { skipTenantHeader: true }, {
|
|
56
|
+
const { data: tenants, isLoading: tenantsLoading, refetch: refresh, } = useApiQuery(ConfigService.securityV2ApiUrl, `user/tenants?productId=${ConfigService.config.UNITY_PRODUCT_ID}`, { skipTenantHeader: true }, {
|
|
52
57
|
enabled: !!(activeAccount === null || activeAccount === void 0 ? void 0 : activeAccount.idTokenClaims),
|
|
53
58
|
});
|
|
54
59
|
const { data: selectedProduct, isLoading: productsLoading } = useApiQuery(ConfigService.tenantV2ApiUrl, `product/${ConfigService.config.UNITY_PRODUCT_ID}`, { skipTenantHeader: true }, {
|
|
@@ -57,7 +62,8 @@ export const TenantProvider = ({ children }) => {
|
|
|
57
62
|
const hasTenantsData = Array.isArray(tenants);
|
|
58
63
|
const userHasLoaded = user && user.statusCode !== undefined;
|
|
59
64
|
const activeTenant = (user === null || user === void 0 ? void 0 : user.currentTenantId) && hasTenantsData
|
|
60
|
-
? (_a = tenants.find((t) => t.tenantId === user.currentTenantId)) !== null && _a !== void 0 ? _a : null
|
|
65
|
+
? ((_a = tenants.find((t) => t.tenantId === user.currentTenantId)) !== null && _a !== void 0 ? _a : null)
|
|
66
|
+
: null;
|
|
61
67
|
const isProductTenant = (activeTenant === null || activeTenant === void 0 ? void 0 : activeTenant.tenantType) === TenantTypeEnums.Product;
|
|
62
68
|
useTenantStoreSync(activeTenant);
|
|
63
69
|
if ((selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.isUnityDefault) && (activeTenant === null || activeTenant === void 0 ? void 0 : activeTenant.tenantId)) {
|
|
@@ -79,7 +85,8 @@ export const TenantProvider = ({ children }) => {
|
|
|
79
85
|
}), [tenants, activeTenant, isProductTenant, refresh]);
|
|
80
86
|
// Only block rendering on initial load — not on background refetches
|
|
81
87
|
// when we already have data to display
|
|
82
|
-
const shouldBlockForTenantData = Boolean(activeAccount) &&
|
|
88
|
+
const shouldBlockForTenantData = Boolean(activeAccount) &&
|
|
89
|
+
((tenantsLoading && !tenants) || (productsLoading && !selectedProduct));
|
|
83
90
|
if (shouldBlockForTenantData) {
|
|
84
91
|
return React.createElement(LoadingIndicator, null);
|
|
85
92
|
}
|
|
@@ -87,13 +94,10 @@ export const TenantProvider = ({ children }) => {
|
|
|
87
94
|
const currentTenantAllowed = hasTenantsData
|
|
88
95
|
? tenants.some((t) => t.tenantId === (user === null || user === void 0 ? void 0 : user.currentTenantId))
|
|
89
96
|
: false;
|
|
90
|
-
const shouldShowTenantMismatchDialog = userHasLoaded &&
|
|
91
|
-
hasTenantsData &&
|
|
92
|
-
!noTenantsAvailable &&
|
|
93
|
-
!currentTenantAllowed;
|
|
97
|
+
const shouldShowTenantMismatchDialog = userHasLoaded && hasTenantsData && !noTenantsAvailable && !currentTenantAllowed;
|
|
94
98
|
if (noTenantsAvailable) {
|
|
95
|
-
return (React.createElement(UdpDialog, { open: true, dialogTitle: "No Access", type: "alert", showHeaderCloseButton: false }, "Your user does not have access to any tenants for this product. Please contact your
|
|
99
|
+
return (React.createElement(Suspense, { fallback: React.createElement(LoadingIndicator, null) }, React.createElement(UdpDialog, { open: true, dialogTitle: "No Access", type: "alert", showHeaderCloseButton: false }, "Your user does not have access to any tenants for this product. Please contact your suppor team")));
|
|
96
100
|
}
|
|
97
|
-
return (React.createElement(TenantContext.Provider, { value: contextValue }, React.createElement(MenuProvider, null, React.createElement(TenantAccessDialog, { open: shouldShowTenantMismatchDialog, tenants: tenants, onTenantChange: handleTenantChange, productName: selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.productName }), !shouldShowTenantMismatchDialog && children)));
|
|
101
|
+
return (React.createElement(TenantContext.Provider, { value: contextValue }, React.createElement(MenuProvider, null, shouldShowTenantMismatchDialog && (React.createElement(Suspense, { fallback: React.createElement(LoadingIndicator, null) }, React.createElement(TenantAccessDialog, { open: shouldShowTenantMismatchDialog, tenants: tenants, onTenantChange: handleTenantChange, productName: selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.productName }))), !shouldShowTenantMismatchDialog && children)));
|
|
98
102
|
};
|
|
99
103
|
//# sourceMappingURL=TenantProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenantProvider.js","sourceRoot":"","sources":["../../../src/utilities/tenant/TenantProvider.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TenantProvider.js","sourceRoot":"","sources":["../../../src/utilities/tenant/TenantProvider.jsx"],"names":[],"mappings":"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"}
|
|
@@ -8,13 +8,13 @@ import { useApiQuery } from "../useApiQuery.mjs";
|
|
|
8
8
|
import { MenuProvider } from "../menus/MenuProvider.mjs";
|
|
9
9
|
import { LoadingIndicator } from "../../UI/loading/LoadingIndicator/LoadingIndicator.mjs";
|
|
10
10
|
import { TenantContext } from "./tenantContext.mjs";
|
|
11
|
-
import { UdpDialog } from "../../UI/fluent-web-components/UdpDialog.mjs";
|
|
12
|
-
import { TenantAccessDialog } from "./TenantAccessDialog.mjs";
|
|
13
11
|
import { useProductsStore } from "../../stores/productsStore.mjs";
|
|
14
12
|
import { c } from "react-compiler-runtime";
|
|
15
|
-
import React, { useCallback, useContext, useEffect, useMemo } from "react";
|
|
13
|
+
import React, { Suspense, lazy, useCallback, useContext, useEffect, useMemo } from "react";
|
|
16
14
|
import { useAccount } from "@azure/msal-react";
|
|
17
15
|
//#region src/utilities/tenant/TenantProvider.jsx
|
|
16
|
+
const TenantAccessDialog = lazy(() => import("./TenantAccessDialog.mjs").then((m) => ({ default: m.TenantAccessDialog })));
|
|
17
|
+
const UdpDialog = lazy(() => import("../../UI/fluent-web-components/UdpDialog.mjs").then((m) => ({ default: m.UdpDialog })));
|
|
18
18
|
const useTenantStoreSync = (activeTenant) => {
|
|
19
19
|
const $ = c(9);
|
|
20
20
|
const setCurrentTenant = useTenantStore(_temp);
|
|
@@ -93,18 +93,18 @@ const TenantProvider = ({ children }) => {
|
|
|
93
93
|
const noTenantsAvailable = hasTenantsData && tenants.length === 0 && userHasLoaded;
|
|
94
94
|
const currentTenantAllowed = hasTenantsData ? tenants.some((t_0) => t_0.tenantId === user?.currentTenantId) : false;
|
|
95
95
|
const shouldShowTenantMismatchDialog = userHasLoaded && hasTenantsData && !noTenantsAvailable && !currentTenantAllowed;
|
|
96
|
-
if (noTenantsAvailable) return /* @__PURE__ */ React.createElement(UdpDialog, {
|
|
96
|
+
if (noTenantsAvailable) return /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement(LoadingIndicator, null) }, /* @__PURE__ */ React.createElement(UdpDialog, {
|
|
97
97
|
open: true,
|
|
98
98
|
dialogTitle: "No Access",
|
|
99
99
|
type: "alert",
|
|
100
100
|
showHeaderCloseButton: false
|
|
101
|
-
}, "Your user does not have access to any tenants for this product. Please contact your support team.");
|
|
102
|
-
return /* @__PURE__ */ React.createElement(TenantContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement(MenuProvider, null, /* @__PURE__ */ React.createElement(TenantAccessDialog, {
|
|
101
|
+
}, "Your user does not have access to any tenants for this product. Please contact your support team."));
|
|
102
|
+
return /* @__PURE__ */ React.createElement(TenantContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement(MenuProvider, null, shouldShowTenantMismatchDialog && /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement(LoadingIndicator, null) }, /* @__PURE__ */ React.createElement(TenantAccessDialog, {
|
|
103
103
|
open: shouldShowTenantMismatchDialog,
|
|
104
104
|
tenants,
|
|
105
105
|
onTenantChange: handleTenantChange,
|
|
106
106
|
productName: selectedProduct?.productName
|
|
107
|
-
}), !shouldShowTenantMismatchDialog && children));
|
|
107
|
+
})), !shouldShowTenantMismatchDialog && children));
|
|
108
108
|
};
|
|
109
109
|
function _temp(state) {
|
|
110
110
|
return state.setCurrentTenant;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenantProvider.mjs","names":["React","useCallback","useMemo","useEffect","useContext","useUser","UserDispatchContext","useApiQuery","TenantContext","ConfigService","UdpDialog","useAccount","MenuProvider","TenantAccessDialog","storeTenant","TenantTypeEnums","useTenantStore","useProductsStore","LoadingIndicator","useTenantStoreSync","activeTenant","$","_c","setCurrentTenant","_temp","t0","tenantId","current","getState","currentTenant","theme","name","tenantName","tenantType","t1","t2","t3","t4","t5","TenantProvider","children","user","activeAccount","changeTenant","data","tenants","isLoading","tenantsLoading","refetch","refresh","securityV2ApiUrl","config","UNITY_PRODUCT_ID","skipTenantHeader","enabled","idTokenClaims","selectedProduct","productsLoading","tenantV2ApiUrl","idToken","hasTenantsData","Array","isArray","userHasLoaded","statusCode","undefined","currentTenantId","find","t","isProductTenant","Product","isUnityDefault","fetchProducts","handleTenantChange","tenant","contextValue","tenantsList","filteredTenantsList","shouldBlockForTenantData","Boolean","noTenantsAvailable","length","currentTenantAllowed","some","shouldShowTenantMismatchDialog","productName","state"],"sources":["../../../src/utilities/tenant/TenantProvider.jsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useContext } from 'react';\nimport { useUser } from '../auth/useUser';\nimport { UserDispatchContext } from '../auth/internal';\nimport { useApiQuery } from '../useApiQuery';\nimport { TenantContext } from './tenantContext';\nimport { ConfigService } from '../../configService';\nimport { UdpDialog } from '../../UI/fluent-web-components/UdpDialog';\nimport { useAccount } from '@azure/msal-react';\nimport { MenuProvider } from '../menus/MenuProvider';\nimport { TenantAccessDialog } from './TenantAccessDialog';\nimport { storeTenant } from '../storage/UnitySessionStorage';\nimport { TenantTypeEnums } from '../../enums/unitySystemEnums';\nimport { useTenantStore } from '../../stores/tenantStore';\nimport { useProductsStore } from '../../stores/productsStore';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\n\nconst useTenantStoreSync = (activeTenant) => {\n const setCurrentTenant = useTenantStore((state) => state.setCurrentTenant);\n\n useEffect(() => {\n if (!activeTenant?.tenantId) return;\n\n const current = useTenantStore.getState().currentTenant;\n const theme = activeTenant.theme ?? null;\n const name = activeTenant.tenantName ?? null;\n const tenantType = activeTenant.tenantType;\n\n if (\n current?.tenantId === activeTenant.tenantId &&\n current?.tenantType === tenantType &&\n (current?.name ?? null) === name &&\n (current?.theme ?? null) === theme\n ) {\n return;\n }\n\n setCurrentTenant({\n tenantId: activeTenant.tenantId,\n name,\n tenantType,\n theme,\n });\n }, [\n activeTenant?.tenantId,\n activeTenant?.tenantName,\n activeTenant?.tenantType,\n activeTenant?.theme,\n setCurrentTenant\n ]);\n};\n\nexport const TenantProvider = ({ children }) => {\n const user = useUser();\n const activeAccount = useAccount();\n\n const { changeTenant } = useContext(UserDispatchContext);\n\n const { data: tenants, isLoading: tenantsLoading, refetch: refresh } = useApiQuery(\n ConfigService.securityV2ApiUrl,\n `user/tenants?productId=${ConfigService.config.UNITY_PRODUCT_ID}`,\n { skipTenantHeader: true },\n {\n enabled: !!activeAccount?.idTokenClaims,\n }\n );\n\n const { data: selectedProduct, isLoading: productsLoading } = useApiQuery(\n ConfigService.tenantV2ApiUrl,\n `product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n { skipTenantHeader: true },\n {\n enabled: !!activeAccount?.idToken,\n }\n );\n\n const hasTenantsData = Array.isArray(tenants);\n const userHasLoaded = user && user.statusCode !== undefined;\n\n const activeTenant = user?.currentTenantId && hasTenantsData\n ? tenants.find((t) => t.tenantId === user.currentTenantId) ?? null\n : null;\n\n const isProductTenant = activeTenant?.tenantType === TenantTypeEnums.Product;\n\n useTenantStoreSync(activeTenant);\n\n if (selectedProduct?.isUnityDefault && activeTenant?.tenantId) {\n useProductsStore.getState().fetchProducts(activeTenant.tenantId);\n }\n\n const handleTenantChange = useCallback(\n (tenant) => {\n if (!tenant) return;\n storeTenant(tenant.tenantId);\n changeTenant(tenant.tenantId);\n },\n [changeTenant]\n );\n\n // Hook moved BEFORE any early returns\n const contextValue = useMemo(() => ({\n tenantsList: tenants ?? null,\n filteredTenantsList: tenants ?? null,\n activeTenant,\n isProductTenant,\n refresh,\n }), [tenants, activeTenant, isProductTenant, refresh]);\n\n // Only block rendering on initial load — not on background refetches\n // when we already have data to display\n const shouldBlockForTenantData = Boolean(activeAccount) && (\n (tenantsLoading && !tenants) || (productsLoading && !selectedProduct)\n );\n\n if (shouldBlockForTenantData) {\n return <LoadingIndicator />;\n }\n\n const noTenantsAvailable = hasTenantsData && tenants.length === 0 && userHasLoaded;\n\n const currentTenantAllowed = hasTenantsData\n ? tenants.some((t) => t.tenantId === user?.currentTenantId)\n : false;\n\n const shouldShowTenantMismatchDialog =\n userHasLoaded &&\n hasTenantsData &&\n !noTenantsAvailable &&\n !currentTenantAllowed;\n\n if (noTenantsAvailable) {\n return (\n <UdpDialog\n open={true}\n dialogTitle='No Access'\n type='alert'\n showHeaderCloseButton={false}\n >\n Your user does not have access to any tenants for this product. Please contact your support team.\n </UdpDialog>\n );\n }\n\n\n return (\n <TenantContext.Provider value={contextValue}>\n <MenuProvider>\n <TenantAccessDialog\n open={shouldShowTenantMismatchDialog}\n tenants={tenants}\n onTenantChange={handleTenantChange}\n productName={selectedProduct?.productName}\n />\n {!shouldShowTenantMismatchDialog && children}\n </MenuProvider>\n </TenantContext.Provider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TenantProvider.mjs","names":["React","lazy","Suspense","useCallback","useMemo","useEffect","useContext","useUser","UserDispatchContext","useApiQuery","TenantContext","ConfigService","useAccount","MenuProvider","storeTenant","TenantTypeEnums","useTenantStore","useProductsStore","LoadingIndicator","TenantAccessDialog","then","m","default","UdpDialog","useTenantStoreSync","activeTenant","$","_c","setCurrentTenant","_temp","t0","tenantId","current","getState","currentTenant","theme","name","tenantName","tenantType","t1","t2","t3","t4","t5","TenantProvider","children","user","activeAccount","changeTenant","data","tenants","isLoading","tenantsLoading","refetch","refresh","securityV2ApiUrl","config","UNITY_PRODUCT_ID","skipTenantHeader","enabled","idTokenClaims","selectedProduct","productsLoading","tenantV2ApiUrl","idToken","hasTenantsData","Array","isArray","userHasLoaded","statusCode","undefined","currentTenantId","find","t","isProductTenant","Product","isUnityDefault","fetchProducts","handleTenantChange","tenant","contextValue","tenantsList","filteredTenantsList","shouldBlockForTenantData","Boolean","noTenantsAvailable","length","currentTenantAllowed","some","shouldShowTenantMismatchDialog","productName","state"],"sources":["../../../src/utilities/tenant/TenantProvider.jsx"],"sourcesContent":["import React, { lazy, Suspense, useCallback, useMemo, useEffect, useContext } from 'react';\nimport { useUser } from '../auth/useUser';\nimport { UserDispatchContext } from '../auth/internal';\nimport { useApiQuery } from '../useApiQuery';\nimport { TenantContext } from './tenantContext';\nimport { ConfigService } from '../../configService';\nimport { useAccount } from '@azure/msal-react';\nimport { MenuProvider } from '../menus/MenuProvider';\nimport { storeTenant } from '../storage/UnitySessionStorage';\nimport { TenantTypeEnums } from '../../enums/unitySystemEnums';\nimport { useTenantStore } from '../../stores/tenantStore';\nimport { useProductsStore } from '../../stores/productsStore';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\n\n// Lazy-load the tenant dialogs — they render the stencil-based UdpDialog /\n// UdpAutocomplete components which transitively pull in udp-fluent-icon\n// (~574 KB), @fluentui/web-components, @microsoft/fast-element, etc. Tenant\n// mismatch / no-tenants paths are rare, so this whole tree should only load\n// when actually needed.\nconst TenantAccessDialog = lazy(() =>\n import('./TenantAccessDialog').then((m) => ({ default: m.TenantAccessDialog })),\n);\nconst UdpDialog = lazy(() =>\n import('../../UI/fluent-web-components/UdpDialog').then((m) => ({ default: m.UdpDialog })),\n);\n\nconst useTenantStoreSync = (activeTenant) => {\n const setCurrentTenant = useTenantStore((state) => state.setCurrentTenant);\n\n useEffect(() => {\n if (!activeTenant?.tenantId) return;\n\n const current = useTenantStore.getState().currentTenant;\n const theme = activeTenant.theme ?? null;\n const name = activeTenant.tenantName ?? null;\n const tenantType = activeTenant.tenantType;\n\n if (\n current?.tenantId === activeTenant.tenantId &&\n current?.tenantType === tenantType &&\n (current?.name ?? null) === name &&\n (current?.theme ?? null) === theme\n ) {\n return;\n }\n\n setCurrentTenant({\n tenantId: activeTenant.tenantId,\n name,\n tenantType,\n theme,\n });\n }, [\n activeTenant?.tenantId,\n activeTenant?.tenantName,\n activeTenant?.tenantType,\n activeTenant?.theme,\n setCurrentTenant,\n ]);\n};\n\nexport const TenantProvider = ({ children }) => {\n const user = useUser();\n const activeAccount = useAccount();\n\n const { changeTenant } = useContext(UserDispatchContext);\n\n const {\n data: tenants,\n isLoading: tenantsLoading,\n refetch: refresh,\n } = useApiQuery(\n ConfigService.securityV2ApiUrl,\n `user/tenants?productId=${ConfigService.config.UNITY_PRODUCT_ID}`,\n { skipTenantHeader: true },\n {\n enabled: !!activeAccount?.idTokenClaims,\n }\n );\n\n const { data: selectedProduct, isLoading: productsLoading } = useApiQuery(\n ConfigService.tenantV2ApiUrl,\n `product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n { skipTenantHeader: true },\n {\n enabled: !!activeAccount?.idToken,\n }\n );\n\n const hasTenantsData = Array.isArray(tenants);\n const userHasLoaded = user && user.statusCode !== undefined;\n\n const activeTenant =\n user?.currentTenantId && hasTenantsData\n ? (tenants.find((t) => t.tenantId === user.currentTenantId) ?? null)\n : null;\n\n const isProductTenant = activeTenant?.tenantType === TenantTypeEnums.Product;\n\n useTenantStoreSync(activeTenant);\n\n if (selectedProduct?.isUnityDefault && activeTenant?.tenantId) {\n useProductsStore.getState().fetchProducts(activeTenant.tenantId);\n }\n\n const handleTenantChange = useCallback(\n (tenant) => {\n if (!tenant) return;\n storeTenant(tenant.tenantId);\n changeTenant(tenant.tenantId);\n },\n [changeTenant]\n );\n\n // Hook moved BEFORE any early returns\n const contextValue = useMemo(\n () => ({\n tenantsList: tenants ?? null,\n filteredTenantsList: tenants ?? null,\n activeTenant,\n isProductTenant,\n refresh,\n }),\n [tenants, activeTenant, isProductTenant, refresh]\n );\n\n // Only block rendering on initial load — not on background refetches\n // when we already have data to display\n const shouldBlockForTenantData =\n Boolean(activeAccount) &&\n ((tenantsLoading && !tenants) || (productsLoading && !selectedProduct));\n\n if (shouldBlockForTenantData) {\n return <LoadingIndicator />;\n }\n\n const noTenantsAvailable = hasTenantsData && tenants.length === 0 && userHasLoaded;\n\n const currentTenantAllowed = hasTenantsData\n ? tenants.some((t) => t.tenantId === user?.currentTenantId)\n : false;\n\n const shouldShowTenantMismatchDialog =\n userHasLoaded && hasTenantsData && !noTenantsAvailable && !currentTenantAllowed;\n\n if (noTenantsAvailable) {\n return (\n <Suspense fallback={<LoadingIndicator />}>\n <UdpDialog open={true} dialogTitle=\"No Access\" type=\"alert\" showHeaderCloseButton={false}>\n Your user does not have access to any tenants for this product. Please contact your support\n team.\n </UdpDialog>\n </Suspense>\n );\n }\n\n return (\n <TenantContext.Provider value={contextValue}>\n <MenuProvider>\n {shouldShowTenantMismatchDialog && (\n <Suspense fallback={<LoadingIndicator />}>\n <TenantAccessDialog\n open={shouldShowTenantMismatchDialog}\n tenants={tenants}\n onTenantChange={handleTenantChange}\n productName={selectedProduct?.productName}\n />\n </Suspense>\n )}\n {!shouldShowTenantMismatchDialog && children}\n </MenuProvider>\n </TenantContext.Provider>\n );\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "udp-react-enterprise-component-library",
|
|
3
|
-
"version": "26.2.1-beta.
|
|
3
|
+
"version": "26.2.1-beta.4",
|
|
4
4
|
"description": "React-based UI component library implementing Fluent UI design for Univerus internal projects",
|
|
5
5
|
"author": "Univerus",
|
|
6
6
|
"license": "MIT",
|
|
@@ -377,6 +377,10 @@
|
|
|
377
377
|
"types": "./dist/hooks/crudActions.d.ts",
|
|
378
378
|
"default": "./dist/hooks/crudActions.mjs"
|
|
379
379
|
},
|
|
380
|
+
"./hooks/crudForeignKeyData": {
|
|
381
|
+
"types": "./dist/hooks/crudForeignKeyData.d.ts",
|
|
382
|
+
"default": "./dist/hooks/crudForeignKeyData.mjs"
|
|
383
|
+
},
|
|
380
384
|
"./hooks/useActions": {
|
|
381
385
|
"types": "./dist/hooks/useActions.d.ts",
|
|
382
386
|
"default": "./dist/hooks/useActions.mjs"
|
|
@@ -3141,6 +3145,10 @@
|
|
|
3141
3145
|
"types": "./dist/utilities/auth/user.d.ts",
|
|
3142
3146
|
"default": "./dist/utilities/auth/user.mjs"
|
|
3143
3147
|
},
|
|
3148
|
+
"./utilities/auth/UserErrorModal": {
|
|
3149
|
+
"types": "./dist/utilities/auth/UserErrorModal.d.ts",
|
|
3150
|
+
"default": "./dist/utilities/auth/UserErrorModal.mjs"
|
|
3151
|
+
},
|
|
3144
3152
|
"./utilities/auth/UserProvider": {
|
|
3145
3153
|
"types": "./dist/utilities/auth/UserProvider.d.ts",
|
|
3146
3154
|
"default": "./dist/utilities/auth/UserProvider.mjs"
|
|
@@ -3686,8 +3694,8 @@
|
|
|
3686
3694
|
"@microlink/react-json-view": "^1.31.20",
|
|
3687
3695
|
"@tanstack/react-query": "^5",
|
|
3688
3696
|
"@tanstack/react-query-devtools": "^5",
|
|
3689
|
-
"udp-react-stencil-component-library": "^26.0.3-beta.
|
|
3690
|
-
"udp-stencil-component-library": "^26.
|
|
3697
|
+
"udp-react-stencil-component-library": "^26.0.3-beta.4",
|
|
3698
|
+
"udp-stencil-component-library": "^26.3.0-beta.1",
|
|
3691
3699
|
"axios": "^0.31.1",
|
|
3692
3700
|
"axios-hooks": "^2.1.0",
|
|
3693
3701
|
"broadcast-channel": "^4.17.0",
|