mirror of
https://github.com/penpot/penpot.git
synced 2025-01-10 08:50:57 -05:00
61 lines
1.9 KiB
Clojure
61 lines
1.9 KiB
Clojure
;; 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) KALEIDOS INC
|
|
|
|
(ns frontend-tests.helpers.state
|
|
(:require
|
|
[app.common.pprint :refer [pprint]]
|
|
[app.common.schema :as sm]
|
|
[app.common.test-helpers.files :as cthf]
|
|
[app.main.data.workspace.layout :as layout]
|
|
[beicon.v2.core :as rx]
|
|
[potok.v2.core :as ptk]))
|
|
|
|
(def ^private initial-state
|
|
{:workspace-layout layout/default-layout
|
|
:workspace-global layout/default-global
|
|
:current-file-id nil
|
|
:current-page-id nil
|
|
:workspace-data nil
|
|
:workspace-libraries {}
|
|
:features/team #{"components/v2"}})
|
|
|
|
(defn- on-error
|
|
[cause]
|
|
(js/console.log "STORE ERROR" (.-stack cause))
|
|
(when-let [data (some-> cause ex-data ::sm/explain)]
|
|
(pprint (sm/humanize-explain data))))
|
|
|
|
(defn setup-store
|
|
[file]
|
|
(let [state (-> initial-state
|
|
(assoc :current-file-id (:id file)
|
|
:current-page-id (cthf/current-page-id file)
|
|
:workspace-file (dissoc file :data)
|
|
:workspace-data (:data file)))
|
|
store (ptk/store {:state state :on-error on-error})]
|
|
store))
|
|
|
|
(defn run-store
|
|
[store done events completed-cb]
|
|
(let [stream (ptk/input-stream store)]
|
|
(->> stream
|
|
(rx/take-until (rx/filter #(= :the/end %) stream))
|
|
(rx/last)
|
|
(rx/tap (fn []
|
|
(completed-cb @store)))
|
|
(rx/subs! (fn [_] (done))
|
|
(fn [cause]
|
|
(js/console.log "[error]:" cause))
|
|
(fn [_]
|
|
(js/console.log "[complete]"))))
|
|
(doall (for [event events]
|
|
(ptk/emit! store event)))
|
|
(ptk/emit! store :the/end)))
|
|
|
|
(defn get-file-from-store
|
|
[store]
|
|
(-> (:workspace-file store)
|
|
(assoc :data (:workspace-data store))))
|