State.res.mjs

  1// Generated by ReScript, PLEASE EDIT WITH CARE
  2
  3import * as Log from "./utils/Log.res.mjs";
  4import * as Yjs from "yjs";
  5import * as Debounce from "./utils/Debounce.res.mjs";
  6import * as Waypoint from "./ffi/Waypoint.res.mjs";
  7import * as Signals from "@preact/signals";
  8import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
  9
 10let waypoints = new Map();
 11
 12let docs = new Map();
 13
 14let center = Signals.signal([
 15  0,
 16  0
 17]);
 18
 19let zoom = Signals.signal(0);
 20
 21let content = Signals.signal(undefined);
 22
 23let readonly = Signals.signal(false);
 24
 25let user = Signals.signal(undefined);
 26
 27function getOrCreateWaypointsSignal(docID) {
 28  let signal = waypoints.get(docID);
 29  if (signal !== undefined) {
 30    return Primitive_option.valFromOption(signal);
 31  }
 32  let signal$1 = Signals.signal([]);
 33  waypoints.set(docID, signal$1);
 34  return signal$1;
 35}
 36
 37let cache = new Map();
 38
 39function get(docID) {
 40  return cache.get(docID);
 41}
 42
 43function set(docID, editor) {
 44  cache.set(docID, editor);
 45}
 46
 47let Editor = {
 48  cache: cache,
 49  get: get,
 50  set: set
 51};
 52
 53let timeoutHandles = new Map();
 54
 55let pendingEditors = new Map();
 56
 57function trigger(docID, editor) {
 58  let handle = timeoutHandles.get(docID);
 59  if (handle !== undefined) {
 60    Debounce.cancel(handle);
 61    timeoutHandles.delete(docID);
 62  }
 63  pendingEditors.set(docID, editor);
 64  let waypointsSignal = getOrCreateWaypointsSignal(docID);
 65  let handle$1 = Debounce.make(() => {
 66    timeoutHandles.delete(docID);
 67    let ed = pendingEditors.get(docID);
 68    if (ed !== undefined) {
 69      Log.debug("WaypointUpdater: extracting waypoints after debounce", {
 70        doc: docID
 71      });
 72      let docJson = Primitive_option.valFromOption(ed).getJSON();
 73      let waypoints = Waypoint.extractFromDocument(docJson);
 74      waypointsSignal.value = waypoints;
 75      Log.debug("WaypointUpdater: updated waypoints", {
 76        doc: docID,
 77        count: waypoints.length.toString()
 78      });
 79    }
 80    pendingEditors.delete(docID);
 81  }, 1000);
 82  timeoutHandles.set(docID, handle$1);
 83}
 84
 85let WaypointUpdater = {
 86  debounceMs: 1000,
 87  timeoutHandles: timeoutHandles,
 88  pendingEditors: pendingEditors,
 89  trigger: trigger
 90};
 91
 92function getOrCreateYjsDoc(docID) {
 93  let ydoc = docs.get(docID);
 94  if (ydoc !== undefined) {
 95    return Primitive_option.valFromOption(ydoc);
 96  }
 97  let ydoc$1 = new Yjs.Doc();
 98  docs.set(docID, ydoc$1);
 99  Log.debug("State: Created new Yjs doc", {
100    doc: docID
101  });
102  return ydoc$1;
103}
104
105let ysweetStatus = Signals.signal("Offline");
106
107export {
108  waypoints,
109  docs,
110  center,
111  zoom,
112  content,
113  readonly,
114  user,
115  getOrCreateWaypointsSignal,
116  Editor,
117  WaypointUpdater,
118  getOrCreateYjsDoc,
119  ysweetStatus,
120}
121/* waypoints Not a pure module */