Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 24x 24x 24x 24x 10x 10x 10x 10x 10x 10x 24x 4x 4x 24x 4x 4x 4x 4x 3x 3x 4x 24x 5x 5x 5x 24x 24x 1x 6x 6x 1x 1x 7x 7x 7x 7x 7x 7x | // lib/awareness/snapshot.ts
import { AwarenessEvent, AwarenessEventPayload } from './events';
export interface SystemSnapshot {
openWindows: string[];
activeWindow: string | null;
windowCount: number;
lastEvent: AwarenessEvent | null;
lastEventTimestamp: number | null;
}
const initialState: SystemSnapshot = {
openWindows: [],
activeWindow: null,
windowCount: 0,
lastEvent: null,
lastEventTimestamp: null,
};
let snapshot: SystemSnapshot = { ...initialState };
export function updateSnapshot(event: AwarenessEventPayload): void {
snapshot.lastEvent = event.type;
snapshot.lastEventTimestamp = Date.now();
switch (event.type) {
case AwarenessEvent.WINDOW_OPENED:
if (!snapshot.openWindows.includes(event.payload.windowId)) {
snapshot.openWindows.push(event.payload.windowId);
snapshot.windowCount = snapshot.openWindows.length;
}
snapshot.activeWindow = event.payload.windowId;
break;
case AwarenessEvent.WINDOW_FOCUSED:
snapshot.activeWindow = event.payload.windowId;
break;
case AwarenessEvent.WINDOW_CLOSED:
snapshot.openWindows = snapshot.openWindows.filter(
id => id !== event.payload.windowId
);
snapshot.windowCount = snapshot.openWindows.length;
if (snapshot.activeWindow === event.payload.windowId) {
snapshot.activeWindow = snapshot.openWindows[snapshot.openWindows.length - 1] || null;
}
break;
case AwarenessEvent.DESKTOP_LOADED:
snapshot.windowCount = event.payload.openWindows;
snapshot.activeWindow = event.payload.activeWindow;
break;
}
}
export function getSnapshot(): Readonly<SystemSnapshot> {
return snapshot;
}
// This is for testing purposes to reset the state between tests.
export function resetSnapshot(): void {
snapshot.openWindows = [];
snapshot.activeWindow = null;
snapshot.windowCount = 0;
snapshot.lastEvent = null;
snapshot.lastEventTimestamp = null;
}
|