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 */