diff --git a/apps/storefront/src/components/B3Dialog.tsx b/apps/storefront/src/components/B3Dialog.tsx index ae817f91..07e9b0ec 100644 --- a/apps/storefront/src/components/B3Dialog.tsx +++ b/apps/storefront/src/components/B3Dialog.tsx @@ -6,6 +6,7 @@ import { Dialog, DialogActions, DialogContent, + DialogProps, DialogTitle, SxProps, Theme, @@ -40,6 +41,7 @@ export interface B3DialogProps { dialogContentSx?: SxProps; dialogSx?: SxProps; dialogWidth?: string; + restDialogParams?: Omit; } export default function B3Dialog({ @@ -64,6 +66,7 @@ export default function B3Dialog({ fullWidth = false, disabledSaveBtn = false, dialogWidth = '', + restDialogParams, }: B3DialogProps) { const container = useRef(null); @@ -113,6 +116,7 @@ export default function B3Dialog({ aria-describedby="alert-dialog-description" id="b2b-dialog-container" sx={customStyle} + {...restDialogParams} > {title && ( { - return !!pagesSubsidiariesPermission[key as keyof PagesSubsidiariesPermissionProps]; - }); - - const route = PAGES_SUBSIDIARIES_PERMISSION_KEYS.find((item) => item.key === key); - - if (route) { - handleClose(); - setLoading(false); - navigate(route.path); - } - } } catch (error) { b2bLogger.error(error); } finally { @@ -131,6 +110,33 @@ function HierarchyDialog({ loading={loading} handleLeftClick={handleClose} handRightClick={handleSwitchCompanyClick} + restDialogParams={{ + TransitionProps: { + onExited: () => { + if (!currentRow) return; + const { companyId } = currentRow; + if (companyId === +currentCompanyId) { + const { hash } = window.location; + if (hash.includes('/shoppingList/')) { + navigate('/shoppingLists'); + } + } + if (companyId !== +currentCompanyId && !isHasCurrentPagePermission) { + const key = Object.keys(pagesSubsidiariesPermission).find((key) => { + return !!pagesSubsidiariesPermission[key as keyof PagesSubsidiariesPermissionProps]; + }); + + const route = PAGES_SUBSIDIARIES_PERMISSION_KEYS.find((item) => item.key === key); + + if (route) { + handleClose(); + setLoading(false); + navigate(route.path); + } + } + }, + }, + }} dialogSx={{ '& .MuiDialogTitle-root': { border: 0, diff --git a/apps/storefront/src/pages/QuoteDraft/index.tsx b/apps/storefront/src/pages/QuoteDraft/index.tsx index e4a60a94..07281ff1 100644 --- a/apps/storefront/src/pages/QuoteDraft/index.tsx +++ b/apps/storefront/src/pages/QuoteDraft/index.tsx @@ -9,7 +9,8 @@ import { cloneDeep, concat, uniq } from 'lodash-es'; import CustomButton from '@/components/button/CustomButton'; import { getContrastColor } from '@/components/outSideComponents/utils/b3CustomStyles'; import B3Spin from '@/components/spin/B3Spin'; -import { useMobile, useSetCountry } from '@/hooks'; +import { permissionLevels } from '@/constants'; +import { useMobile, useSetCountry, useValidatePermissionWithComparisonType } from '@/hooks'; import { CustomStyleContext } from '@/shared/customStyleButton'; import { GlobalContext } from '@/shared/global'; import { @@ -186,6 +187,12 @@ function QuoteDraft({ setOpenPage }: PageProps) { const quoteSummaryRef = useRef(null); + const [isAddressCompanyHierarchy] = useValidatePermissionWithComparisonType({ + level: permissionLevels.COMPANY_SUBSIDIARIES, + code: b2bPermissionsMap.getAddressesPermission, + containOrEqual: 'equal', + }); + useSetCountry(); const contactInfoRef = useRef(null); @@ -213,9 +220,20 @@ function QuoteDraft({ setOpenPage }: PageProps) { try { if (isB2BUser) { const companyId = companyB2BId || salesRepCompanyId; - const { - addresses: { edges: addressB2BList = [] }, - } = await getB2BCustomerAddresses(+companyId); + + let addressB2BList = []; + const fetchAddresses = async (id: number) => { + const { + addresses: { edges }, + } = await getB2BCustomerAddresses(id); + return edges; + }; + + if (!selectCompanyHierarchyId) { + addressB2BList = await fetchAddresses(+companyId); + } else if (selectCompanyHierarchyId && isAddressCompanyHierarchy) { + addressB2BList = await fetchAddresses(+selectCompanyHierarchyId); + } const shippingDefaultAddress = addressB2BList.find( (item: B2BAddress) => item?.node?.isDefaultShipping === 1, @@ -314,7 +332,7 @@ function QuoteDraft({ setOpenPage }: PageProps) { init(); // disabling as we only need to run this once and values at starting render are good enough // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [selectCompanyHierarchyId, isAddressCompanyHierarchy]); const quoteAndExtraFieldsInfo = useMemo(() => { const contactInfo: CustomFieldItems = quoteInfoOrigin.contactInfo || {}; diff --git a/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts b/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts index bb3bf0b2..a04a941b 100644 --- a/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts +++ b/apps/storefront/src/shared/service/b2b/graphql/shoppingList.ts @@ -121,9 +121,7 @@ const updateShoppingList = ( } }`; -const createShoppingList = ( - fn: string, -) => `mutation($shoppingListData: ShoppingListsCreateInputType!){ +const createShoppingList = (fn: string) => `mutation($shoppingListData: ShoppingListsInputType!){ ${fn}( shoppingListData: $shoppingListData ) { diff --git a/apps/storefront/src/utils/b3CheckPermissions/check.ts b/apps/storefront/src/utils/b3CheckPermissions/check.ts index d1a42cb6..578d9608 100644 --- a/apps/storefront/src/utils/b3CheckPermissions/check.ts +++ b/apps/storefront/src/utils/b3CheckPermissions/check.ts @@ -103,6 +103,11 @@ export const verifyLevelPermission = ({ const { permissionLevel } = info; if (!permissionLevel) return false; + + const salesRepCompanyId = store.getState().b2bFeatures.masqueradeCompany.id; + + if (salesRepCompanyId) return true; + const { companyInfo, customer } = store.getState().company || {}; return levelComparison({