M5: Energy view — per-metric decimal formatting and chart auto-refresh toggle
This commit is contained in:
@@ -132,11 +132,28 @@ export function useTestReadDevice() {
|
||||
})
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Query options shared by auto-refresh–capable queries
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export interface AutoRefreshOptions {
|
||||
/**
|
||||
* When provided, TanStack Query will automatically re-fetch this query at
|
||||
* this interval (milliseconds). Pass `undefined` to disable auto-refresh.
|
||||
* Minimum enforced value: 2 000 ms.
|
||||
*/
|
||||
refetchIntervalMs?: number
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Query: latest reading for a device
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export function useLatestReading(uuid: string) {
|
||||
export function useLatestReading(uuid: string, options?: AutoRefreshOptions) {
|
||||
const refetchInterval = options?.refetchIntervalMs != null
|
||||
? Math.max(2_000, options.refetchIntervalMs)
|
||||
: undefined
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['modbus-latest', uuid],
|
||||
queryFn: async () => {
|
||||
@@ -145,8 +162,7 @@ export function useLatestReading(uuid: string) {
|
||||
})
|
||||
return res.data
|
||||
},
|
||||
// Refresh every 10 s to show up-to-date readings.
|
||||
refetchInterval: 10_000,
|
||||
refetchInterval,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -175,10 +191,18 @@ export function useMetrics(uuid: string) {
|
||||
/** Hard upper-bound on readings fetched; prevents accidental full-table pulls. */
|
||||
const READINGS_MAX_LIMIT = 1000
|
||||
|
||||
export function useReadings(uuid: string, params: ReadingsQueryParams) {
|
||||
export function useReadings(
|
||||
uuid: string,
|
||||
params: ReadingsQueryParams,
|
||||
options?: AutoRefreshOptions,
|
||||
) {
|
||||
const { start, end, limit } = params
|
||||
const effectiveLimit = Math.min(limit ?? READINGS_MAX_LIMIT, READINGS_MAX_LIMIT)
|
||||
|
||||
const refetchInterval = options?.refetchIntervalMs != null
|
||||
? Math.max(2_000, options.refetchIntervalMs)
|
||||
: undefined
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['modbus-readings', uuid, { start, end, limit: effectiveLimit }],
|
||||
queryFn: async () => {
|
||||
@@ -196,5 +220,6 @@ export function useReadings(uuid: string, params: ReadingsQueryParams) {
|
||||
},
|
||||
// Enabled only when we have valid uuid; start/end may be null (full window).
|
||||
enabled: !!uuid,
|
||||
refetchInterval,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user