Skip to content

Instantly share code, notes, and snippets.

@nakkaya
Created March 18, 2023 21:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nakkaya/fb5acbebf8ff7a4f468fa92b6a0b7342 to your computer and use it in GitHub Desktop.
Save nakkaya/fb5acbebf8ff7a4f468fa92b6a0b7342 to your computer and use it in GitHub Desktop.
(e/def !history (e/client (history/new-goog-history)))
(e/def path (e/client (new (m/relieve {} (history/path> !history)))))
#?(:cljs
(defn navigate! [^js !history href] (.setToken !history href)))
;; then to navigate
(navigate! !history "/some-page")
(ns app.history
#?(:cljs
(:import [goog.history Html5History EventType]))
(:require
#?(:cljs goog.events)
[hyperfiddle.electric :as e]
[hyperfiddle.electric-dom2 :as dom]
[missionary.core :as m]))
#?(:cljs
(defn new-goog-history []
(doto (Html5History. js/window)
(.setUseFragment true)
(.setPathPrefix (str js/window.location.protocol
"//"
js/window.location.host
"/app/"))
(.setEnabled true))))
#?(:cljs
(defn path> [^js h]
(m/observe (fn mount [!]
(let [k (goog.events/listen h EventType.NAVIGATE (fn [^js e] (! (.-token e))))]
(! (.getToken h))
(fn unmount []
(goog.events/unlistenByKey k)))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment