import { useForm } from 'react-hook-form'; import DatasetsGrid from './DatasetsGrid'; import { Project } from '../lib/project.interface'; import { Index } from 'flexsearch'; export default function DatasetsSearch({ datasets }: { datasets: Project[] }) { const index = new Index({ tokenize: 'full' }); datasets.forEach((dataset: Project) => index.add( dataset.name, `${dataset.repo} ${dataset.name} ${dataset.title} ${dataset.author} ${dataset.title} ${dataset.cityCode} ${dataset.fiscalPeriod?.start} ${dataset.fiscalPeriod?.end}` ) ); const { register, watch, handleSubmit, reset, resetField } = useForm({ defaultValues: { searchTerm: '', country: '', minDate: '', maxDate: '', }, }); const allCountries = datasets .map((item) => item.countryCode) .filter((v) => v) // Filters false values .filter((v, i, a) => a.indexOf(v) === i) // Remove duplicates // TODO: title should be the full name .map((code) => ({ code, title: code })); return ( <>

{watch().searchTerm !== '' && ( )}
{/* TODO: nicer select e.g. headlessui example */}
{watch().minDate !== '' && ( )}
{watch().maxDate !== '' && ( )}
watch().searchTerm && watch().searchTerm !== '' ? index.search(watch().searchTerm).includes(dataset.name) : true ) .filter((dataset) => watch().country && watch().country !== '' ? dataset.countryCode === watch().country : true ) // TODO: Does that really makes sense? // What if the fiscalPeriod is 2015-2017 and inputs are // set to 2015-2016. It's going to be filtered out but // it shouldn't. .filter((dataset) => watch().minDate && watch().minDate !== '' ? dataset.fiscalPeriod?.start >= watch().minDate : true ) .filter((dataset) => watch().maxDate && watch().maxDate !== '' ? dataset.fiscalPeriod?.end <= watch().maxDate : true )} />
); } const CloseIcon = () => { return ( ); };