import React, { useEffect, useState } from "react" import { twMerge } from "tailwind-merge" import CardList from "./core/CardList" import Button from "./core/Button" import TitleComponent from "./core/TitleComponent" interface IMaps { anime?: boolean layout?: "row" | "col" | "grid" size?: "xs" | "base" | "xl" limit?: number title?: string action?: { name?: string url?: string classname?: string } options?: object } const Maps = (props: IMaps) => { const { title, action, anime, layout = "row", size = "xs", limit = 3, } = props const options = props.options ?? {} const oClass = options.class || {} const [data, setData] = useState([]) const MAPS_URL = "/geoportal/rest/geostore/extjs/search/category/MAP/***/thumbnail,details,featured?includeAttributes=true" useEffect(() => { fetch(`${MAPS_URL}&start=0&limit=${limit}`) .then((res) => { if (!res.ok) { throw new Error(res.statusText) } return res.json() }) .then((response) => { const results = response.results if (results.length) { setData(results) } }) .catch((e) => { console.log(e) }) }, []) if (!data.length) return null const dataCards = data.map((data: any) => { return { name: data.name, description: data.description, image: `/geoportal/${data.thumbnail}`, size: size, url: `/geoportal/#/context/Admin/${data.id}`, anime: anime || options.anime, options: options.card, } }) return ( <div data-theme={options.theme} className={twMerge(oClass.main)}> <TitleComponent title={title} className="mb-6 p-2 text-2xl font-extrabold tracking-tight sm:text-3xl" options={options} /> <CardList cards={dataCards} layout={layout} {...options.cards} /> <div className={twMerge("my-8 flex justify-center", oClass.actions)} > {action && <Button {...action} {...options.action} />} </div> </div> ) } export default Maps