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.
Files changed (72) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.d.ts.map +1 -1
  3. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js +7 -7
  4. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js.map +1 -1
  5. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.mjs +2 -2
  6. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.mjs.map +1 -1
  7. package/dist/UI/forms/PaymentReversalForm.js +4 -4
  8. package/dist/UI/forms/PaymentReversalForm.js.map +1 -1
  9. package/dist/UI/forms/PaymentReversalForm.mjs +4 -4
  10. package/dist/UI/forms/PaymentReversalForm.mjs.map +1 -1
  11. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.d.ts.map +1 -1
  12. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.js +68 -67
  13. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.js.map +1 -1
  14. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.mjs +4 -4
  15. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.mjs.map +1 -1
  16. package/dist/UI/widgets/ItemsWidgetCard.d.ts.map +1 -1
  17. package/dist/UI/widgets/ItemsWidgetCard.js +21 -21
  18. package/dist/UI/widgets/ItemsWidgetCard.js.map +1 -1
  19. package/dist/UI/widgets/ItemsWidgetCard.mjs +2 -2
  20. package/dist/UI/widgets/ItemsWidgetCard.mjs.map +1 -1
  21. package/dist/actions/ActionWrapper.d.ts.map +1 -1
  22. package/dist/actions/ActionWrapper.js +33 -41
  23. package/dist/actions/ActionWrapper.js.map +1 -1
  24. package/dist/actions/ActionWrapper.mjs +80 -117
  25. package/dist/actions/ActionWrapper.mjs.map +1 -1
  26. package/dist/dataBrowser/DataBrowserContainer.d.ts.map +1 -1
  27. package/dist/dataBrowser/DataBrowserContainer.js +35 -36
  28. package/dist/dataBrowser/DataBrowserContainer.js.map +1 -1
  29. package/dist/dataBrowser/DataBrowserContainer.mjs +2 -2
  30. package/dist/dataBrowser/DataBrowserContainer.mjs.map +1 -1
  31. package/dist/hooks/crudForeignKeyData.d.ts +11 -0
  32. package/dist/hooks/crudForeignKeyData.d.ts.map +1 -0
  33. package/dist/hooks/crudForeignKeyData.js +63 -0
  34. package/dist/hooks/crudForeignKeyData.js.map +1 -0
  35. package/dist/hooks/crudForeignKeyData.mjs +68 -0
  36. package/dist/hooks/crudForeignKeyData.mjs.map +1 -0
  37. package/dist/index.mjs +4 -4
  38. package/dist/inquiry/InquiryContainer.mjs +1 -1
  39. package/dist/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts +1 -1
  40. package/dist/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts.map +1 -1
  41. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.d.ts.map +1 -1
  42. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.js +21 -34
  43. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.js.map +1 -1
  44. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.mjs +2 -2
  45. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.mjs.map +1 -1
  46. package/dist/shell/Shell.d.ts.map +1 -1
  47. package/dist/shell/Shell.js +32 -49
  48. package/dist/shell/Shell.js.map +1 -1
  49. package/dist/shell/Shell.mjs +9 -10
  50. package/dist/shell/Shell.mjs.map +1 -1
  51. package/dist/udp/fileImportMapping/FileImportConfigCard.mjs +1 -1
  52. package/dist/udp/fileImportMapping/FileImportMappingWizard.mjs +1 -1
  53. package/dist/udp/lookups/LookupCreationSheet.mjs +1 -1
  54. package/dist/udp/pages/UdpLookupManagementPage/UdpLookupManagementPage.mjs +1 -1
  55. package/dist/utilities/auth/UserErrorModal.d.ts +12 -0
  56. package/dist/utilities/auth/UserErrorModal.d.ts.map +1 -0
  57. package/dist/utilities/auth/UserErrorModal.js +16 -0
  58. package/dist/utilities/auth/UserErrorModal.js.map +1 -0
  59. package/dist/utilities/auth/UserErrorModal.mjs +50 -0
  60. package/dist/utilities/auth/UserErrorModal.mjs.map +1 -0
  61. package/dist/utilities/auth/UserProvider.d.ts.map +1 -1
  62. package/dist/utilities/auth/UserProvider.js +8 -8
  63. package/dist/utilities/auth/UserProvider.js.map +1 -1
  64. package/dist/utilities/auth/UserProvider.mjs +29 -49
  65. package/dist/utilities/auth/UserProvider.mjs.map +1 -1
  66. package/dist/utilities/tenant/TenantAccessDialog.mjs +1 -1
  67. package/dist/utilities/tenant/TenantProvider.d.ts.map +1 -1
  68. package/dist/utilities/tenant/TenantProvider.js +17 -13
  69. package/dist/utilities/tenant/TenantProvider.js.map +1 -1
  70. package/dist/utilities/tenant/TenantProvider.mjs +7 -7
  71. package/dist/utilities/tenant/TenantProvider.mjs.map +1 -1
  72. 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 : 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) && ((tenantsLoading && !tenants) || (productsLoading && !selectedProduct));
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 support team"));
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":"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"}
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.2",
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.2",
3690
- "udp-stencil-component-library": "^26.2.1-beta.2",
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",