add index page

This commit is contained in:
2024-06-20 20:02:23 +02:00
parent 9ecb2d6769
commit a34226b6cc
8 changed files with 549 additions and 19 deletions

View File

@@ -1,4 +1,4 @@
import { useCallback, useMemo, useState } from 'react'
import { useCallback, useMemo } from 'react'
import { KeywordsResponse, VacancyData } from '~/services/vacancies/vacancies.types'
import { AreaChart, MultiSelect, MultiSelectItem, Select, SelectItem } from '@tremor/react'
import { useSearchParams } from '@remix-run/react'
@@ -10,7 +10,6 @@ type Props = {
export function VacanciesChart({ data, keywords }: Props) {
const [searchParams, setSearchParams] = useSearchParams()
const [preset, setPreset] = useState('None')
const presetsForSelect = useMemo(
() =>
@@ -29,6 +28,23 @@ export function VacanciesChart({ data, keywords }: Props) {
[searchParams]
)
const preset = useMemo(() => {
return searchParams.get('preset') ?? 'None'
}, [searchParams])
const setPreset = useCallback(
(value: string | null) => {
if (!value || value === 'None') {
searchParams.delete('preset')
} else {
searchParams.set('preset', value)
}
setSearchParams(searchParams)
},
[searchParams, setSearchParams]
)
const categoriesForChart = useMemo(() => {
return data?.categories.filter(category => selectedCategories.includes(category)) ?? []
}, [selectedCategories, data?.categories])
@@ -64,14 +80,15 @@ export function VacanciesChart({ data, keywords }: Props) {
setPreset(value)
setSelectedCategories(keywords?.presets[value] ?? [])
},
[keywords?.presets, setSelectedCategories]
[keywords?.presets, setSelectedCategories, setPreset]
)
const handleKeywordsChange = useCallback(
(value: string[]) => {
setSelectedCategories(value ?? [])
setPreset(null)
},
[setSelectedCategories]
[setSelectedCategories, setPreset]
)
const multiSelectItems = useMemo(() => {
@@ -87,7 +104,7 @@ export function VacanciesChart({ data, keywords }: Props) {
}, [presetsForSelect])
return (
<div className={'flex h-full flex-col gap-6 p-8'}>
<>
<div className={'flex gap-4'}>
<div className="max-w-xl">
<label
@@ -131,7 +148,8 @@ export function VacanciesChart({ data, keywords }: Props) {
startEndOnly={false}
intervalType="preserveStartEnd"
showAnimation
noDataText={'Nothing here, try selecting different categories or preset'}
/>
</div>
</>
)
}