mirror of
https://github.com/penpot/penpot.git
synced 2025-05-05 05:07:21 +02:00
Merge remote-tracking branch 'origin/staging' into develop
This commit is contained in:
commit
28a721ce9c
8 changed files with 74 additions and 18 deletions
|
@ -37,7 +37,7 @@
|
||||||
- Fix mismatch between editor and displayed text in workspace [Taiga #3975](https://tree.taiga.io/project/penpot/issue/3975)
|
- Fix mismatch between editor and displayed text in workspace [Taiga #3975](https://tree.taiga.io/project/penpot/issue/3975)
|
||||||
- Fix validation error on text position [Taiga #4010](https://tree.taiga.io/project/penpot/issue/4010)
|
- Fix validation error on text position [Taiga #4010](https://tree.taiga.io/project/penpot/issue/4010)
|
||||||
- Fix objects jitter while scrolling [Github #2167](https://github.com/penpot/penpot/issues/2167)
|
- Fix objects jitter while scrolling [Github #2167](https://github.com/penpot/penpot/issues/2167)
|
||||||
>>>>>>> origin/staging
|
- Fix on color-picker, click+drag adds lots of recent colors [Taiga #4013](https://tree.taiga.io/project/penpot/issue/4013)
|
||||||
|
|
||||||
## 1.15.0-beta
|
## 1.15.0-beta
|
||||||
|
|
||||||
|
@ -97,6 +97,7 @@
|
||||||
- Fix unexpected exception and behavior on colorpicker with gradients [Taiga #3448](https://tree.taiga.io/project/penpot/issue/3448)
|
- Fix unexpected exception and behavior on colorpicker with gradients [Taiga #3448](https://tree.taiga.io/project/penpot/issue/3448)
|
||||||
- Fix multiselection with shift not working inside a library group [Taiga #3532](https://tree.taiga.io/project/penpot/issue/3532)
|
- Fix multiselection with shift not working inside a library group [Taiga #3532](https://tree.taiga.io/project/penpot/issue/3532)
|
||||||
- Fix drag and drop graphic assets in groups [Taiga #4002](https://tree.taiga.io/project/penpot/issue/4002)
|
- Fix drag and drop graphic assets in groups [Taiga #4002](https://tree.taiga.io/project/penpot/issue/4002)
|
||||||
|
- Fix bringing complete file data when launching the export dialog [Taiga #4006](https://tree.taiga.io/project/penpot/issue/4006)
|
||||||
|
|
||||||
### :arrow_up: Deps updates
|
### :arrow_up: Deps updates
|
||||||
### :heart: Community contributions by (Thank you!)
|
### :heart: Community contributions by (Thank you!)
|
||||||
|
|
|
@ -115,7 +115,7 @@
|
||||||
|
|
||||||
(format-response [response request]
|
(format-response [response request]
|
||||||
(let [body (yrs/body response)]
|
(let [body (yrs/body response)]
|
||||||
(if (coll? body)
|
(if (or (boolean? body) (coll? body))
|
||||||
(let [qs (yrq/query request)
|
(let [qs (yrq/query request)
|
||||||
opts (if (or (contains? cf/flags :transit-readable-response)
|
opts (if (or (contains? cf/flags :transit-readable-response)
|
||||||
(str/includes? qs "transit_verbose"))
|
(str/includes? qs "transit_verbose"))
|
||||||
|
|
|
@ -244,7 +244,8 @@
|
||||||
'app.rpc.commands.management
|
'app.rpc.commands.management
|
||||||
'app.rpc.commands.auth
|
'app.rpc.commands.auth
|
||||||
'app.rpc.commands.ldap
|
'app.rpc.commands.ldap
|
||||||
'app.rpc.commands.demo)
|
'app.rpc.commands.demo
|
||||||
|
'app.rpc.commands.files)
|
||||||
(map (partial process-method cfg))
|
(map (partial process-method cfg))
|
||||||
(into {}))))
|
(into {}))))
|
||||||
|
|
||||||
|
|
50
backend/src/app/rpc/commands/files.clj
Normal file
50
backend/src/app/rpc/commands/files.clj
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
;; 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) UXBOX Labs SL
|
||||||
|
|
||||||
|
(ns app.rpc.commands.files
|
||||||
|
(:require
|
||||||
|
[app.common.spec :as us]
|
||||||
|
[app.db :as db]
|
||||||
|
[app.rpc.doc :as-alias doc]
|
||||||
|
[app.rpc.queries.files :as files]
|
||||||
|
[app.util.services :as sv]
|
||||||
|
[clojure.spec.alpha :as s]))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; QUERY COMMANDS
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; --- Query: File Libraries used by a File
|
||||||
|
|
||||||
|
(declare retrieve-has-file-libraries)
|
||||||
|
|
||||||
|
(s/def ::file-id ::us/uuid)
|
||||||
|
(s/def ::profile-id ::us/uuid)
|
||||||
|
|
||||||
|
(s/def ::has-file-libraries
|
||||||
|
(s/keys :req-un [::profile-id ::file-id]))
|
||||||
|
|
||||||
|
(sv/defmethod ::has-file-libraries
|
||||||
|
"Checks if the file has libraries. Returns a boolean"
|
||||||
|
{::doc/added "1.15.1"}
|
||||||
|
[{:keys [pool] :as cfg} {:keys [profile-id file-id] :as params}]
|
||||||
|
(with-open [conn (db/open pool)]
|
||||||
|
(files/check-read-permissions! pool profile-id file-id)
|
||||||
|
(retrieve-has-file-libraries conn params)))
|
||||||
|
|
||||||
|
(def ^:private sql:has-file-libraries
|
||||||
|
"SELECT COUNT(*) > 0 AS has_libraries
|
||||||
|
FROM file_library_rel AS flr
|
||||||
|
JOIN file AS fl ON (flr.library_file_id = fl.id)
|
||||||
|
WHERE flr.file_id = ?::uuid
|
||||||
|
AND (fl.deleted_at IS NULL OR
|
||||||
|
fl.deleted_at > now())")
|
||||||
|
|
||||||
|
(defn- retrieve-has-file-libraries
|
||||||
|
[conn {:keys [file-id]}]
|
||||||
|
(let [row (db/exec-one! conn [sql:has-file-libraries file-id])]
|
||||||
|
(:has-libraries row)))
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
[app.main.data.modal :as md]
|
[app.main.data.modal :as md]
|
||||||
[app.main.data.workspace.changes :as dch]
|
[app.main.data.workspace.changes :as dch]
|
||||||
[app.main.data.workspace.layout :as layout]
|
[app.main.data.workspace.layout :as layout]
|
||||||
[app.main.data.workspace.libraries :as dwl]
|
|
||||||
[app.main.data.workspace.state-helpers :as wsh]
|
[app.main.data.workspace.state-helpers :as wsh]
|
||||||
[app.main.data.workspace.texts :as dwt]
|
[app.main.data.workspace.texts :as dwt]
|
||||||
[app.util.color :as uc]
|
[app.util.color :as uc]
|
||||||
|
@ -430,8 +429,7 @@
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [_ state _]
|
(watch [_ state _]
|
||||||
(when-let [color (some-> state :colorpicker get-color-from-colorpicker-state)]
|
(when-let [color (some-> state :colorpicker get-color-from-colorpicker-state)]
|
||||||
(on-change color)
|
(on-change color)))))
|
||||||
(rx/of (dwl/add-recent-color color))))))
|
|
||||||
|
|
||||||
(defn initialize-colorpicker
|
(defn initialize-colorpicker
|
||||||
[on-change]
|
[on-change]
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
(ns app.main.ui.dashboard.file-menu
|
(ns app.main.ui.dashboard.file-menu
|
||||||
(:require
|
(:require
|
||||||
[app.common.data :as d]
|
|
||||||
[app.main.data.dashboard :as dd]
|
[app.main.data.dashboard :as dd]
|
||||||
[app.main.data.events :as ev]
|
[app.main.data.events :as ev]
|
||||||
[app.main.data.messages :as dm]
|
[app.main.data.messages :as dm]
|
||||||
|
@ -175,8 +174,8 @@
|
||||||
(->> (rx/from files)
|
(->> (rx/from files)
|
||||||
(rx/flat-map
|
(rx/flat-map
|
||||||
(fn [file]
|
(fn [file]
|
||||||
(->> (rp/query :file-libraries {:file-id (:id file)})
|
(->> (rp/command :has-file-libraries {:file-id (:id file)})
|
||||||
(rx/map #(assoc file :has-libraries? (d/not-empty? %))))))
|
(rx/map #(assoc file :has-libraries? %)))))
|
||||||
(rx/reduce conj [])
|
(rx/reduce conj [])
|
||||||
(rx/subs
|
(rx/subs
|
||||||
(fn [files]
|
(fn [files]
|
||||||
|
|
|
@ -94,7 +94,16 @@
|
||||||
(mf/use-fn #(st/emit! (dc/activate-colorpicker-gradient :linear-gradient)))
|
(mf/use-fn #(st/emit! (dc/activate-colorpicker-gradient :linear-gradient)))
|
||||||
|
|
||||||
on-activate-radial-gradient
|
on-activate-radial-gradient
|
||||||
(mf/use-fn #(st/emit! (dc/activate-colorpicker-gradient :radial-gradient)))]
|
(mf/use-fn #(st/emit! (dc/activate-colorpicker-gradient :radial-gradient)))
|
||||||
|
|
||||||
|
on-finish-drag
|
||||||
|
(mf/use-fn
|
||||||
|
(mf/deps state)
|
||||||
|
(fn []
|
||||||
|
(let [color (dc/get-color-from-colorpicker-state state)]
|
||||||
|
(st/emit!
|
||||||
|
(dwl/add-recent-color color)
|
||||||
|
(dwu/commit-undo-transaction)))))]
|
||||||
|
|
||||||
;; Initialize colorpicker state
|
;; Initialize colorpicker state
|
||||||
(mf/with-effect []
|
(mf/with-effect []
|
||||||
|
@ -186,21 +195,21 @@
|
||||||
:disable-opacity disable-opacity
|
:disable-opacity disable-opacity
|
||||||
:on-change handle-change-color
|
:on-change handle-change-color
|
||||||
:on-start-drag #(st/emit! (dwu/start-undo-transaction))
|
:on-start-drag #(st/emit! (dwu/start-undo-transaction))
|
||||||
:on-finish-drag #(st/emit! (dwu/commit-undo-transaction))}]
|
:on-finish-drag on-finish-drag}]
|
||||||
:harmony
|
:harmony
|
||||||
[:& harmony-selector
|
[:& harmony-selector
|
||||||
{:color current-color
|
{:color current-color
|
||||||
:disable-opacity disable-opacity
|
:disable-opacity disable-opacity
|
||||||
:on-change handle-change-color
|
:on-change handle-change-color
|
||||||
:on-start-drag #(st/emit! (dwu/start-undo-transaction))
|
:on-start-drag #(st/emit! (dwu/start-undo-transaction))
|
||||||
:on-finish-drag #(st/emit! (dwu/commit-undo-transaction))}]
|
:on-finish-drag on-finish-drag}]
|
||||||
:hsva
|
:hsva
|
||||||
[:& hsva-selector
|
[:& hsva-selector
|
||||||
{:color current-color
|
{:color current-color
|
||||||
:disable-opacity disable-opacity
|
:disable-opacity disable-opacity
|
||||||
:on-change handle-change-color
|
:on-change handle-change-color
|
||||||
:on-start-drag #(st/emit! (dwu/start-undo-transaction))
|
:on-start-drag #(st/emit! (dwu/start-undo-transaction))
|
||||||
:on-finish-drag #(st/emit! (dwu/commit-undo-transaction))}]
|
:on-finish-drag on-finish-drag}]
|
||||||
nil))
|
nil))
|
||||||
|
|
||||||
[:& color-inputs
|
[:& color-inputs
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
(ns app.main.ui.workspace.header
|
(ns app.main.ui.workspace.header
|
||||||
(:require
|
(:require
|
||||||
[app.common.data :as d]
|
|
||||||
[app.config :as cf]
|
[app.config :as cf]
|
||||||
[app.main.data.events :as ev]
|
[app.main.data.events :as ev]
|
||||||
[app.main.data.exports :as de]
|
[app.main.data.exports :as de]
|
||||||
|
@ -32,7 +31,6 @@
|
||||||
[potok.core :as ptk]
|
[potok.core :as ptk]
|
||||||
[rumext.alpha :as mf]))
|
[rumext.alpha :as mf]))
|
||||||
|
|
||||||
|
|
||||||
(def workspace-persistence-ref
|
(def workspace-persistence-ref
|
||||||
(l/derived :workspace-persistence st/state))
|
(l/derived :workspace-persistence st/state))
|
||||||
|
|
||||||
|
@ -168,8 +166,8 @@
|
||||||
(->> (rx/of file)
|
(->> (rx/of file)
|
||||||
(rx/flat-map
|
(rx/flat-map
|
||||||
(fn [file]
|
(fn [file]
|
||||||
(->> (rp/query :file-libraries {:file-id (:id file)})
|
(->> (rp/command :has-file-libraries {:file-id (:id file)})
|
||||||
(rx/map #(assoc file :has-libraries? (d/not-empty? %))))))
|
(rx/map #(assoc file :has-libraries? %)))))
|
||||||
(rx/reduce conj [])
|
(rx/reduce conj [])
|
||||||
(rx/subs
|
(rx/subs
|
||||||
(fn [files]
|
(fn [files]
|
||||||
|
|
Loading…
Add table
Reference in a new issue