This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2020-11-23
Channels
- # aws (3)
- # babashka (17)
- # beginners (44)
- # boot (1)
- # bristol-clojurians (1)
- # cider (19)
- # clj-kondo (7)
- # cljfx (5)
- # clojure (35)
- # clojure-australia (25)
- # clojure-europe (41)
- # clojure-nl (4)
- # clojure-spec (5)
- # clojure-uk (104)
- # clojuredesign-podcast (1)
- # clojurescript (41)
- # component (6)
- # conjure (5)
- # core-async (20)
- # core-logic (5)
- # cryogen (7)
- # cursive (4)
- # data-science (1)
- # datomic (14)
- # devcards (2)
- # events (1)
- # fulcro (6)
- # helix (6)
- # jobs (4)
- # kaocha (4)
- # lambdaisland (4)
- # leiningen (3)
- # luminus (1)
- # malli (2)
- # meander (2)
- # mount (6)
- # off-topic (2)
- # pedestal (25)
- # rdf (1)
- # re-frame (17)
- # reagent (5)
- # releases (1)
- # reveal (13)
- # rewrite-clj (45)
- # shadow-cljs (27)
- # sql (18)
- # tools-deps (93)
- # vim (13)
- # xtdb (11)
Given the following routes:
(def router
(reitit/router
[["/" {:name :home
:view #'home-page
:controllers [{:start (fn [_] (rf/dispatch [:page/init-home]))}]}]
["/about" {:name :about
:view #'about-page}]
["/login" {:name :login
:view #'login-page}]]))
And the following re-frame definitions:
(ns lion.events
(:require
[re-frame.core :as rf]
[ajax.core :as ajax]
[reitit.frontend.easy :as rfe]
[reitit.frontend.controllers :as rfc]))
;;dispatchers
(rf/reg-event-db
:common/navigate
(fn [db [_ match]]
(let [old-match (:common/route db)
new-match (assoc match :controllers
(rfc/apply-controllers (:controllers old-match) match))]
(assoc db :common/route new-match))))
(rf/reg-fx
:common/navigate-fx!
(fn [[k & [params query]]]
(rfe/push-state k params query)))
(rf/reg-event-fx
:common/navigate!
(fn [_ [_ url-key params query]]
{:common/navigate-fx! [url-key params query]}))
(rf/reg-event-fx
:login
(fn [_ _]
{:http-xhrio {:method :get
:uri "/api/login"
:headers {:Authorization "Basic xxxxxxx=="}
:response-format (ajax/raw-response-format)
:on-success [:common/navigate ??????]}}))
;;subscriptions
(rf/reg-sub
:common/route
(fn [db _]
(-> db :common/route)))
(rf/reg-sub
:common/page-id
:<- [:common/route]
(fn [route _]
(-> route :data :name)))
(rf/reg-sub
:common/page
:<- [:common/route]
(fn [route _]
(-> route :data :view)))
Assuming a successful login, what code do I associate with the :on-success
in the :login
event handler so that I switch to another route, e.g. the /about
page?
I suspect I should dispatch a :common/navigate
event but what would be the argument then?