mirror of
https://github.com/penpot/penpot.git
synced 2026-05-24 09:23:40 +00:00
The main purpose of this refactor is reduce a custom state from different pages and unify them under common access patterns
42 lines
1.3 KiB
Clojure
42 lines
1.3 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 app.main.data.workspace.specialized-panel
|
|
(:require
|
|
[app.common.data :as d]
|
|
[app.main.data.helpers :as dsh]
|
|
[app.main.data.workspace.common :as-alias dwc]
|
|
[beicon.v2.core :as rx]
|
|
[potok.v2.core :as ptk]))
|
|
|
|
(defn interrupt? [e] (or (= e :interrupt) (= e ::interrupt)))
|
|
|
|
(defn clear-specialized-panel
|
|
[]
|
|
(ptk/reify ::clear-specialized-panel
|
|
ptk/UpdateEvent
|
|
(update [_ state]
|
|
(dissoc state :specialized-panel))))
|
|
|
|
|
|
(defn open-specialized-panel
|
|
[type]
|
|
(ptk/reify ::open-specialized-panel
|
|
ptk/UpdateEvent
|
|
(update [_ state]
|
|
(let [page-id (:current-page-id state)
|
|
objects (dsh/lookup-page-objects state page-id)
|
|
selected-ids (dsh/lookup-selected state)
|
|
selected-shapes (map (d/getf objects) selected-ids)]
|
|
(assoc state :specialized-panel {:type type :shapes selected-shapes})))
|
|
ptk/WatchEvent
|
|
(watch [_ _ stream]
|
|
(->> (rx/merge
|
|
(rx/filter interrupt? stream)
|
|
(rx/filter (ptk/type? ::dwc/undo) stream))
|
|
(rx/take 1)
|
|
(rx/map clear-specialized-panel)))))
|