79 lines
1.5 KiB
Clojure
79 lines
1.5 KiB
Clojure
(ns pinkblackrose.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
|
|
:navigate
|
|
(fn [db [_ match]]
|
|
(let [old-match (:common/route db)
|
|
new-match (assoc match :controllers
|
|
(rfc/apply-controllers (:controllers old-match) match))]
|
|
(assoc db :route new-match))))
|
|
|
|
(rf/reg-fx
|
|
:navigate-fx!
|
|
(fn [[k & [params query]]]
|
|
(rfe/push-state k params query)))
|
|
|
|
(rf/reg-event-fx
|
|
:navigate!
|
|
(fn [_ [_ url-key params query]]
|
|
{:navigate-fx! [url-key params query]}))
|
|
|
|
(rf/reg-event-db
|
|
:set-docs
|
|
(fn [db [_ docs]]
|
|
(assoc db :docs docs)))
|
|
|
|
(rf/reg-event-fx
|
|
:fetch-docs
|
|
(fn [_ _]
|
|
{:http-xhrio {:method :get
|
|
:uri "/docs"
|
|
:response-format (ajax/raw-response-format)
|
|
:on-success [:set-docs]}}))
|
|
|
|
(rf/reg-event-db
|
|
:common/set-error
|
|
(fn [db [_ error]]
|
|
(assoc db :common/error error)))
|
|
|
|
(rf/reg-event-fx
|
|
:page/init-home
|
|
(fn [_ _]
|
|
{:dispatch [:fetch-docs]}))
|
|
|
|
;;subscriptions
|
|
|
|
(rf/reg-sub
|
|
:route
|
|
(fn [db _]
|
|
(-> db :route)))
|
|
|
|
(rf/reg-sub
|
|
:page-id
|
|
:<- [:route]
|
|
(fn [route _]
|
|
(-> route :data :name)))
|
|
|
|
(rf/reg-sub
|
|
:page
|
|
:<- [:route]
|
|
(fn [route _]
|
|
(-> route :data :view)))
|
|
|
|
(rf/reg-sub
|
|
:docs
|
|
(fn [db _]
|
|
(:docs db)))
|
|
|
|
(rf/reg-sub
|
|
:common/error
|
|
(fn [db _]
|
|
(:common/error db)))
|