181 lines
4.6 KiB
TypeScript
181 lines
4.6 KiB
TypeScript
import { Card } from "antd";
|
|
import { ProBottomSheet } from "components/ProBottomSheet/ProBottomSheet.tsx";
|
|
import { useState } from "react";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
import BackIcon from "components/Icons/BackIcon";
|
|
import NextIcon from "components/Icons/NextIcon";
|
|
import ProTitle from "components/ProTitle";
|
|
import { useAppSelector } from "redux/hooks";
|
|
import { CustomAmountChoiceBottomSheet } from "./CustomAmountChoiceBottomSheet";
|
|
import { EqualltyChoiceBottomSheet } from "./EqualltyChoiceBottomSheet";
|
|
import { PayForYourItemsChoiceBottomSheet } from "./PayForYourItemsChoiceBottomSheet";
|
|
import styles from "./SplitBill.module.css";
|
|
|
|
interface SplitBillChoiceBottomSheetProps {
|
|
isOpen: boolean;
|
|
onClose: () => void;
|
|
onSave?: (value: string) => void;
|
|
onSelectSplitWay?: (way: "customAmount" | "equality" | "payForItems") => void;
|
|
}
|
|
|
|
export function SplitBillChoiceBottomSheet({
|
|
isOpen,
|
|
onClose,
|
|
onSelectSplitWay,
|
|
}: SplitBillChoiceBottomSheetProps) {
|
|
const { t } = useTranslation();
|
|
const { isRTL } = useAppSelector((state) => state.locale);
|
|
|
|
const [isCustomAmountOpen, setIsCustomAmountOpen] = useState(false);
|
|
const [isEqualityOpen, setIsEqualityOpen] = useState(false);
|
|
const [isPayForItemsOpen, setIsPayForItemsOpen] = useState(false);
|
|
|
|
const handleCancel = () => {
|
|
onClose();
|
|
};
|
|
|
|
const handleCustomAmountClick = () => {
|
|
onSelectSplitWay?.("customAmount");
|
|
onClose();
|
|
setIsCustomAmountOpen(true);
|
|
};
|
|
|
|
const handleEqualityClick = () => {
|
|
onSelectSplitWay?.("equality");
|
|
onClose();
|
|
setIsEqualityOpen(true);
|
|
};
|
|
|
|
const handlePayForItemsClick = () => {
|
|
onSelectSplitWay?.("payForItems");
|
|
onClose();
|
|
setIsPayForItemsOpen(true);
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<ProBottomSheet
|
|
isOpen={isOpen}
|
|
onClose={handleCancel}
|
|
title={t("splitBill.title")}
|
|
showCloseButton={false}
|
|
initialSnap={1}
|
|
height={290}
|
|
snapPoints={[290]}
|
|
>
|
|
<div
|
|
style={{
|
|
marginTop: 20,
|
|
display: "flex",
|
|
flexDirection: "column",
|
|
gap: 10,
|
|
}}
|
|
>
|
|
<Card
|
|
className={styles.backToHomePage}
|
|
onClick={handleCustomAmountClick}
|
|
>
|
|
<div
|
|
style={{
|
|
display: "flex",
|
|
flexDirection: "row",
|
|
justifyContent: "space-between",
|
|
marginTop: 1,
|
|
}}
|
|
>
|
|
<ProTitle
|
|
level={5}
|
|
style={{
|
|
fontSize: 14,
|
|
}}
|
|
>
|
|
{t("splitBill.payAsCustomAmount")}
|
|
</ProTitle>
|
|
|
|
{isRTL ? (
|
|
<BackIcon className={styles.serviceIcon} />
|
|
) : (
|
|
<NextIcon className={styles.serviceIcon} />
|
|
)}
|
|
</div>
|
|
</Card>
|
|
|
|
<Card
|
|
className={styles.backToHomePage}
|
|
onClick={handleEqualityClick}
|
|
>
|
|
<div
|
|
style={{
|
|
display: "flex",
|
|
flexDirection: "row",
|
|
justifyContent: "space-between",
|
|
marginTop: 1,
|
|
}}
|
|
>
|
|
<ProTitle
|
|
level={5}
|
|
style={{
|
|
fontSize: 14,
|
|
}}
|
|
>
|
|
{t("splitBill.divideTheBillEqually")}
|
|
</ProTitle>
|
|
|
|
{isRTL ? (
|
|
<BackIcon className={styles.serviceIcon} />
|
|
) : (
|
|
<NextIcon className={styles.serviceIcon} />
|
|
)}
|
|
</div>
|
|
</Card>
|
|
|
|
<Card
|
|
className={styles.backToHomePage}
|
|
onClick={handlePayForItemsClick}
|
|
>
|
|
<div
|
|
style={{
|
|
display: "flex",
|
|
flexDirection: "row",
|
|
justifyContent: "space-between",
|
|
marginTop: 1,
|
|
}}
|
|
>
|
|
<ProTitle
|
|
level={5}
|
|
style={{
|
|
fontSize: 14,
|
|
}}
|
|
>
|
|
{t("splitBill.payForYourItems")}
|
|
</ProTitle>
|
|
|
|
{isRTL ? (
|
|
<BackIcon className={styles.serviceIcon} />
|
|
) : (
|
|
<NextIcon className={styles.serviceIcon} />
|
|
)}
|
|
</div>
|
|
</Card>
|
|
</div>
|
|
</ProBottomSheet>
|
|
|
|
<CustomAmountChoiceBottomSheet
|
|
isOpen={isCustomAmountOpen}
|
|
onClose={() => setIsCustomAmountOpen(false)}
|
|
/>
|
|
|
|
<EqualltyChoiceBottomSheet
|
|
isOpen={isEqualityOpen}
|
|
onClose={() => setIsEqualityOpen(false)}
|
|
/>
|
|
|
|
<PayForYourItemsChoiceBottomSheet
|
|
isOpen={isPayForItemsOpen}
|
|
onClose={() => setIsPayForItemsOpen(false)}
|
|
/>
|
|
</>
|
|
);
|
|
}
|