Skip to content

Instantly share code, notes, and snippets.

@geraldodev
Created June 26, 2022 12:55
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 geraldodev/1422fa785f6e0f1afa29c4c083815c76 to your computer and use it in GitHub Desktop.
Save geraldodev/1422fa785f6e0f1afa29c4c083815c76 to your computer and use it in GitHub Desktop.
root cljs app defining DataBrowserRouter from react-router
(ns crudis.client
(:require
["react-dom" :as rdom]
["react-dom/client" :refer [createRoot]]
["react-router-dom" :refer [DataBrowserRouter Route]]
[crudis.util.helix :refer [defnc]]
[crudis.ui.root :as root]
[crudis.ui.routes.countries :as countries]
[helix.core :refer [$]]
[helix.dom :as d]
))
(helix.core/defcomponent error-boundary
(constructor
[this that]
(set! (.-state this) #js {:error nil}))
^:static
(getDerivedStateFromError
[this error]
#js {:error error}
)
(render
[this props state]
(if-let [error (.-error ^js state)]
(if (:on-error-component props)
($ (:on-error-component props))
(d/div (pr-str error)))
(:children props))))
(defnc App
[]
($ error-boundary
($ DataBrowserRouter
($ Route {:path "/" :element ($ root/Root)}
($ Route {:path "countries"
:element ($ countries/CountriesView)
:loader countries/loader})
($ Route {:path "departments" :element ($ root/DepartmentsView)})
($ Route {:path "dependents" :element ($ root/DependentsView)})
($ Route {:path "employees" :element ($ root/EmployeesView)})
($ Route {:path "jobs" :element ($ root/JobsView)})
($ Route {:path "locations" :element ($ root/LocationsView)})
($ Route {:path "regions" :element ($ root/RegionsView)})))))
;; aka main
(defn ^:export entry-point []
(.render (createRoot (js/document.getElementById "root"))
($ App)))
(comment
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment