"use client"; import AnimatedContainer from "@components/AnimatedConainer/AnimatedContainer"; import ProductItem, { FindResultsViewMode } from "@core/app/components/ProductItem/ProductItem"; import { PublicServicesResults } from "@models/Service.model"; import { useEffect, useState } from "react"; import { searchPublicServices } from "./Find.Service"; import { HEADER_WIDGETS, useHeaderStore } from "@core/Store/Header.Store"; import Filters from "@core/app/components/Home/Filters/Filters"; import { useEventHandlerStore, EVENT_TYPES } from "@core/Store/EventHandler.Store"; import { useAlert } from "@core/Store/Alert.Store"; import { Breadcrumbs, ButtonGroup, IconButton } from "@mui/material"; import Link from "next/link"; import GridViewOutlinedIcon from "@mui/icons-material/GridViewOutlined"; import SplitscreenOutlinedIcon from "@mui/icons-material/SplitscreenOutlined"; import FilterAltIcon from "@mui/icons-material/FilterAlt"; import Pagination from "@mui/material/Pagination"; import useWindowSize from "@core/app/hooks/WindowSize"; import { ScrollToTop } from "@core/app/components/ScrollTop"; import DefaultLoginAction from "@core/app/components/LoginAction/DefaultLoginAction"; export default function FindPage() { const headerState = useHeaderStore(); const eventHandler = useEventHandlerStore(); const alert = useAlert(); const [windowWidth] = useWindowSize(); const [filterPage, setFilterPage] = useState(1); const [filterCompany, setFilterCompany] = useState(""); const [filterCategory, setFilterCategory] = useState(""); const [filterLocation, setFilterLocation] = useState(""); const [filterPriceFrom, setFilterPriceFrom] = useState(null); const [filterPriceTo, setFilterPriceTo] = useState(null); const [filterDurationFrom, setFilterDurationFrom] = useState(null); const [filterDurationTo, setFilterDurationTo] = useState(null); const [viewMode, setViewMode] = useState("card"); const [filterVisible, setFilterVisible] = useState(true); const [services, setServices] = useState({ data: [], page: filterPage, pages: 0, }); const getFilter = () => { let filter = {}; if (filterCompany) { filter = { ...filter, ...{ companyId: filterCompany } }; } if (filterCategory) { filter = { ...filter, ...{ categoryId: parseInt(filterCategory) } }; } if (filterLocation) { filter = { ...filter, ...{ block: filterLocation } }; } if (filterPriceFrom) { filter = { ...filter, ...{ priceFrom: filterPriceFrom } }; } if (filterPriceTo) { filter = { ...filter, ...{ priceTo: filterPriceTo } }; } if (filterDurationFrom) { filter = { ...filter, ...{ lengthFrom: filterDurationFrom } }; } if (filterDurationTo) { filter = { ...filter, ...{ lengthTo: filterDurationTo } }; } return filter; }; const cargarServicios = () => { eventHandler.setEventType(EVENT_TYPES.LOADING); const data = getFilter(); searchPublicServices({ ...{ query: headerState.publicFindText, page: filterPage, limit: 20, }, ...data, }) .then((res) => { setServices(res); }) .catch((error) => { alert.showError(error.format()); }) .finally(() => { headerState.setPublicFindTrigger(false); eventHandler.setEventType(EVENT_TYPES.SLEEP); }); }; useEffect(() => { if (headerState.publicFindTrigger) { cargarServicios(); } }, [ headerState.publicFindTrigger, filterCompany, filterCategory, filterLocation, filterPriceFrom, filterPriceTo, filterDurationFrom, filterDurationTo, filterPage, ]); useEffect(() => { if (windowWidth < 850) { setFilterVisible(false); return; } setFilterVisible(true); }, [windowWidth]); useEffect(() => { if (windowWidth < 850) { setViewMode("grid"); return; } setViewMode("card"); headerState.setActiveWidget(HEADER_WIDGETS.PUBLIC_FIND); }, []); const handleChange = (event: React.ChangeEvent, value: number) => { setFilterPage(value); headerState.setPublicFindTrigger(true); }; return (
Inicio Buscar servicios {windowWidth < 850 && ( setFilterVisible(!filterVisible)}> )} setViewMode("card")}> setViewMode("grid")}>
{services.data.map((service) => ( ))}
); }