Files
web-menu-react-version-/src/pages/restaurant/RestaurantServices.tsx

248 lines
7.2 KiB
TypeScript

import { ScheduleFilled } from "@ant-design/icons";
import { Card } from "antd";
import BackIcon from "components/Icons/BackIcon";
import DeliveryIcon from "components/Icons/DeliveryIcon";
import DineInIcon from "components/Icons/DineInIcon";
import NextIcon from "components/Icons/NextIcon";
import PickupIcon from "components/Icons/PickupIcon";
import SendGiftIcon from "components/Icons/SendGiftIcon";
import ToOfficeIcon from "components/Icons/ToOfficeIcon";
import ToRoomIcon from "components/Icons/ToRoomIcon";
import ProTitle from "components/ProTitle";
import { updateOrderType } from "features/order/orderSlice";
import { OrderType } from "pages/checkout/hooks/types.ts";
import { useTranslation } from "react-i18next";
import { Link, useParams } from "react-router-dom";
import { useGetRestaurantDetailsQuery } from "redux/api/others";
import { useAppDispatch, useAppSelector } from "redux/hooks";
import styles from "./restaurant.module.css";
import ScheduleOrderIcon from "components/Icons/ScheduleOrderIcon";
export default function RestaurantServices() {
const { t } = useTranslation();
const { isRTL } = useAppSelector((state) => state.locale);
const { subdomain } = useParams();
const dispatch = useAppDispatch();
const { data: restaurant } = useGetRestaurantDetailsQuery(subdomain, {
skip: !subdomain,
});
const {
dineIn,
pickup,
gift,
toRoom,
toOffice,
// is_booking_enabled,
delivery,
is_schedule_order_enabled,
pickup_type,
} = restaurant || {};
const services = [
...((dineIn && [
{
id: OrderType.DineIn,
title: t("common.dineIn"),
description: t("home.services.dineIn"),
icon: (
<DineInIcon
className={styles.serviceIcon + " " + styles.dineInIcon}
/>
),
color: "bg-blue-50 text-blue-600",
href: `/${subdomain}/menu?orderType=${OrderType.DineIn}`,
},
]) ||
[]),
...((pickup && [
{
id: OrderType.Pickup,
title: pickup_type === "car" ? t("common.car") : t("common.pickup"),
description: t("home.services.pickup"),
icon: (
<PickupIcon
className={styles.serviceIcon + " " + styles.pickupIcon}
/>
),
color: "bg-green-50 text-green-600",
href: `/${subdomain}/menu?orderType=${OrderType.Pickup}`,
},
]) ||
[]),
...((gift && [
{
id: OrderType.Gift,
title: t("common.sendGift"),
description: t("home.services.gift"),
icon: (
<SendGiftIcon
className={styles.serviceIcon + " " + styles.giftIcon}
/>
),
color: "bg-pink-50 text-pink-600",
href: `/${subdomain}/menu?orderType=${OrderType.Gift}`,
},
]) ||
[]),
...((toRoom && [
{
id: OrderType.ToRoom,
title: t("common.roomService"),
description: t("home.services.room"),
icon: (
<ToRoomIcon className={styles.serviceIcon + " " + styles.roomIcon} />
),
color: "bg-purple-50 text-purple-600",
href: `/${subdomain}/menu?orderType=${OrderType.ToRoom}`,
},
]) ||
[]),
...((toOffice && [
{
id: OrderType.ToOffice,
title: t("common.officeDelivery"),
description: t("home.services.office"),
icon: (
<ToOfficeIcon
className={styles.serviceIcon + " " + styles.officeIcon}
/>
),
color: "bg-orange-50 text-orange-600",
href: `/${subdomain}/menu?orderType=${OrderType.ToOffice}`,
},
]) ||
[]),
// ...((is_booking_enabled && [
// {
// id: OrderType.Booking,
// title: t("common.tableBooking"),
// description: t("home.services.booking"),
// icon: (
// <BookingIcon
// className={styles.serviceIcon + " " + styles.bookingIcon}
// />
// ),
// color: "bg-indigo-50 text-indigo-600",
// href: `/${subdomain}/menu?orderType=${OrderType.Booking}`,
// },
// ]) ||
// []),
...((delivery && [
{
id: OrderType.Delivery,
title: t("common.delivery"),
description: t("home.services.delivery"),
icon: (
<DeliveryIcon
className={styles.serviceIcon + " " + styles.deliveryIcon}
/>
),
color: "bg-indigo-50 text-indigo-600",
href: `/${subdomain}/address`,
},
]) ||
[]),
...((is_schedule_order_enabled === 1 && [
{
id: OrderType.ScheduledOrder,
title: t("common.scheduledOrder"),
description: t("home.services.scheduledOrder"),
icon: (
<ScheduleOrderIcon
className={styles.serviceIcon + " " + styles.scheduledOrderIcon}
/>
),
color: "bg-indigo-50 text-indigo-600",
href: `/${subdomain}/menu?orderType=${OrderType.ScheduledOrder}`,
},
]) ||
[]),
// ...((true && [
// {
// id: OrderType.Pay,
// title: t("common.pay"),
// description: t("home.services.pay"),
// icon: (
// <ToOfficeIcon
// className={styles.serviceIcon + " " + styles.officeIcon}
// />
// ),
// color: "bg-orange-50 text-orange-600",
// href: `/${subdomain}/pay`,
// },
// ]) ||
// []),
];
// Determine grid class based on number of services
const getGridClass = () => {
const serviceCount = services.length;
if (serviceCount <= 2) return `${styles.servicesGrid} ${styles.twoColumns}`;
if (serviceCount >= 4)
return `${styles.servicesGrid} ${styles.manyServices}`;
return styles.servicesGrid;
};
return (
<div className={getGridClass()}>
{services?.map((s) => {
return (
<Link
to={s?.href}
key={s?.id}
onClick={() => {
dispatch(updateOrderType(s?.id));
}}
style={{
width: "100%",
}}
>
<Card className={styles.homeServiceCard}>
<div
style={{
display: "flex",
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
width: "100%",
}}
>
<div
style={{
display: "flex",
flexDirection: "row",
alignItems: "center",
gap: 12,
}}
>
{s?.icon}
<ProTitle
level={5}
style={{
fontWeight: 500,
fontSize: 14,
lineHeight: "140%",
letterSpacing: "0%",
verticalAlign: "middle",
}}
>
{s?.title}
</ProTitle>
</div>
{isRTL ? (
<BackIcon className={styles.serviceIcon} />
) : (
<NextIcon className={styles.serviceIcon} />
)}
</div>
</Card>
</Link>
);
})}
</div>
);
}