diff --git a/frontend/src/app/main/data/colors.cljs b/frontend/src/app/main/data/colors.cljs index 493e8b573e..1d9cd64b19 100644 --- a/frontend/src/app/main/data/colors.cljs +++ b/frontend/src/app/main/data/colors.cljs @@ -116,11 +116,21 @@ text-ids (filter is-text? ids) shape-ids (filter (comp not is-text?) ids) - attrs {:fill-color (:color color) - :fill-color-ref-id (:id color) - :fill-color-ref-file (:file-id color) - :fill-color-gradient (:gradient color) - :fill-opacity (:opacity color)} + attrs (cond-> {} + (contains? color :color) + (assoc :fill-color (:color color)) + + (contains? color :id) + (assoc :fill-color-ref-id (:id color)) + + (contains? color :file-id) + (assoc :fill-color-ref-file (:file-id color)) + + (contains? color :gradient) + (assoc :fill-color-gradient (:gradient color)) + + (contains? color :opacity) + (assoc :fill-opacity (:opacity color))) update-fn (fn [shape] (merge shape attrs)) editors (get-in state [:workspace-local :editors]) @@ -138,19 +148,30 @@ (let [pid (:current-page-id state) objects (get-in state [:workspace-data :pages-index pid :objects]) not-frame (fn [shape-id] (not= (get-in objects [shape-id :type]) :frame)) - update-fn (fn [s] - (cond-> s - true - (assoc :stroke-color (:color color) - :stroke-opacity (:opacity color) - :stroke-color-gradient (:gradient color) - :stroke-color-ref-id (:id color) - :stroke-color-ref-file (:file-id color)) - (= (:stroke-style s) :none) - (assoc :stroke-style :solid - :stroke-width 1 - :stroke-opacity 1)))] + color-attrs (cond-> {} + (contains? color :color) + (assoc :stroke-color (:color color)) + + (contains? color :id) + (assoc :stroke-color-ref-id (:id color)) + + (contains? color :file-id) + (assoc :stroke-color-ref-file (:file-id color)) + + (contains? color :gradient) + (assoc :stroke-color-gradient (:gradient color)) + + (contains? color :opacity) + (assoc :stroke-opacity (:opacity color))) + + update-fn (fn [shape] + (-> shape + (merge color-attrs) + (cond-> (= (:stroke-style s) :none) + (assoc :stroke-style :solid + :stroke-width 1 + :stroke-opacity 1))))] (rx/of (dwc/update-shapes ids update-fn)))))) (defn picker-for-selected-shape [] diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/fill.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/fill.cljs index 4c07e1cc2a..9852c68b43 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/fill.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/fill.cljs @@ -63,13 +63,18 @@ (mf/use-callback (mf/deps ids) (fn [color] - (st/emit! (dc/change-fill ids color)))) + (let [remove-multiple (fn [[key value]] (not= value :multiple)) + color (into {} (filter remove-multiple) color)] + (st/emit! (dc/change-fill ids color))))) on-detach (mf/use-callback (mf/deps ids) (fn [] - (st/emit! (dc/change-fill ids (dissoc color :id :file-id))))) + (let [remove-multiple (fn [[key value]] (not= value :multiple)) + color (-> (into {} (filter remove-multiple) color) + (assoc :id nil :file-id nil))] + (st/emit! (dc/change-fill ids color))))) on-open-picker (mf/use-callback diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs index 473ae5377d..2015cf8d15 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs @@ -82,10 +82,13 @@ (dissoc :gradient))))) change-opacity (fn [new-opacity] - (when on-change (on-change (assoc color :opacity new-opacity)))) + (when on-change (on-change (assoc color + :opacity new-opacity + :id nil + :file-id nil)))) handle-pick-color (fn [color] - (when on-change (on-change color))) + (when on-change (on-change (merge {:id nil :file-id nil} color)))) handle-open (fn [] (when on-open (on-open))) @@ -133,7 +136,7 @@ (cond ;; Rendering a color with ID - (:id color) + (and (:id color) (not (uc/multiple? color))) [:* [:div.color-info [:div.color-name (str (get-color-name color))]] diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/stroke.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/stroke.cljs index eb5441a8eb..8b1c9124f3 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/stroke.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/stroke.cljs @@ -66,7 +66,9 @@ (mf/use-callback (mf/deps ids) (fn [color] - (st/emit! (dc/change-stroke ids color)))) + (let [remove-multiple (fn [[key value]] (not= value :multiple)) + color (into {} (filter remove-multiple) color)] + (st/emit! (dc/change-stroke ids color))))) handle-detach (mf/use-callback diff --git a/frontend/src/app/util/color.cljs b/frontend/src/app/util/color.cljs index c5d4237a24..6c3ecb4d64 100644 --- a/frontend/src/app/util/color.cljs +++ b/frontend/src/app/util/color.cljs @@ -109,10 +109,12 @@ :else "transparent"))) -(defn multiple? [{:keys [value color gradient]}] +(defn multiple? [{:keys [id file-id value color gradient]}] (or (= value :multiple) (= color :multiple) (= gradient :multiple) + (= id :multiple) + (= file-id :multiple) (and gradient color))) (defn parse-color [^string color-str]