diff options
author | HombreLaser <sebastian-440@live.com> | 2023-05-24 20:18:00 -0600 |
---|---|---|
committer | HombreLaser <sebastian-440@live.com> | 2023-05-24 20:18:00 -0600 |
commit | da2631822f902094e691143302d6fc6b68e1cf56 (patch) | |
tree | 68b893c04233f779f5a65151ea21d673b6f7a8fc /src/routes | |
parent | 21508a3514500f8f38ddaa8bef7a9cd420d76628 (diff) |
Añade lógica de carrito
Diffstat (limited to 'src/routes')
-rw-r--r-- | src/routes/products/product.tsx | 51 | ||||
-rw-r--r-- | src/routes/products/products.tsx | 2 |
2 files changed, 48 insertions, 5 deletions
diff --git a/src/routes/products/product.tsx b/src/routes/products/product.tsx index 1eecbcf..cca4073 100644 --- a/src/routes/products/product.tsx +++ b/src/routes/products/product.tsx @@ -1,12 +1,18 @@ -import { useLoaderData } from "react-router-dom"; +import { useLoaderData, Form, useActionData } from "react-router-dom"; import { CartPlusFill } from "react-bootstrap-icons" +import { InfoModal } from "../../components/info_modal"; +import { Modal } from "flowbite"; import ProductListing from "../../components/product_listing"; import MainContentLayout from "../../components/main_content_layout"; import Review from "../../components/review"; import "../../components/stylesheets/shared.css" +import { useEffect } from "react"; + export default function Product() { + let quantity_field; const response = useLoaderData(); + const response_status = useActionData(); const product = response[0].data; const reviews = response[1].data.data.map(review => <li key={review.id}> @@ -14,23 +20,60 @@ export default function Product() { </li> ); + useEffect(() => { + const target = document.getElementById("info-modal"); + const options = { + placement: 'center-center', + backdrop: 'dynamic', + backdropClasses: 'bg-gray-900 bg-opacity-50 dark:bg-opacity-80 fixed inset-0 z-40', + closable: true + }; + const modal = new Modal(target, options); + document.getElementById('modal-button')?.addEventListener("click", () => { + modal.hide(); + }); + + if(response_status == 200) + modal.show(); + + }, [response_status]); + + if(response_status == 422) { + quantity_field = ( + <div className="mx-2 w-17"> + <input type="number" id="quantity-field" name="quantity" className="bg-red-50 border border-red-500 text-red-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" + min='1' max={product.data.attributes.available_quantity} placeholder={1}/> + </div> + ); + } + else { + quantity_field = ( + <div className="mx-2 w-17"> + <input type="number" id="quantity-field" name="quantity" className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" + min='1' max={product.data.attributes.available_quantity} placeholder={1} placeholder={1}/> + </div> + ); + } + return ( <> <MainContentLayout> <ProductListing product={product.data}/> <div className="my-2 flex flex-flow-reverse w-4/6"> - <div> - <button className="flex inline-block rounded button px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white dark:hover:shadow-[0_8px_9px_-4px_rgba(59,113,202,0.2),0_4px_18px_0_rgba(59,113,202,0.1)]"> + <Form method="post" id="cart-button" className="flex h-10"> + {quantity_field} + <button className="flex inline-block rounded button w-50 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white dark:hover:shadow-[0_8px_9px_-4px_rgba(59,113,202,0.2),0_4px_18px_0_rgba(59,113,202,0.1)]"> <CartPlusFill size={16}/> <span className="mx-2">Añadir al carrito</span> </button> - </div> + </Form> </div> <div className="my-4"> <ul> {reviews} </ul> </div> + <InfoModal text="El producto se ha añadido a su carrito"/> </MainContentLayout> </> ); diff --git a/src/routes/products/products.tsx b/src/routes/products/products.tsx index ea06c15..27192d3 100644 --- a/src/routes/products/products.tsx +++ b/src/routes/products/products.tsx @@ -1,4 +1,4 @@ -import { Link, useLoaderData } from "react-router-dom"; +import { useLoaderData } from "react-router-dom"; import ProductListing from "../../components/product_listing"; import SearchBar from "../../components/search_bar"; import MainContentLayout from "../../components/main_content_layout"; |