Skip to content

Commit 2a299eb

Browse files
committed
fix: prevent click on accordion if step not activable
1 parent 5945d61 commit 2a299eb

5 files changed

Lines changed: 15 additions & 63 deletions

File tree

components/composite/Checkout/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ const Checkout: React.FC<Props> = ({
110110
lastActivableStep={lastActivableStep}
111111
setActiveStep={setActiveStep}
112112
step="Customer"
113+
steps={steps}
113114
isStepDone={ctx.hasShippingAddress && ctx.hasBillingAddress}
114115
>
115116
<AccordionItem
@@ -127,6 +128,7 @@ const Checkout: React.FC<Props> = ({
127128
lastActivableStep={lastActivableStep}
128129
setActiveStep={setActiveStep}
129130
step="Shipping"
131+
steps={steps}
130132
isStepRequired={ctx.isShipmentRequired}
131133
>
132134
<AccordionItem
@@ -144,6 +146,7 @@ const Checkout: React.FC<Props> = ({
144146
lastActivableStep={lastActivableStep}
145147
setActiveStep={setActiveStep}
146148
step="Payment"
149+
steps={steps}
147150
isStepRequired={ctx.isPaymentRequired}
148151
isStepDone={ctx.hasPaymentMethod}
149152
>

components/composite/StepCustomer/index.tsx

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -46,58 +46,6 @@ export const StepHeaderCustomer: React.FC<Props> = ({ step }) => {
4646
}
4747

4848
return <p data-cy="customer-email-step-header">{emailAddress}</p>
49-
50-
// if (billingAddress && (hasSameAddresses || !isShipmentRequired)) {
51-
// return (
52-
// <Address addresses={[billingAddress]}>
53-
// {
54-
// <AddressField>
55-
// {({ address }) => (
56-
// <p data-cy="full-billing-information">
57-
// {address.name}
58-
// {address.billingInfo && `, ${address.billingInfo}`}
59-
// </p>
60-
// )}
61-
// </AddressField>
62-
// }
63-
// </Address>
64-
// )
65-
// }
66-
// return (
67-
// (billingAddress && shippingAddress && (
68-
// <>
69-
// <Address addresses={[billingAddress]} className="mb-1">
70-
// {
71-
// <AddressField>
72-
// {({ address }) => (
73-
// <>
74-
// <p data-cy="full-billing-information">
75-
// {address.name}
76-
// {address.billingInfo && `, ${address.billingInfo}`}
77-
// </p>
78-
// </>
79-
// )}
80-
// </AddressField>
81-
// }
82-
// </Address>
83-
// <Address addresses={[shippingAddress]}>
84-
// {
85-
// <AddressField>
86-
// {({ address }) => (
87-
// <p data-cy="full-shipping-information">
88-
// <span className="font-semibold text-black">
89-
// {t(`addressForm.shipped_to`)}
90-
// </span>{" "}
91-
// {address.name}{" "}
92-
// </p>
93-
// )}
94-
// </AddressField>
95-
// }
96-
// </Address>
97-
// </>
98-
// )) ||
99-
// ""
100-
// )
10149
}
10250

10351
return (

components/data/AccordionProvider/index.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const AccordionContext = createContext<AccordionProviderData | null>(
1717

1818
interface AccordionProviderProps {
1919
step: SingleStepEnum
20+
steps: SingleStepEnum[]
2021
activeStep: SingleStepEnum
2122
lastActivableStep: SingleStepEnum
2223
setActiveStep?: (step: SingleStepEnum) => void
@@ -27,6 +28,7 @@ interface AccordionProviderProps {
2728
export const AccordionProvider: React.FC<AccordionProviderProps> = ({
2829
children,
2930
step,
31+
steps,
3032
activeStep,
3133
lastActivableStep,
3234
setActiveStep,
@@ -51,11 +53,14 @@ export const AccordionProvider: React.FC<AccordionProviderProps> = ({
5153
}, [activeStep])
5254

5355
useEffect(() => {
54-
return setCannotGoNext(checkIfCannotGoNext(step, lastActivableStep))
56+
return setCannotGoNext(checkIfCannotGoNext(step, steps, lastActivableStep))
5557
}, [step, lastActivableStep])
5658

5759
useEffect(() => {
58-
if (!isStepRequired && checkIfCannotGoNext(step, lastActivableStep)) {
60+
if (
61+
!isStepRequired &&
62+
checkIfCannotGoNext(step, steps, lastActivableStep)
63+
) {
5964
setStatus("skip")
6065
return
6166
}
@@ -70,7 +75,7 @@ export const AccordionProvider: React.FC<AccordionProviderProps> = ({
7075
return
7176
}
7277

73-
if (checkIfCannotGoNext(step, lastActivableStep)) {
78+
if (checkIfCannotGoNext(step, steps, lastActivableStep)) {
7479
setStatus("disabled")
7580
return
7681
}

components/hooks/useActiveStep.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ const STEPS: SingleStepEnum[] = ["Customer", "Shipping", "Payment"]
1414

1515
export function checkIfCannotGoNext(
1616
step: SingleStepEnum,
17+
steps: SingleStepEnum[],
1718
lastActivableStep: SingleStepEnum
1819
) {
1920
if (lastActivableStep === "Complete") {
2021
return false
2122
}
22-
const indexCurrent = STEPS.indexOf(step)
23-
const indexLastActivable = STEPS.indexOf(lastActivableStep)
23+
const indexCurrent = steps.indexOf(step)
24+
const indexLastActivable = steps.indexOf(lastActivableStep)
2425
return indexCurrent >= indexLastActivable
2526
}
2627

components/ui/Accordion/index.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ interface Props {
1212
}
1313

1414
export const Accordion: React.FC = ({ children }) => {
15-
// const { isMobile } = useDeviceDetect()
16-
// return isMobile ? <Wrapper>{children}</Wrapper> : <>{children}</>
1715
return <Wrapper>{children}</Wrapper>
1816
}
1917

@@ -45,10 +43,7 @@ export const AccordionItem: React.FC<Props> = ({ children, index, header }) => {
4543
tabIndex={index}
4644
className={classNames("group", {
4745
active: ctx.isActive,
48-
disabled: !(
49-
(ctx.step === "Shipping" && appCtx.hasPaymentMethod) ||
50-
ctx.status !== "disabled"
51-
),
46+
disabled: ctx.status === "disabled" || ctx.status === "skip",
5247
})}
5348
>
5449
<AccordionTabHeader className="group" onClick={handleSelection}>

0 commit comments

Comments
 (0)