import * as React from "react" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { cn } from "@/lib/utils" export type DataTableViewPreset = { value: TValue label: React.ReactNode description?: React.ReactNode icon?: React.ReactNode count?: React.ReactNode disabled?: boolean hidden?: boolean } export type DataTableViewPresetsProps = Omit, "onChange"> & { value?: TValue presets: DataTableViewPreset[] onValueChange?: (value: TValue | undefined, preset?: DataTableViewPreset) => void clearable?: boolean clearLabel?: React.ReactNode emptyLabel?: React.ReactNode size?: "xs" | "sm" | "default" variant?: "tabs" | "buttons" | "pills" renderPreset?: (preset: DataTableViewPreset, state: { active: boolean }) => React.ReactNode presetClassName?: string activePresetClassName?: string } const sizeClassName: Record, string> = { xs: "h-7 px-2 text-xs", sm: "h-8 px-3 text-sm", default: "h-9 px-3 text-sm", } function DataTableViewPresets({ className, value, presets, onValueChange, clearable = true, clearLabel = "Clear", emptyLabel = "No views", size = "sm", variant = "pills", renderPreset, presetClassName, activePresetClassName, ...props }: DataTableViewPresetsProps) { const visiblePresets = presets.filter((preset) => !preset.hidden) const activePreset = visiblePresets.find((preset) => preset.value === value) const canClear = clearable && Boolean(value) if (visiblePresets.length === 0) { return (
{emptyLabel}
) } return (
{visiblePresets.map((preset) => { const active = preset.value === value return ( ) })} {canClear && ( )}
) } export { DataTableViewPresets }