Skip to content

Instantly share code, notes, and snippets.

@escherize
Created June 1, 2016 14:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save escherize/83cbb92a99a39a8ba1c52fd50ea16c5a to your computer and use it in GitHub Desktop.
Save escherize/83cbb92a99a39a8ba1c52fd50ea16c5a to your computer and use it in GitHub Desktop.
(ns teal.routing
(:require-macros [secretary.core :refer [defroute]]
[compojure.route :as route])
(:import goog.History)
(:require [secretary.core :as secretary]
[goog.events :as events]
[goog.history.EventType :as EventType]
[re-frame.core :as rf :refer [dispatch]]
[teal.local-storage :as ls]
[taoensso.timbre :as timbre]))
(defn update-url [url]
;;(update-cookie)
(set! (.-location js/window) url)
(.scrollTo js/window 0 0))
(defn hook-browser-navigation! []
(doto (History.)
(events/listen
EventType/NAVIGATE
(fn [event]
(secretary/dispatch! (.-token event))))
(.setEnabled true)))
(defn logged-in? []
(let [ls-app-db (ls/get-item :app-db)
_ (timbre/info "ls-app-db: " ls-app-db)]
(-> (ls/get-item :app-db) :user :id boolean)))
(defn internal-route
"Used for routes that a user must be logged in for."
[panel-kw]
(if (logged-in?)
(rf/dispatch [:set-active-panel panel-kw])
(update-url "#/")))
(defn external-route
"Used for routes that a user must be logged out for, like signup/login."
[panel-kw]
(if-not (logged-in?)
(rf/dispatch [:set-active-panel panel-kw])
(update-url "#/hub")))
(defn app-routes []
(secretary/set-config! :prefix "#")
;; --------------------
;; define routes here
(defroute "/" []
(external-route :signup-panel))
(defroute "/login" []
(external-route :login-panel))
(defroute "/test" []
(external-route :test-panel))
(defroute "/hub" []
(internal-route :hub-panel))
(defroute "/payment" []
(internal-route :payment-panel))
(defroute "/embed/:sms-link" {:as params}
(let [smslink-id (:sms-link params)]
(dispatch [:update-sms-link-id smslink-id])
(internal-route :embed-panel)))
;; --------------------
(hook-browser-navigation!))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment