Skip to content

Commit 5e4d1fd

Browse files
committed
Fix incorrect display of available payment methods in shopping cart page
1 parent bf94dcc commit 5e4d1fd

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

frontend/src/features/permits/pages/ShoppingCart/ShoppingCartPage.tsx

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Box } from "@mui/material";
2-
import { useContext, useEffect, useState } from "react";
2+
import { useContext, useEffect, useMemo, useState } from "react";
33
import { useSearchParams, useNavigate, Navigate } from "react-router-dom";
44
import { 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

Comments
 (0)