From 77f906ae378a136d3f5182962db67da7d427b84a Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 18 Feb 2025 11:49:29 +0100 Subject: [PATCH 1/5] :sparkles: Improve notification show params validation assertion --- frontend/src/app/main/data/notifications.cljs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/main/data/notifications.cljs b/frontend/src/app/main/data/notifications.cljs index 7babc171c6..703d8df68e 100644 --- a/frontend/src/app/main/data/notifications.cljs +++ b/frontend/src/app/main/data/notifications.cljs @@ -51,15 +51,12 @@ [:label :string] [:callback ::sm/fn]]]]]) -(def ^:private valid-notification? - (sm/validator schema:notification)) +(def ^:private check-notification + (sm/check-fn schema:notification)) (defn show [data] - - (dm/assert! - "expected valid notification map" - (valid-notification? data)) + (assert (check-notification data) "expected valid notification map") (ptk/reify ::show ptk/UpdateEvent From 713d6a31df80be3baa26efd4e70931926b2a4e4f Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 18 Feb 2025 11:50:07 +0100 Subject: [PATCH 2/5] :sparkles: Add better way to delay a stream for library notification --- frontend/src/app/main/data/workspace.cljs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index ccffeef9a4..4996bd4f32 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -190,8 +190,8 @@ libraries)] (when needs-check? - (rx/concat (rx/timer 1000) - (rx/of (dwl/notify-sync-file file-id)))))))) + (->> (rx/of (dwl/notify-sync-file file-id)) + (rx/delay 1000))))))) (defn- fetch-libraries [file-id] From f98dbef22826549e74c816600c21c04b9359c225 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 18 Feb 2025 11:50:43 +0100 Subject: [PATCH 3/5] :sparkles: Simplify code and use lookup helpers --- frontend/src/app/main/data/workspace/libraries.cljs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index 2cf8ad2924..7a1d01a5c2 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -1190,12 +1190,11 @@ (ptk/reify ::notify-sync-file ptk/WatchEvent (watch [_ state _] - (let [file (dm/get-in state [:files file-id]) + (let [file (dsh/lookup-file state file-id) + file-data (get file :data) ignore-until (get file :ignore-sync-until) - - ;; FIXME: syntax of this can be improved libraries-need-sync (filter #(seq (assets-need-sync % file-data ignore-until)) (vals (get state :files))) @@ -1211,8 +1210,7 @@ (st/emit! (ntf/hide))) do-dismiss - #(do (st/emit! ignore-sync) - (st/emit! (ntf/hide)))] + #(st/emit! ignore-sync (ntf/hide))] (when (seq libraries-need-sync) (rx/of (ntf/dialog From f9f5f0af7dbcccc33ab65e74fd5d46596009ff26 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 18 Feb 2025 11:54:23 +0100 Subject: [PATCH 4/5] :recycle: Refactor code style on actionable ds component --- .../main/ui/ds/notifications/actionable.cljs | 41 ++++++++++--------- .../ui/notifications/inline_notification.cljs | 8 ++-- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/frontend/src/app/main/ui/ds/notifications/actionable.cljs b/frontend/src/app/main/ui/ds/notifications/actionable.cljs index 8633021b80..9284b5387a 100644 --- a/frontend/src/app/main/ui/ds/notifications/actionable.cljs +++ b/frontend/src/app/main/ui/ds/notifications/actionable.cljs @@ -17,34 +17,37 @@ [:class {:optional true} :string] [:variant {:optional true} [:maybe [:enum "default" "error"]]] - [:acceptLabel {:optional true} :string] - [:cancelLabel {:optional true} :string] - [:onAccept {:optional true} [:fn fn?]] - [:onCancel {:optional true} [:fn fn?]]]) + [:accept-label {:optional true} :string] + [:cancel-label {:optional true} :string] + [:on-accept {:optional true} [:fn fn?]] + [:on-cancel {:optional true} [:fn fn?]]]) (mf/defc actionable* - {::mf/props :obj - ::mf/schema schema:actionable} - [{:keys [class variant acceptLabel cancelLabel children onAccept onCancel] :rest props}] + {::mf/schema schema:actionable} + [{:keys [class variant accept-label cancel-label children on-accept on-cancel] :rest props}] - (let [variant (or variant "default") - class (d/append-class class (stl/css :notification)) - props (mf/spread-props props {:class class :data-testid "actionable"}) + (let [variant (d/nilv variant "default") + class (d/append-class class (stl/css :notification)) + props (mf/spread-props props + {:class class + :data-testid "actionable"}) - handle-accept + on-accept (mf/use-fn (fn [e] - (when onAccept (onAccept e)))) + (when (fn? on-accept) + (on-accept e)))) - handle-cancel + on-cancel (mf/use-fn (fn [e] - (when onCancel (onCancel e))))] + (when on-cancel (on-cancel e))))] - [:> "aside" props - [:div {:class (stl/css :notification-message)} - children] + [:> :aside props + [:div {:class (stl/css :notification-message)} children] [:> button* {:variant "secondary" - :on-click handle-cancel} cancelLabel] + :on-click on-cancel} + cancel-label] [:> button* {:variant (if (= variant "default") "primary" "destructive") - :on-click handle-accept} acceptLabel]])) + :on-click on-accept} + accept-label]])) diff --git a/frontend/src/app/main/ui/notifications/inline_notification.cljs b/frontend/src/app/main/ui/notifications/inline_notification.cljs index b04b6b03bf..6f7f856f7e 100644 --- a/frontend/src/app/main/ui/notifications/inline_notification.cljs +++ b/frontend/src/app/main/ui/notifications/inline_notification.cljs @@ -21,10 +21,10 @@ [{:keys [content accept cancel links] :as props}] [:> actionable* {:class (stl/css :new-inline) - :cancelLabel (:label cancel) - :onCancel (:callback cancel) - :acceptLabel (:label accept) - :onAccept (:callback accept)} + :cancel-label (:label cancel) + :on-cancel (:callback cancel) + :accept-label (:label accept) + :on-accept (:callback accept)} content (when (some? links) From 3f458638238aa9afef040c0b4e8f68d5b096ddc5 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 18 Feb 2025 12:03:56 +0100 Subject: [PATCH 5/5] :bug: Fix update-libraries dialog disappear when clicking outside --- CHANGES.md | 1 + frontend/src/app/main/data/notifications.cljs | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1f100b86d9..a9550c037d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -66,6 +66,7 @@ is a number of cores) - Fix problem with onboarding to a team [Taiga #10143](https://tree.taiga.io/project/penpot/issue/10143) - Fix problem with grid layout crashing [Taiga #10127](https://tree.taiga.io/project/penpot/issue/10127) - Fix rename locked boards [Taiga #10174](https://tree.taiga.io/project/penpot/issue/10174) +- Fix update-libraries dialog disappear when clicking outside [Taiga #10238](https://tree.taiga.io/project/penpot/issue/10238) ## 2.4.3 diff --git a/frontend/src/app/main/data/notifications.cljs b/frontend/src/app/main/data/notifications.cljs index 703d8df68e..37caee0ba2 100644 --- a/frontend/src/app/main/data/notifications.cljs +++ b/frontend/src/app/main/data/notifications.cljs @@ -65,12 +65,16 @@ (assoc state :notification notification))) ptk/WatchEvent - (watch [_ _ stream] + (watch [_ state stream] (rx/merge - (let [stopper (rx/filter (ptk/type? ::hide) stream)] + (let [stopper (rx/filter (ptk/type? ::hide) stream) + route-id (dm/get-in state [:route :data :name])] + (->> stream (rx/filter (ptk/type? :app.main.router/navigate)) - (rx/map (fn [_] (hide))) + (rx/map deref) + (rx/filter #(not= route-id (:id %))) + (rx/map hide) (rx/take-until stopper))) (when (:timeout data) (let [stopper (rx/filter (ptk/type? ::show) stream)]