feat: add alert history page size preference with persistence (#1404)

This commit is contained in:
Arush Wadhawan
2025-11-14 13:37:46 -05:00
committed by GitHub
parent f61ba202d8
commit 77fe63fb63
3 changed files with 19 additions and 1 deletions

View File

@@ -7,6 +7,7 @@ import {
getFilteredRowModel, getFilteredRowModel,
getPaginationRowModel, getPaginationRowModel,
getSortedRowModel, getSortedRowModel,
type PaginationState,
type SortingState, type SortingState,
useReactTable, useReactTable,
type VisibilityState, type VisibilityState,
@@ -40,8 +41,11 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@
import { useToast } from "@/components/ui/use-toast" import { useToast } from "@/components/ui/use-toast"
import { alertInfo } from "@/lib/alerts" import { alertInfo } from "@/lib/alerts"
import { pb } from "@/lib/api" import { pb } from "@/lib/api"
import { $userSettings } from "@/lib/stores"
import { cn, formatDuration, formatShortDate } from "@/lib/utils" import { cn, formatDuration, formatShortDate } from "@/lib/utils"
import type { AlertsHistoryRecord } from "@/types" import type { AlertsHistoryRecord } from "@/types"
import { saveSettings } from "./layout"
import { useStore } from "@nanostores/react"
import { alertsHistoryColumns } from "../../alerts-history-columns" import { alertsHistoryColumns } from "../../alerts-history-columns"
const SectionIntro = memo(() => { const SectionIntro = memo(() => {
@@ -66,6 +70,13 @@ export default function AlertsHistoryDataTable() {
const [globalFilter, setGlobalFilter] = useState("") const [globalFilter, setGlobalFilter] = useState("")
const { toast } = useToast() const { toast } = useToast()
const [deleteOpen, setDeleteDialogOpen] = useState(false) const [deleteOpen, setDeleteDialogOpen] = useState(false)
const userSettings = useStore($userSettings)
// Initialize pagination with user preference
const [pagination, setPagination] = useState<PaginationState>(() => ({
pageIndex: 0,
pageSize: userSettings.alertHistoryPageSize || 10,
}))
useEffect(() => { useEffect(() => {
let unsubscribe: (() => void) | undefined let unsubscribe: (() => void) | undefined
@@ -136,12 +147,14 @@ export default function AlertsHistoryDataTable() {
onColumnFiltersChange: setColumnFilters, onColumnFiltersChange: setColumnFilters,
onColumnVisibilityChange: setColumnVisibility, onColumnVisibilityChange: setColumnVisibility,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onPaginationChange: setPagination,
state: { state: {
sorting, sorting,
columnFilters, columnFilters,
columnVisibility, columnVisibility,
rowSelection, rowSelection,
globalFilter, globalFilter,
pagination,
}, },
onGlobalFilterChange: setGlobalFilter, onGlobalFilterChange: setGlobalFilter,
globalFilterFn: (row, _columnId, filterValue) => { globalFilterFn: (row, _columnId, filterValue) => {
@@ -318,7 +331,10 @@ export default function AlertsHistoryDataTable() {
<Select <Select
value={`${table.getState().pagination.pageSize}`} value={`${table.getState().pagination.pageSize}`}
onValueChange={(value) => { onValueChange={(value) => {
table.setPageSize(Number(value)) const newPageSize = Number(value);
table.setPageSize(newPageSize);
// Save the preference to user settings and backend
saveSettings({ alertHistoryPageSize: newPageSize });
}} }}
> >
<SelectTrigger className="w-[4.8em]" id="rows-per-page"> <SelectTrigger className="w-[4.8em]" id="rows-per-page">

View File

@@ -48,6 +48,7 @@ export const $userSettings = map<UserSettings>({
emails: [pb.authStore.record?.email || ""], emails: [pb.authStore.record?.email || ""],
unitNet: Unit.Bytes, unitNet: Unit.Bytes,
unitTemp: Unit.Celsius, unitTemp: Unit.Celsius,
alertHistoryPageSize: 10,
}) })
// update chart time on change // update chart time on change
listenKeys($userSettings, ["chartTime"], ({ chartTime }) => $chartTime.set(chartTime)) listenKeys($userSettings, ["chartTime"], ({ chartTime }) => $chartTime.set(chartTime))

View File

@@ -281,6 +281,7 @@ export interface UserSettings {
colorWarn?: number colorWarn?: number
colorCrit?: number colorCrit?: number
hourFormat?: HourFormat hourFormat?: HourFormat
alertHistoryPageSize?: number
layoutWidth?: number layoutWidth?: number
} }