0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-23 23:35:58 -05:00
penpot/frontend/src/uxbox/main/store.cljs

80 lines
1.9 KiB
Text
Raw Normal View History

;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) 2015-2017 Andrey Antukh <niwi@niwi.nz>
(ns uxbox.main.store
(:require [beicon.core :as rx]
[lentes.core :as l]
[potok.core :as ptk]
[uxbox.builtins.colors :as colors]
[uxbox.util.storage :refer [storage]]))
(enable-console-print!)
(def ^:dynamic *on-error* identity)
(defonce state (atom {}))
(defonce loader (atom false))
(defonce store (ptk/store {:on-error #(*on-error* %)}))
(defonce stream (ptk/input-stream store))
(defn repr-event
[event]
(cond
(satisfies? ptk/Event event)
(str "typ: " (pr-str (ptk/type event)))
(and (fn? event)
(pos? (count (.-name event))))
(str "fn: " (demunge (.-name event)))
:else
(str "unk: " (pr-str event))))
(defonce debug (as-> stream $
(rx/filter ptk/event? $)
;; Comment this line if you want full debug.
(rx/ignore $)
(rx/subscribe $ (fn [event]
(println "[stream]: " (repr-event event))))))
(def auth-ref
(-> (l/key :auth)
(l/derive state)))
(defn emit!
([event]
(ptk/emit! store event)
nil)
([event & events]
(apply ptk/emit! store (cons event events))
nil))
2019-07-01 19:40:01 +02:00
(def initial-state
{:route nil
2019-07-01 19:40:01 +02:00
:router nil
:auth (:auth storage)
:profile (:profile storage)
:clipboard #queue []
:undo {}
:workspace-layout nil
:workspace-local nil
:workspace-pdata nil
:images-collections nil
:images nil
2019-06-19 16:52:42 +02:00
:icons-collections nil
:icons nil
:colors-collections colors/collections
:projects nil
:pages nil
:pages-data nil})
(defn init
"Initialize the state materialization."
2019-07-01 19:40:01 +02:00
([] (init {}))
([props]
(emit! #(merge % initial-state props))
(rx/to-atom store state)))