11import { Box } from "@mui/material" ;
2- import { useContext , useEffect , useState } from "react" ;
2+ import { useContext , useEffect , useMemo , useState } from "react" ;
33import { useSearchParams , useNavigate , Navigate } from "react-router-dom" ;
44import { FormProvider , useForm } from "react-hook-form" ;
55
@@ -85,13 +85,15 @@ export const ShoppingCartPage = () => {
8585 getCompanyIdFromSession ( ) ,
8686 0 ,
8787 ) ;
88+
8889 const isStaffActingAsCompany = Boolean ( idirUserDetails ?. userRole ) ;
8990 const isCompanyAdmin = Boolean (
9091 userDetails ?. userRole === BCeID_USER_ROLE . COMPANY_ADMINISTRATOR ,
9192 ) ;
93+
9294 const enableCartFilter = isStaffActingAsCompany || isCompanyAdmin ;
93- const [ searchParams ] = useSearchParams ( ) ;
9495
96+ const [ searchParams ] = useSearchParams ( ) ;
9597 const paymentFailed = applyWhenNotNullable (
9698 ( queryParam ) => queryParam === "true" ,
9799 searchParams . get ( "paymentFailed" ) ,
@@ -123,6 +125,7 @@ export const ShoppingCartPage = () => {
123125 const selectedApplications = cartItemSelection . filter (
124126 ( cartItem ) => cartItem . selected ,
125127 ) ;
128+
126129 const selectedIds = selectedApplications . map (
127130 ( cartItem ) => cartItem . applicationId ,
128131 ) ;
@@ -145,6 +148,7 @@ export const ShoppingCartPage = () => {
145148 useState < boolean > ( false ) ;
146149
147150 const { mutation : issuePermitMutation , issueResults } = useIssuePermits ( ) ;
151+
148152 const { data : featureFlags } = useFeatureFlagsQuery ( ) ;
149153 const shouldDisplayCreditAccount = usePermissionMatrix ( {
150154 featureFlag : "CREDIT-ACCOUNT" ,
@@ -153,34 +157,39 @@ export const ShoppingCartPage = () => {
153157 permissionMatrixFunctionKey : "PAY_WITH_CREDIT_ACCOUNT" ,
154158 } ,
155159 } ) ;
160+
156161 const {
157162 data : creditAccountMetadata ,
158163 isPending : isCreditAccountMetadataPending ,
159164 isError : isCreditAccountMetadataError ,
160165 } = useGetCreditAccountMetadataQuery ( companyId , shouldDisplayCreditAccount ) ;
161166
162- let availablePaymentMethods = isStaffActingAsCompany
163- ? AVAILABLE_STAFF_PAYMENT_METHODS
164- : AVAILABLE_CV_PAYMENT_METHODS ;
167+ const isCreditAccountNotValidPayment =
168+ ! shouldDisplayCreditAccount
169+ || isCreditAccountMetadataPending
170+ || ! creditAccountMetadata ?. isValidPaymentMethod
171+ || isCreditAccountMetadataError ;
165172
166- if ( ! isCreditAccountMetadataPending ) {
173+ const availablePaymentMethods = useMemo ( ( ) => {
167174 // If the credit account is not a valid payment method,
168175 // filter it out from the available payment methods.
169- if (
170- ! creditAccountMetadata ?. isValidPaymentMethod ||
171- isCreditAccountMetadataError
172- ) {
173- if ( isStaffActingAsCompany ) {
174- availablePaymentMethods = AVAILABLE_STAFF_PAYMENT_METHODS . filter (
176+ if ( isCreditAccountNotValidPayment ) {
177+ return isStaffActingAsCompany ?
178+ AVAILABLE_STAFF_PAYMENT_METHODS . filter (
175179 ( method ) => method !== PAYMENT_METHOD_TYPE_CODE . ACCOUNT ,
176- ) ;
177- } else {
178- availablePaymentMethods = AVAILABLE_CV_PAYMENT_METHODS . filter (
180+ ) : AVAILABLE_CV_PAYMENT_METHODS . filter (
179181 ( method ) => method !== PAYMENT_METHOD_TYPE_CODE . ACCOUNT ,
180182 ) ;
181- }
182183 }
183- }
184+
185+ return isStaffActingAsCompany
186+ ? AVAILABLE_STAFF_PAYMENT_METHODS
187+ : AVAILABLE_CV_PAYMENT_METHODS ;
188+ } , [
189+ isStaffActingAsCompany ,
190+ isCreditAccountNotValidPayment ,
191+ ] ) ;
192+
184193 const formMethods = useForm < PaymentMethodData > ( {
185194 defaultValues : {
186195 paymentMethod : availablePaymentMethods [ 0 ] ,
0 commit comments