🐛 Avoid theme overwrite on creating a theme with existing name

This commit is contained in:
Andrey Antukh 2025-03-17 13:15:16 +01:00
parent 9d2117e2ac
commit ebcf5b3177
4 changed files with 41 additions and 28 deletions

View file

@ -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)
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)))))))
(rx/of (dch/commit-changes changes)))))))))
(defn update-token-theme [[group name] token-theme]
(ptk/reify ::update-token-theme

View file

@ -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,10 +423,11 @@
:on-save-form on-save-form
:disabled? disabled?}]]]]]]))
(mf/defc themes-modal-body
[_]
(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)
state (mf/use-state #(if (empty? themes)
{:type :create-theme}
{:type :themes-overview}))
set-state (mf/use-fn #(swap! state %))
@ -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
:on-click modal/hide!
:aria-label (tr "labels.close")
:variant "action"
:icon "close"}]
[:& themes-modal-body]]]))
[:> themes-modal-body*]]])

View file

@ -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."

View file

@ -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"