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}