mirror of
https://github.com/penpot/penpot.git
synced 2026-05-13 03:53:51 +00:00
30 lines
880 B
Clojure
30 lines
880 B
Clojure
(ns uxbox.ui.core
|
|
(:require [beicon.core :as rx]))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Actions
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(defonce actions-lock (atom :nothing))
|
|
(defonce actions-s (rx/bus))
|
|
|
|
;; TODO: implement that as multimethod for add specific validation
|
|
;; layer for different kind of action payloads
|
|
|
|
(defn acquire-action!
|
|
([type]
|
|
(acquire-action! type nil))
|
|
([type payload]
|
|
(when-let [result (compare-and-set! actions-lock :nothing type)]
|
|
(rx/push! actions-s {:type type :payload payload}))))
|
|
|
|
(defn release-action!
|
|
[type]
|
|
(when-let [result (compare-and-set! actions-lock type :nothing)]
|
|
(rx/push! actions-s {:type :nothing})))
|
|
|
|
(defn release-all-actions!
|
|
[]
|
|
(reset! actions-lock :nothing)
|
|
(rx/push! actions-s {:type :nothing}))
|