fix(ui): подключить фильтры статистики с проверкой срезов
This commit is contained in:
1 parent
52af82af42
commit
4fd844f977
5 files changed
+72
-37
No files matched your search
@@ -0,0 +1,27 @@
|
||||
"use client"
|
||||
|
||||
import { useState } from "react"
|
||||
import { QueryFilters } from "@/components/data-grids/query-filters"
|
||||
import { Button } from "@/components/ui/button"
|
||||
import { STATISTICS_FILTER_FIELDS } from "@/lib/data-filters/statistics-filter-fields"
|
||||
import { filterQueryToSlices, slicesToFilterQuery, type StatisticsSlices } from "@/lib/data-filters/statistics-filter-query"
|
||||
|
||||
/** Parent keys this editor by URL slices so external navigation resets drafts. */
|
||||
export function StatisticsFilters({ slices, onApply }: {
|
||||
slices: StatisticsSlices
|
||||
onApply: (slices: StatisticsSlices) => void
|
||||
}) {
|
||||
const [query, setQuery] = useState(() => slicesToFilterQuery(slices))
|
||||
const result = filterQueryToSlices(query)
|
||||
return <div className="flex flex-col gap-2">
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<QueryFilters fields={STATISTICS_FILTER_FIELDS} query={query} onQueryChange={setQuery} />
|
||||
<Button size="sm" variant="outline" disabled={result.status !== "valid"}
|
||||
onClick={() => { if (result.status === "valid") onApply(result.slices) }}>
|
||||
Применить срез
|
||||
</Button>
|
||||
</div>
|
||||
{result.status === "invalid" && <p role="alert" className="text-xs text-destructive">{result.error}</p>}
|
||||
{result.status === "draft" && <p role="status" className="text-xs text-muted-foreground">Завершите условие. Текущий срез сохранён.</p>}
|
||||
</div>
|
||||
}
|
||||
Reference in new issue
Block a user