diff --git a/frontend/src/app/main/errors.cljs b/frontend/src/app/main/errors.cljs index 6351192340..ea60fa7b85 100644 --- a/frontend/src/app/main/errors.cljs +++ b/frontend/src/app/main/errors.cljs @@ -165,12 +165,22 @@ [{:keys [code] :as error}] (cond (= :feature-mismatch code) - (let [message (tr "errors.feature-mismatch" (:feature error))] - (st/emit! (modal/show {:type :alert :message message}))) + (let [message (tr "errors.feature-mismatch" (:feature error)) + team-id (:current-team-id @st/state) + project-id (:current-project-id @st/state) + on-accept #(if (and project-id team-id) + (st/emit! (rt/nav :dashboard-files {:team-id team-id :project-id project-id})) + (set! (.-href glob/location) ""))] + (st/emit! (modal/show {:type :alert :message message :on-accept on-accept}))) (= :features-not-supported code) - (let [message (tr "errors.feature-not-supported" (:feature error))] - (st/emit! (modal/show {:type :alert :message message}))) + (let [message (tr "errors.feature-not-supported" (:feature error)) + team-id (:current-team-id @st/state) + project-id (:current-project-id @st/state) + on-accept #(if (and project-id team-id) + (st/emit! (rt/nav :dashboard-files {:team-id team-id :project-id project-id})) + (set! (.-href glob/location) ""))] + (st/emit! (modal/show {:type :alert :message message :on-accept on-accept}))) (= :max-quote-reached code) (let [message (tr "errors.max-quote-reached" (:target error))] diff --git a/frontend/src/app/main/ui/alert.cljs b/frontend/src/app/main/ui/alert.cljs index 29e4d9393c..1acb30eb88 100644 --- a/frontend/src/app/main/ui/alert.cljs +++ b/frontend/src/app/main/ui/alert.cljs @@ -10,11 +10,10 @@ [app.main.store :as st] [app.main.ui.icons :as i] [app.util.dom :as dom] - [app.util.i18n :as i18n :refer [tr t]] + [app.util.i18n :as i18n :refer [tr]] [app.util.keyboard :as k] [goog.events :as events] - [rumext.v2 :as mf]) - (:import goog.events.EventType)) + [rumext.v2 :as mf])) (mf/defc alert-dialog {::mf/register modal/components @@ -26,29 +25,27 @@ hint accept-label accept-style] :as props}] - (let [locale (mf/deref i18n/locale) - - on-accept (or on-accept identity) - message (or message (t locale "ds.alert-title")) + (let [on-accept (or on-accept identity) + message (or message (tr "ds.alert-title")) accept-label (or accept-label (tr "ds.alert-ok")) accept-style (or accept-style :danger) - title (or title (t locale "ds.alert-title")) + title (or title (tr "ds.alert-title")) accept-fn - (mf/use-callback + (mf/use-fn (fn [event] (dom/prevent-default event) (st/emit! (modal/hide)) (on-accept props)))] - (mf/with-effect + (mf/with-effect [] (letfn [(on-keydown [event] (when (k/enter? event) (dom/prevent-default event) (dom/stop-propagation event) (st/emit! (modal/hide)) (on-accept props)))] - (->> (events/listen js/document EventType.KEYDOWN on-keydown) + (->> (events/listen js/document "keydown" on-keydown) (partial events/unlistenByKey)))) [:div.modal-overlay