App.res.mjs

  1// Generated by ReScript, PLEASE EDIT WITH CARE
  2
  3import * as Panel from "./ui/Panel.res.mjs";
  4import * as State from "./State.res.mjs";
  5import * as Editor from "./ui/Editor.res.mjs";
  6import * as Initdata from "./lib/Initdata.res.mjs";
  7import * as Menugroup from "./ui/Menugroup.res.mjs";
  8import * as PreactDOM from "./ffi/PreactDOM.res.mjs";
  9import * as MapInstance from "./ui/MapInstance.res.mjs";
 10import * as Core__Option from "@rescript/core/lib/es6/src/Core__Option.res.mjs";
 11import * as EditWaypoint from "./ui/EditWaypoint.res.mjs";
 12import * as FloatingMenu from "./ui/FloatingMenu.res.mjs";
 13import * as React from "@tiptap/react";
 14import * as FormattingMenu from "./ui/FormattingMenu.res.mjs";
 15import * as Signals from "@preact/signals";
 16import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
 17import * as JsxRuntime from "preact/jsx-runtime";
 18
 19import 'maplibre-gl/dist/maplibre-gl.css';
 20;
 21
 22let minimized = Signals.signal(false);
 23
 24function onMinimize() {
 25  minimized.value = true;
 26}
 27
 28function onOpen() {
 29  minimized.value = false;
 30}
 31
 32function App$BaseUIRoot(props) {
 33  return JsxRuntime.jsx("div", {
 34    children: Core__Option.getOr(props.children, JsxRuntime.jsx(JsxRuntime.Fragment, {})),
 35    className: "root"
 36  });
 37}
 38
 39let BaseUIRoot = {
 40  make: App$BaseUIRoot
 41};
 42
 43let root = JsxRuntime.jsx(App$BaseUIRoot, {});
 44
 45let doc = document;
 46
 47function handleConnectionStatus(rawEvent) {
 48  let status = rawEvent.detail;
 49  switch (status) {
 50    case "connected" :
 51      State.ysweetStatus.value = "Synced";
 52      return;
 53    case "connecting" :
 54    case "handshaking" :
 55      State.ysweetStatus.value = "Connecting";
 56      return;
 57    case "error" :
 58    case "offline" :
 59      State.ysweetStatus.value = "Offline";
 60      return;
 61    default:
 62      return;
 63  }
 64}
 65
 66function handleLocalChanges(rawEvent) {
 67  let hasChanges = rawEvent.detail;
 68  if (hasChanges) {
 69    State.ysweetStatus.value = "Saving";
 70  } else {
 71    State.ysweetStatus.value = "Synced";
 72  }
 73}
 74
 75function handleWaypointClick(rawEvent) {
 76  let gid = rawEvent.gid;
 77  let docID = Array.from(State.waypoints.keys()).find(docID => Core__Option.map(State.waypoints.get(docID), wps => wps.value.find(wp => wp.gid === gid)) !== undefined);
 78  if (docID === undefined) {
 79    return;
 80  }
 81  let wps = Core__Option.map(State.waypoints.get(docID), wps => wps.value);
 82  let attrs = Core__Option.flatMap(wps, wps => wps.find(wp => wp.gid === gid));
 83  if (wps !== undefined && attrs !== undefined) {
 84    Core__Option.map(State.Editor.get(docID), ed => {
 85      ed.commands.blur();
 86    });
 87    State.content.value = JsxRuntime.jsx(EditWaypoint.make, {
 88      docID: docID,
 89      waypoints: wps,
 90      attrs: attrs
 91    });
 92    return;
 93  }
 94}
 95
 96PreactDOM.addEventListener(doc, "ysweet-connection-status", handleConnectionStatus);
 97
 98PreactDOM.addEventListener(doc, "ysweet-local-changes", handleLocalChanges);
 99
100PreactDOM.addEventListener(doc, "waypoint:click", handleWaypointClick);
101
102let data = Initdata.getInitdata();
103
104if (data !== undefined) {
105  State.readonly.value = data.readonly;
106  State.user.value = {
107    id: data.id,
108    email: data.email,
109    handle: data.handle,
110    registered: data.registered
111  };
112}
113
114function App(props) {
115  let doc = props.doc;
116  return JsxRuntime.jsxs(JsxRuntime.Fragment, {
117    children: [
118      root,
119      JsxRuntime.jsx(Menugroup.make, {}),
120      JsxRuntime.jsx(MapInstance.make, {
121        doc: doc
122      }),
123      JsxRuntime.jsx(Panel.make, {
124        children: JsxRuntime.jsxs(Editor.make, {
125          doc: doc,
126          children: [
127            JsxRuntime.jsx(React.Tiptap.Content, {}),
128            JsxRuntime.jsx(FloatingMenu.make, {
129              doc: doc
130            }),
131            JsxRuntime.jsx(FormattingMenu.make, {
132              doc: doc
133            })
134          ],
135          disabled: Primitive_option.some(minimized),
136          hidden: Primitive_option.some(minimized),
137          className: "w-full h-full"
138        }),
139        onMinimize: onMinimize,
140        onOpen: onOpen
141      })
142    ]
143  });
144}
145
146let make = App;
147
148export {
149  minimized,
150  onMinimize,
151  onOpen,
152  BaseUIRoot,
153  root,
154  make,
155}
156/*  Not a pure module */