mirror of
https://github.com/henrygd/beszel.git
synced 2025-12-17 10:46:16 +01:00
feat: add alert history page size preference with persistence (#1404)
This commit is contained in:
@@ -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">
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
1
internal/site/src/types.d.ts
vendored
1
internal/site/src/types.d.ts
vendored
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user