Newer
Older
import { twMerge } from "tailwind-merge"
import Button from "./core/Button"
import TitleComponent from "./core/TitleComponent"
layout?: "row" | "col" | "grid"
size?: "xs" | "base" | "xl"
limit?: number
title?: string
action?: {
name?: string
url?: string
classname?: string
}
const {
title,
action,
anime,
layout = "row",
size = "xs",
limit = 3,
const oClass = options.class || {}
.then((res) => {
if (!res.ok) {
throw new Error(res.statusText)
}
return res.json()
})
.then((response) => {
let results = []
if (isFormatMaps(format)) {
// Maps
// TODO: filter featured maps by tag ?
results = response.results.slice(0, limit)
} else {
// Mapstore
// Get featured maps first
results = response.results
.filter((item) => item.featured === "true")
.slice(0, limit)
// if not enough get others
if (results.length < limit) {
results = results.concat(
response.results
.filter((item) => item.featured !== "true")
.slice(0, limit - results.length)
)
}
}
if (results.length) {
setData(results)
}
})
.catch((e) => {
console.log(e)
})
}, [])
let oData = getDataCardsByFormat(data, format)
anime: anime || options.anime,
options: options.card,
<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)}
>
const isFormatMaps = (format: string) => {
return format == "maps"
}
const getMapsUrl = (format: string, limit: number) => {
let url
if (isFormatMaps(format)) {
url = `/fr/maps/maps/?format=json&q=&highlight=true&page=1&page_size=${limit}`
} else {
url = `/geoportal/rest/geostore/extjs/search/category/MAP/***/thumbnail,details,featured?includeAttributes=true&start=0&limit=-1`
}
return url
}
const getDataCardsByFormat = (data: any, format: string) => {
let oData
if (isFormatMaps(format)) {
oData = {
name: data.display_name,
description: data.description,
url: `/maps/#/map/${data.id}`,
}
} else {
oData = {
name: data.name,
description: data.description,
image: `/geoportal/${data.thumbnail}`,
url: `/geoportal/#/context/Admin/${data.id}`,
}
}
return oData
}