diff --git a/CHANGES.md b/CHANGES.md index 157fa194c5..080504c2f4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,7 @@ - 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 objects jitter while scrolling [Github #2167](https://github.com/penpot/penpot/issues/2167) +- 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 @@ -69,6 +70,7 @@ - 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 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) diff --git a/backend/src/app/http/middleware.clj b/backend/src/app/http/middleware.clj index 626f5a375e..95c3a6b17a 100644 --- a/backend/src/app/http/middleware.clj +++ b/backend/src/app/http/middleware.clj @@ -115,7 +115,7 @@ (format-response [response request] (let [body (yrs/body response)] - (if (coll? body) + (if (or (boolean? body) (coll? body)) (let [qs (yrq/query request) opts (if (or (contains? cf/flags :transit-readable-response) (str/includes? qs "transit_verbose")) diff --git a/backend/src/app/rpc.clj b/backend/src/app/rpc.clj index 66ffacc523..0f1e61abe0 100644 --- a/backend/src/app/rpc.clj +++ b/backend/src/app/rpc.clj @@ -243,7 +243,8 @@ 'app.rpc.commands.comments 'app.rpc.commands.auth 'app.rpc.commands.ldap - 'app.rpc.commands.demo) + 'app.rpc.commands.demo + 'app.rpc.commands.files) (map (partial process-method cfg)) (into {})))) diff --git a/backend/src/app/rpc/commands/files.clj b/backend/src/app/rpc/commands/files.clj new file mode 100644 index 0000000000..5231b1a479 --- /dev/null +++ b/backend/src/app/rpc/commands/files.clj @@ -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))) + diff --git a/frontend/src/app/main/data/workspace/colors.cljs b/frontend/src/app/main/data/workspace/colors.cljs index 61f91a062e..e6915bf1d0 100644 --- a/frontend/src/app/main/data/workspace/colors.cljs +++ b/frontend/src/app/main/data/workspace/colors.cljs @@ -13,7 +13,6 @@ [app.main.data.modal :as md] [app.main.data.workspace.changes :as dch] [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.texts :as dwt] [app.util.color :as uc] @@ -430,8 +429,7 @@ ptk/WatchEvent (watch [_ state _] (when-let [color (some-> state :colorpicker get-color-from-colorpicker-state)] - (on-change color) - (rx/of (dwl/add-recent-color color)))))) + (on-change color))))) (defn initialize-colorpicker [on-change] diff --git a/frontend/src/app/main/ui/dashboard/file_menu.cljs b/frontend/src/app/main/ui/dashboard/file_menu.cljs index 7903f591ae..0ca0b535ff 100644 --- a/frontend/src/app/main/ui/dashboard/file_menu.cljs +++ b/frontend/src/app/main/ui/dashboard/file_menu.cljs @@ -6,7 +6,6 @@ (ns app.main.ui.dashboard.file-menu (:require - [app.common.data :as d] [app.main.data.dashboard :as dd] [app.main.data.events :as ev] [app.main.data.messages :as dm] @@ -166,8 +165,8 @@ (->> (rx/from files) (rx/flat-map (fn [file] - (->> (rp/query :file-libraries {:file-id (:id file)}) - (rx/map #(assoc file :has-libraries? (d/not-empty? %)))))) + (->> (rp/command :has-file-libraries {:file-id (:id file)}) + (rx/map #(assoc file :has-libraries? %))))) (rx/reduce conj []) (rx/subs (fn [files] diff --git a/frontend/src/app/main/ui/workspace/colorpicker.cljs b/frontend/src/app/main/ui/workspace/colorpicker.cljs index da975ea1d0..16fbf2b471 100644 --- a/frontend/src/app/main/ui/workspace/colorpicker.cljs +++ b/frontend/src/app/main/ui/workspace/colorpicker.cljs @@ -94,7 +94,16 @@ (mf/use-fn #(st/emit! (dc/activate-colorpicker-gradient :linear-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 (mf/with-effect [] @@ -186,21 +195,21 @@ :disable-opacity disable-opacity :on-change handle-change-color :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-selector {:color current-color :disable-opacity disable-opacity :on-change handle-change-color :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-selector {:color current-color :disable-opacity disable-opacity :on-change handle-change-color :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)) [:& color-inputs diff --git a/frontend/src/app/main/ui/workspace/header.cljs b/frontend/src/app/main/ui/workspace/header.cljs index 5f93e4def3..bd1228255a 100644 --- a/frontend/src/app/main/ui/workspace/header.cljs +++ b/frontend/src/app/main/ui/workspace/header.cljs @@ -6,7 +6,6 @@ (ns app.main.ui.workspace.header (:require - [app.common.data :as d] [app.config :as cf] [app.main.data.events :as ev] [app.main.data.exports :as de] @@ -32,7 +31,6 @@ [potok.core :as ptk] [rumext.alpha :as mf])) - (def workspace-persistence-ref (l/derived :workspace-persistence st/state)) @@ -168,8 +166,8 @@ (->> (rx/of file) (rx/flat-map (fn [file] - (->> (rp/query :file-libraries {:file-id (:id file)}) - (rx/map #(assoc file :has-libraries? (d/not-empty? %)))))) + (->> (rp/command :has-file-libraries {:file-id (:id file)}) + (rx/map #(assoc file :has-libraries? %))))) (rx/reduce conj []) (rx/subs (fn [files] @@ -341,7 +339,7 @@ (if (contains? layout :textpalette) (tr "workspace.header.menu.hide-textpalette") (tr "workspace.header.menu.show-textpalette"))] - [:span.shortcut (sc/get-tooltip :toggle-textpalette)]] + [:span.shortcut (sc/get-tooltip :toggle-textpalette)]] [:li {:on-click #(st/emit! (toggle-flag :display-artboard-names))} [:span