All files / lib/awareness snapshot.ts

0% Statements 0/49
0% Branches 0/1
0% Functions 0/1
0% Lines 0/49

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                                                                                                                                 
// 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;
}