diff --git a/frontend/src/app/main/data/tokens.cljs b/frontend/src/app/main/data/tokens.cljs index ff6bd74e97..0e02f9f1dc 100644 --- a/frontend/src/app/main/data/tokens.cljs +++ b/frontend/src/app/main/data/tokens.cljs @@ -66,19 +66,26 @@ ;; TOKENS Actions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defn create-token-theme [token-theme] +(defn create-token-theme + [token-theme] (let [new-token-theme token-theme] (ptk/reify ::create-token-theme ptk/WatchEvent (watch [it state _] - (let [data (dsh/lookup-file-data state) - changes (-> (pcb/empty-changes it) - (pcb/with-library-data data) - (pcb/set-token-theme (:group new-token-theme) - (:name new-token-theme) - new-token-theme))] - (rx/of - (dch/commit-changes changes))))))) + (let [data (dsh/lookup-file-data state) + tokens-lib (get data :tokens-lib)] + + (if (and tokens-lib (ctob/get-theme tokens-lib (:group token-theme) (:name token-theme))) + (rx/of (ntf/show {:content (tr "errors.token-theme-already-exists") + :type :toast + :level :error + :timeout 9000})) + (let [changes (-> (pcb/empty-changes it) + (pcb/with-library-data data) + (pcb/set-token-theme (:group new-token-theme) + (:name new-token-theme) + new-token-theme))] + (rx/of (dch/commit-changes changes))))))))) (defn update-token-theme [[group name] token-theme] (ptk/reify ::update-token-theme diff --git a/frontend/src/app/main/ui/workspace/tokens/modals/themes.cljs b/frontend/src/app/main/ui/workspace/tokens/modals/themes.cljs index 4e8a460225..be7fee634a 100644 --- a/frontend/src/app/main/ui/workspace/tokens/modals/themes.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/modals/themes.cljs @@ -270,9 +270,9 @@ (update :group str/trim) (update :description str/trim))] (when-not (str/empty? (:name theme)) - (st/emit! (ptk/event ::ev/event {::ev/name "create-tokens-theme"})) - (st/emit! (wdt/create-token-theme theme)))) - (on-back))) + (st/emit! (ptk/event ::ev/event {::ev/name "create-tokens-theme"}) + (wdt/create-token-theme theme))) + (on-back)))) close-modal (mf/use-fn @@ -423,12 +423,13 @@ :on-save-form on-save-form :disabled? disabled?}]]]]]])) -(mf/defc themes-modal-body - [_] - (let [themes (mf/deref refs/workspace-token-themes-no-hidden) - state (mf/use-state (if (empty? themes) - {:type :create-theme} - {:type :themes-overview})) +(mf/defc themes-modal-body* + {::mf/private true} + [] + (let [themes (mf/deref refs/workspace-token-themes-no-hidden) + state (mf/use-state #(if (empty? themes) + {:type :create-theme} + {:type :themes-overview})) set-state (mf/use-fn #(swap! state %)) component (case (:type @state) :empty-themes empty-themes @@ -443,13 +444,12 @@ ::mf/register modal/components ::mf/register-as :tokens/themes} [] - (let [handle-close-dialog (mf/use-fn #(st/emit! (modal/hide)))] - [:div {:class (stl/css :modal-overlay)} - [:div {:class (stl/css :modal-dialog) - :data-testid "token-theme-update-create-modal"} - [:> icon-button* {:class (stl/css :close-btn) - :on-click handle-close-dialog - :aria-label (tr "labels.close") - :variant "action" - :icon "close"}] - [:& themes-modal-body]]])) + [:div {:class (stl/css :modal-overlay)} + [:div {:class (stl/css :modal-dialog) + :data-testid "token-theme-update-create-modal"} + [:> icon-button* {:class (stl/css :close-btn) + :on-click modal/hide! + :aria-label (tr "labels.close") + :variant "action" + :icon "close"}] + [:> themes-modal-body*]]]) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 8c9efd8770..3d436505e2 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -1166,6 +1166,9 @@ msgstr "Cannot drop a parent set to an own child path." msgid "errors.token-set-already-exists" msgstr "A set with the same name already exists" +msgid "errors.token-theme-already-exists" +msgstr "Theme Option with the same name exists" + #: src/app/main/data/tokens.cljs:198 msgid "errors.token-set-exists-on-drop" msgstr "Cannot complete drop, a set with same name already exists at path %s." diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 1ec6011973..9eb46ef552 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -7185,3 +7185,6 @@ msgstr "Extiende Penpot con plugins creados por la comunidad para funcionalidad msgid "errors.token-set-already-exists" msgstr "Ya existe un set con el mismo nombre" + +msgid "errors.token-theme-already-exists" +msgstr "Ya existe un theme con este nombre"