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