mirror of
https://github.com/penpot/penpot.git
synced 2025-02-03 21:09:00 -05:00
40 lines
1.2 KiB
Text
40 lines
1.2 KiB
Text
|
(ns app.test-helpers.events
|
||
|
(:require [cljs.test :as t :include-macros true]
|
||
|
[cljs.pprint :refer [pprint]]
|
||
|
[beicon.core :as rx]
|
||
|
[potok.core :as ptk]
|
||
|
[app.common.uuid :as uuid]
|
||
|
[app.common.geom.point :as gpt]
|
||
|
[app.common.geom.shapes :as gsh]
|
||
|
[app.common.pages :as cp]
|
||
|
[app.common.pages.helpers :as cph]
|
||
|
[app.main.data.workspace :as dw]))
|
||
|
|
||
|
;; ---- Helpers to manage global events
|
||
|
|
||
|
(defn do-update
|
||
|
"Execute an update event and returns the new state."
|
||
|
[event state]
|
||
|
(ptk/update event state))
|
||
|
|
||
|
(defn do-watch
|
||
|
"Execute a watch event and return an observable, that
|
||
|
emits once a list with all new events."
|
||
|
[event state]
|
||
|
(->> (ptk/watch event state nil)
|
||
|
(rx/reduce conj [])))
|
||
|
|
||
|
(defn do-watch-update
|
||
|
"Execute a watch event and return an observable, that
|
||
|
emits once the new state, after all new events applied
|
||
|
in sequence (considering they are all update events)."
|
||
|
[event state]
|
||
|
(->> (do-watch event state)
|
||
|
(rx/map (fn [new-events]
|
||
|
(reduce
|
||
|
(fn [new-state new-event]
|
||
|
(do-update new-event new-state))
|
||
|
state
|
||
|
new-events)))))
|
||
|
|