Skip to content

Commit 4062b6a

Browse files
committed
Add MonitorScope: progressive paged event loading with Monitor integration
Loads events in configurable pages (newest first), delivers batches via onEvents callback for efficient bulk ingestion, then starts Monitor for real-time updates. Supports loadMore() for on-demand older event loading.
1 parent 97851f9 commit 4062b6a

11 files changed

Lines changed: 807 additions & 7 deletions

js/MonitorScope.d.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { pryv } from './patchedPryv';
2+
/**
3+
* MonitorScope — Progressive event loading with Monitor integration.
4+
*
5+
* Loading strategy:
6+
* - Fetches events in pages of `pageSize` (default 200), newest first
7+
* - Each page triggers onEvents callback → React renders progressively
8+
* - Continues paging until fromTime boundary reached or all events loaded
9+
* - Then starts Monitor for real-time updates
10+
*
11+
* Load more: On-demand older events beyond fromTime (scroll-up)
12+
*/
13+
type Connection = InstanceType<typeof pryv.Connection>;
14+
type Event = any;
15+
type Stream = any;
16+
export interface MonitorScopeConfig {
17+
/** Events per page for chunked loading (default 200) */
18+
pageSize: number;
19+
/** Start of time window (unix timestamp, seconds) */
20+
fromTime: number;
21+
/** End of time window (unix timestamp, seconds). Defaults to now. */
22+
toTime?: number;
23+
}
24+
export interface MonitorScopeCallbacks {
25+
/** Called with a batch of events (preferred — allows efficient bulk ingestion) */
26+
onEvents?: (events: Event[]) => void;
27+
/** Called for individual events (from Monitor real-time updates) */
28+
onEvent?: (event: Event) => void;
29+
onEventDelete?: (event: {
30+
id: string;
31+
}) => void;
32+
onStreams?: (streams: Stream[]) => void;
33+
onError?: (error: Error) => void;
34+
}
35+
export declare class MonitorScope {
36+
private connection;
37+
private config;
38+
private callbacks;
39+
private monitor;
40+
private oldestLoadedTime;
41+
private _hasMoreOlder;
42+
private maxModified;
43+
private stopped;
44+
constructor(connection: Connection, config: MonitorScopeConfig, callbacks: MonitorScopeCallbacks);
45+
get hasMoreOlder(): boolean;
46+
/**
47+
* Start progressive loading:
48+
* 1. Fetch streams + first page of newest events
49+
* 2. Page backwards until fromTime boundary reached
50+
* 3. Start Monitor for real-time updates
51+
*
52+
* Each page triggers onEvents → UI updates progressively.
53+
*/
54+
start(): Promise<void>;
55+
/**
56+
* Load older events beyond current scope (triggered by scroll-up).
57+
* Loads pageSize events older than the oldest currently loaded.
58+
*/
59+
loadMore(): Promise<{
60+
events: Event[];
61+
hasMore: boolean;
62+
}>;
63+
/**
64+
* Stop monitoring and clean up.
65+
*/
66+
stop(): void;
67+
/** Deliver a batch of events via onEvents (preferred) or onEvent fallback */
68+
private deliverEvents;
69+
/** Track event timestamps for pagination bookkeeping */
70+
private trackEvent;
71+
}
72+
export {};
73+
//# sourceMappingURL=MonitorScope.d.ts.map

js/MonitorScope.d.ts.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/MonitorScope.js

Lines changed: 186 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/MonitorScope.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/index.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ import * as toolkit from './toolkit';
1010
import { durationToSeconds, durationToLabel } from './utils/duration';
1111
import { computeReminders } from './HDSModel/reminders';
1212
import { eventToShortText, formatEventDate } from './HDSModel/eventToShortText';
13+
import { MonitorScope } from './MonitorScope';
14+
export type { MonitorScopeConfig, MonitorScopeCallbacks } from './MonitorScope';
1315
export type { ReminderConfig } from './HDSModel/HDSItemDef';
1416
export type { ReminderSource, ReminderStatus } from './HDSModel/reminders';
1517
export declare const model: HDSModel;
1618
export declare const getHDSModel: typeof HDSModelInitAndSingleton.getModel;
1719
export declare const initHDSModel: typeof HDSModelInitAndSingleton.initHDSModel;
18-
export { pryv, settings, HDSService, HDSModel, appTemplates, localizeText, localizeText as l, toolkit, logger, durationToSeconds, durationToLabel, computeReminders, eventToShortText, formatEventDate };
20+
export { pryv, settings, HDSService, HDSModel, appTemplates, localizeText, localizeText as l, toolkit, logger, durationToSeconds, durationToLabel, computeReminders, eventToShortText, formatEventDate, MonitorScope };
1921
declare const HDSLib: {
2022
getHDSModel: typeof HDSModelInitAndSingleton.getModel;
2123
initHDSModel: typeof HDSModelInitAndSingleton.initHDSModel;
@@ -33,6 +35,7 @@ declare const HDSLib: {
3335
computeReminders: typeof computeReminders;
3436
eventToShortText: typeof eventToShortText;
3537
formatEventDate: typeof formatEventDate;
38+
MonitorScope: typeof MonitorScope;
3639
};
3740
export default HDSLib;
3841
//# sourceMappingURL=index.d.ts.map

0 commit comments

Comments
 (0)