0
Fork 0
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:
Andrey Antukh 2016-12-30 18:34:56 +01:00
parent 42e79b483f
commit 25f634352d
No known key found for this signature in database
GPG key ID: 4DFEBCB8316A8B95
3 changed files with 49 additions and 31 deletions

View file

@ -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

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

View file

@ -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