pinkblackrose/src/cljs/pinkblackrose/events.cljs

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)))