add extra group price

This commit is contained in:
2025-11-10 21:36:00 +03:00
parent 7df267af5a
commit dc18d84ac8
6 changed files with 36 additions and 39 deletions

View File

@@ -10,9 +10,9 @@ import ArabicPrice from "components/ArabicPrice";
import useBreakPoint from "hooks/useBreakPoint";
import { useCallback, useMemo, useState } from "react";
import { colors } from "ThemeConstants";
import { Product, Extra as ExtraType } from "utils/types/appTypes";
import { Extra, Product } from "utils/types/appTypes";
import BackButton from "../menu/components/BackButton";
import Extra from "./components/Extra";
import ExtraComponent from "./components/Extra";
import ExtraGroups from "./components/ExtraGroups";
import ProductFooter from "./components/ProductFooter";
import Variants from "./components/Variants";
@@ -37,12 +37,12 @@ export default function ProductDetailPage({
>({});
// State for selected extras
const [selectedExtras, setSelectedExtras] = useState<ExtraType[]>([]);
const [selectedExtras, setSelectedExtras] = useState<Extra[]>([]);
// State for selected extras by group
const [selectedExtrasByGroup, setSelectedExtrasByGroup] = useState<
Record<number, string[]>
>({});
const [selectedExtrasByGroup, setSelectedExtrasByGroup] = useState<Extra[]>(
[],
);
// Determine variant levels based on options array length
const variantLevels = useMemo(() => {
@@ -126,7 +126,9 @@ export default function ProductDetailPage({
const allRequiredExtraGroupsSatisfied = product.theExtrasGroups.every(
(group) => {
if (group.force_limit_selection === 1) {
const selectedCount = selectedExtrasByGroup[group.id]?.length || 0;
const selectedCount =
selectedExtrasByGroup.filter((extra) => extra.id === group.id)
.length || 0;
return selectedCount === group.limit;
}
return true; // Optional groups are always satisfied
@@ -277,7 +279,7 @@ export default function ProductDetailPage({
isValid={isValid}
selectedVariant={getFinalSelectedVariant()}
selectedExtras={selectedExtras}
selectedGroups={Object.values(selectedExtrasByGroup).flat()}
selectedGroups={selectedExtrasByGroup}
quantity={quantity}
onClose={onClose}
/>
@@ -300,8 +302,8 @@ export default function ProductDetailPage({
/>
)}
{getExtras().length > 0 && (
<Extra
{getExtras().length && product.theExtrasGroups.length === 0 && (
<ExtraComponent
extrasList={getExtras()}
selectedExtras={selectedExtras}
setSelectedExtras={setSelectedExtras}
@@ -326,7 +328,7 @@ export default function ProductDetailPage({
isValid={isValid}
selectedVariant={getFinalSelectedVariant()}
selectedExtras={selectedExtras}
selectedGroups={Object.values(selectedExtrasByGroup).flat()}
selectedGroups={selectedExtrasByGroup}
quantity={quantity}
/>
)}