mirror of
https://github.com/penpot/penpot.git
synced 2025-03-19 11:11:21 -05:00
Move commonly used lenses to separated namespace.
This commit is contained in:
parent
42e79b483f
commit
25f634352d
3 changed files with 49 additions and 31 deletions
|
@ -11,6 +11,7 @@
|
|||
[potok.core :as ptk]
|
||||
[uxbox.store :as st]
|
||||
[uxbox.main.constants :as c]
|
||||
[uxbox.main.lenses :as ul]
|
||||
[uxbox.main.geom :as geom]
|
||||
[uxbox.main.data.core :refer (worker)]
|
||||
[uxbox.main.data.shapes-impl :as impl]
|
||||
|
@ -671,15 +672,14 @@
|
|||
|
||||
(defn alignment-activated?
|
||||
[state]
|
||||
(let [flags (get-in state [:workspace :flags])]
|
||||
(let [flags (l/focus ul/workspace-flags state)]
|
||||
(and (contains? flags :grid-indexed)
|
||||
(contains? flags :grid-alignment)
|
||||
(contains? flags :grid))))
|
||||
|
||||
(def selected-shapes-lens (l/in [:workspace :selected]))
|
||||
(def selected-page-lens (l/in [:workspace :page]))
|
||||
|
||||
(defn- calculate-displacement
|
||||
(defn- get-displacement
|
||||
"Retrieve the correct displacement delta point for the
|
||||
provided direction speed and distances thresholds."
|
||||
[direction speed distance]
|
||||
(case direction
|
||||
:up (gpt/point 0 (- (get-in distance [speed :y])))
|
||||
|
@ -687,7 +687,9 @@
|
|||
:left (gpt/point (- (get-in distance [speed :x])) 0)
|
||||
:right (gpt/point (get-in distance [speed :x]) 0)))
|
||||
|
||||
(defn- calculate-displacement-distance
|
||||
(defn- get-displacement-distance
|
||||
"Retrieve displacement distances thresholds for
|
||||
defined displacement speeds."
|
||||
[metadata align?]
|
||||
(let [gx (:grid-x-axis metadata)
|
||||
gy (:grid-y-axis metadata)]
|
||||
|
@ -700,11 +702,11 @@
|
|||
ptk/WatchEvent
|
||||
(watch [_ state stream]
|
||||
(let [align? (alignment-activated? state)
|
||||
selected (l/focus selected-shapes-lens state)
|
||||
page (l/focus selected-page-lens state)
|
||||
selected (l/focus ul/selected-shapes state)
|
||||
page (l/focus ul/selected-page state)
|
||||
metadata (merge c/page-metadata (get-in state [:pages page :metadata]))
|
||||
distance (calculate-displacement-distance metadata align?)
|
||||
displacement (calculate-displacement direction speed distance)]
|
||||
distance (get-displacement-distance metadata align?)
|
||||
displacement (get-displacement direction speed distance)]
|
||||
(rx/concat
|
||||
(when align?
|
||||
(rx/concat
|
||||
|
|
11
frontend/src/uxbox/main/lenses.cljs
Normal file
11
frontend/src/uxbox/main/lenses.cljs
Normal file
|
@ -0,0 +1,11 @@
|
|||
(ns uxbox.main.lenses
|
||||
(:require [lentes.core :as l]))
|
||||
|
||||
;; --- Workspace
|
||||
|
||||
(def workspace (l/key :workspace))
|
||||
(def workspace-flags (comp workspace (l/key :flags)))
|
||||
|
||||
(def selected-shapes (comp workspace (l/key :selected)))
|
||||
(def selected-page (comp workspace (l/key :page)))
|
||||
(def selected-project (comp workspace (l/key :project)))
|
|
@ -10,6 +10,7 @@
|
|||
[lentes.core :as l]
|
||||
[potok.core :as ptk]
|
||||
[uxbox.store :as st]
|
||||
[uxbox.main.lenses :as ul]
|
||||
[uxbox.main.data.workspace :as dw]
|
||||
[uxbox.main.data.shapes :as uds]
|
||||
[uxbox.util.geom.point :as gpt]
|
||||
|
@ -19,27 +20,35 @@
|
|||
;; FIXME: split this namespace in two:
|
||||
;; uxbox.main.ui.streams and uxbox.main.ui.workspace.refs
|
||||
|
||||
;; --- Helpers
|
||||
|
||||
(defn resolve-project
|
||||
"Retrieve the current project."
|
||||
[state]
|
||||
(let [id (l/focus ul/selected-project state)]
|
||||
(get-in state [:projects id])))
|
||||
|
||||
(defn resolve-page
|
||||
[state]
|
||||
(let [id (l/focus ul/selected-page state)]
|
||||
(get-in state [:pages id])))
|
||||
|
||||
;; --- Refs
|
||||
|
||||
(def workspace-ref
|
||||
(-> (l/key :workspace)
|
||||
(l/derive st/state)))
|
||||
(def workspace-ref (l/derive ul/workspace st/state))
|
||||
|
||||
(def project-ref
|
||||
(letfn [(getter [state]
|
||||
(let [project (get-in state [:workspace :project])]
|
||||
(get-in state [:projects project])))]
|
||||
(-> (l/lens getter)
|
||||
(l/derive st/state))))
|
||||
"Ref to the current selected project."
|
||||
(-> (l/lens resolve-project)
|
||||
(l/derive st/state)))
|
||||
|
||||
(def page-ref
|
||||
(letfn [(getter [state]
|
||||
(let [page (get-in state [:workspace :page])]
|
||||
(get-in state [:pages page])))]
|
||||
(-> (l/lens getter)
|
||||
(l/derive st/state))))
|
||||
"Ref to the current selected page."
|
||||
(-> (l/lens resolve-page)
|
||||
(l/derive st/state)))
|
||||
|
||||
(def page-id-ref
|
||||
"Ref to the current selected page id."
|
||||
(-> (l/key :id)
|
||||
(l/derive page-ref)))
|
||||
|
||||
|
@ -62,18 +71,14 @@
|
|||
(l/derive st/state)))
|
||||
|
||||
(def zoom-ref
|
||||
(-> (l/in [:workspace :zoom])
|
||||
(l/derive st/state)))
|
||||
(-> (l/key :zoom)
|
||||
(l/derive workspace-ref)))
|
||||
|
||||
(def zoom-ref-s (rx/from-atom zoom-ref))
|
||||
|
||||
(def alignment-ref
|
||||
(letfn [(getter [flags]
|
||||
(and (contains? flags :grid-indexed)
|
||||
(contains? flags :grid-alignment)
|
||||
(contains? flags :grid)))]
|
||||
(-> (l/lens getter)
|
||||
(l/derive flags-ref))))
|
||||
(-> (l/lens uds/alignment-activated?)
|
||||
(l/derive flags-ref)))
|
||||
|
||||
;; --- Scroll Stream
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue