Main.res

 1%%raw("import './index.css'")
 2open Preact
 3
 4@val external location: 'a = "location"
 5@val external window: 'a = "window"
 6
 7// Parse URL path to extract or generate document ID
 8// Handles:
 9//   /edit/{docID} -> use existing docID
10//   /edit or /edit/ -> generate new docID, redirect to /edit/{docID}
11let docID = {
12  let path = location["pathname"]
13  let parts = path->String.split("/")
14
15  switch parts {
16  | ["", "edit", id] => id
17  | ["", "edit"] => {
18      let newID = NanoID.make()
19      let _ = window["history"]["pushState"](Nullable.null, "", "/edit/" ++ newID)
20      newID
21    }
22  | _ => NanoID.make() // Fallback for unexpected paths
23  }
24}
25
26switch Doc.querySelector("#root")->Nullable.toOption {
27| Some(domElement) => render(<App doc={docID} />, domElement)
28| None => ()
29}
30
31switch Doc.querySelector("#summary")->Nullable.toOption {
32| Some(elem) => render(<Summary doc={docID} />, elem)
33| None => ()
34}