109 lines
4.6 KiB
JavaScript
109 lines
4.6 KiB
JavaScript
import { o as __toESM } from "../_runtime.mjs";
|
|
import { h as require_react, m as require_jsx_runtime } from "../_libs/react+tanstack__react-query.mjs";
|
|
import { l as ShoppingCart, t as Zap } from "../_libs/lucide-react.mjs";
|
|
import { a as MyText, i as MyButton, l as Quantifier, t as AppContainer } from "./src-u_N1opJl.mjs";
|
|
import { n as useAddToCart } from "./cart-query-hooks-Bz8ID9jY.mjs";
|
|
import { l as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
import { t as create } from "../_libs/zustand.mjs";
|
|
import { t as useCentralProductStore } from "./central-product-store-TS-vQ8-V.mjs";
|
|
//#region node_modules/.nitro/vite/services/ssr/assets/flash-CkaCI73Q.js
|
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
var import_jsx_runtime = require_jsx_runtime();
|
|
var useCentralSlotStore = create((set) => ({
|
|
slots: [],
|
|
productSlotsMap: {},
|
|
setSlots: (slots) => set({ slots }),
|
|
setProductSlotsMap: (map) => set({ productSlotsMap: map }),
|
|
refetchSlots: null,
|
|
setRefetchSlots: (fn) => set({ refetchSlots: fn })
|
|
}));
|
|
function FlashDeliveryPage() {
|
|
const navigate = useNavigate();
|
|
const products = useCentralProductStore((s) => s.products);
|
|
const productSlotsMap = useCentralSlotStore((s) => s.productSlotsMap);
|
|
const [selectedQty, setSelectedQty] = (0, import_react.useState)({});
|
|
const addToCart = useAddToCart("flash");
|
|
const flashProducts = products.filter((p) => productSlotsMap[p.id]?.isFlashAvailable && !productSlotsMap[p.id]?.isOutOfStock);
|
|
const handleAddToCart = (product) => {
|
|
const qty = selectedQty[product.id] || 1;
|
|
addToCart.mutate({
|
|
productId: product.id,
|
|
quantity: qty,
|
|
storeId: product.storeId
|
|
}, { onSuccess: () => navigate({ to: "/flash/cart" }) });
|
|
};
|
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(AppContainer, { children: [
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
className: "mb-4 flex items-center gap-2",
|
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Zap, { className: "h-6 w-6 text-yellow-500" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MyText, {
|
|
weight: "bold",
|
|
className: "text-xl",
|
|
children: "1 Hr Delivery"
|
|
})]
|
|
}),
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
className: "mb-4 rounded-xl bg-yellow-50 p-3",
|
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MyText, {
|
|
className: "text-sm text-yellow-800",
|
|
children: "Get these products delivered within 1 hour! Only available for select items."
|
|
})
|
|
}),
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
className: "grid grid-cols-2 gap-3",
|
|
children: flashProducts.map((product) => {
|
|
const price = product.discountedPrice ?? product.price;
|
|
const qty = selectedQty[product.id] || 1;
|
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
className: "rounded-xl border border-gray-100 bg-white p-3 shadow-sm",
|
|
children: [
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
className: "mb-2 aspect-square w-full overflow-hidden rounded-lg bg-gray-100",
|
|
children: product.images?.[0] && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
|
|
src: product.images[0].uri,
|
|
alt: product.name,
|
|
className: "h-full w-full object-cover"
|
|
})
|
|
}),
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(MyText, {
|
|
weight: "semibold",
|
|
className: "text-sm",
|
|
numberOfLines: 2,
|
|
children: product.name
|
|
}),
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(MyText, {
|
|
weight: "bold",
|
|
className: "text-brand-600",
|
|
children: ["₹", price]
|
|
}),
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
className: "mt-2 flex items-center gap-2",
|
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Quantifier, {
|
|
value: qty,
|
|
setValue: (v) => setSelectedQty((prev) => ({
|
|
...prev,
|
|
[product.id]: v
|
|
}))
|
|
})
|
|
}),
|
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(MyButton, {
|
|
fullWidth: true,
|
|
onClick: () => handleAddToCart(product),
|
|
className: "mt-2 flex items-center justify-center gap-1 bg-brand-500 text-white text-xs",
|
|
disabled: addToCart.isPending,
|
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShoppingCart, { className: "h-3 w-3" }), "Add"]
|
|
})
|
|
]
|
|
}, product.id);
|
|
})
|
|
}),
|
|
flashProducts.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
className: "py-20 text-center",
|
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MyText, {
|
|
className: "text-gray-500",
|
|
children: "No flash delivery products available"
|
|
})
|
|
})
|
|
] });
|
|
}
|
|
//#endregion
|
|
export { FlashDeliveryPage as component };
|