Initial commit

This commit is contained in:
2025-10-04 18:22:24 +03:00
commit 2852c2c054
291 changed files with 38109 additions and 0 deletions

View File

@@ -0,0 +1,117 @@
import { Divider, message } from "antd";
import ProCheckboxGroups from "components/ProCheckboxGroups/ProCheckboxGroups";
import ProText from "components/ProText";
import { Dispatch, SetStateAction } from "react";
import { useTranslation } from "react-i18next";
import { useAppSelector } from "redux/hooks";
import { Extra4, TheExtrasGroup } from "utils/types/appTypes";
import styles from "../product.module.css";
export default function ExtraGroups({
groupsList,
selectedExtrasByGroup,
setSelectedExtrasByGroup,
}: {
groupsList: TheExtrasGroup[];
selectedExtrasByGroup: Record<number, string[]>;
setSelectedExtrasByGroup: Dispatch<SetStateAction<Record<number, string[]>>>;
}) {
const { isRTL } = useAppSelector((state) => state.locale);
const { t } = useTranslation();
return (
<>
{groupsList.length > 0 && (
<div>
<Divider style={{ margin: "0 0 16px 0" }} />
<div
style={{
display: "flex",
justifyContent: "space-between",
}}
>
<ProText style={{ fontSize: "1.25rem" }}>
{t("menu.youMightAlsoLike")}
</ProText>
<ProText strong style={{ fontSize: "0.75rem" }}>
{t("menu.optional")}
</ProText>
</div>
{/* <ProText strong style={{ fontSize: "0.75rem" }}>
{t("menu.choose1")}
</ProText> */}
</div>
)}
{groupsList?.map((group: TheExtrasGroup) => (
<div key={group.id}>
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
}}
>
<ProText strong style={{ fontSize: "1rem" }}>
{isRTL ? group.nameAR : group.name}
</ProText>
<div
style={{
display: "flex",
alignItems: "center",
gap: "8px",
}}
>
<ProText style={{ fontSize: "0.75rem", color: "#666" }}>
{group.force_limit_selection === 1 ? "Required" : "Optional"}
</ProText>
<ProText style={{ fontSize: "0.75rem", color: "#666" }}>
({selectedExtrasByGroup[group.id]?.length || 0}/{group.limit})
</ProText>
</div>
</div>
{group.force_limit_selection === 1 && (
<ProText
style={{
fontSize: "0.75rem",
color: "red",
marginBottom: "8px",
}}
>
* You must select exactly {group.limit} option
{group.limit > 1 ? "s" : ""}
</ProText>
)}
<div className={styles.productContainer}>
<ProCheckboxGroups
options={group.extras.map((extra: Extra4) => ({
value: extra.id.toString(),
label: isRTL ? extra.name : extra.nameAR,
price: `+${extra.price}`,
}))}
value={selectedExtrasByGroup[group.id] || []}
onChange={(values: string[]) => {
// Check if the new selection would exceed the limit
if (values.length > group.limit) {
message.error(
`You can only select up to ${group.limit} option${group.limit > 1 ? "s" : ""} from this group.`
);
return;
}
setSelectedExtrasByGroup((prev) => ({
...prev,
[group.id]: values,
}));
}}
/>
</div>
</div>
))}
</>
);
}