Add duplicate sets feature (#6240)

*  Add duplicate sets feature

*  Add test to each module

* 🎉 Fix comments

* 🎉 Remove duplicate from groups

* 🎉 Remove create theme from test

* 🎉 Remove ' from names
This commit is contained in:
Eva Marco 2025-04-14 16:22:40 +02:00 committed by GitHub
parent f5c699ab7a
commit eee5cf5fb4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 190 additions and 23 deletions

View file

@ -21,7 +21,6 @@
[app.main.ui.workspace.tokens.update :as wtu]
[app.util.i18n :refer [tr]]
[beicon.v2.core :as rx]
[cuerdas.core :as str]
[potok.v2.core :as ptk]))
(declare set-selected-token-set-name)
@ -192,6 +191,23 @@
(rx/of (set-selected-token-set-name name)
(dch/commit-changes changes))))))))
(defn duplicate-token-set
[id is-group]
(ptk/reify ::duplicate-token-set
ptk/WatchEvent
(watch [it state _]
(let [data (dsh/lookup-file-data state)
name (ctob/normalize-set-name id)
tokens-lib (get data :tokens-lib)
suffix (tr "workspace.token.duplicate-suffix")]
(when-let [set (ctob/duplicate-set name tokens-lib {:suffix suffix})]
(let [changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
(pcb/set-token-set (:name set) is-group set))]
(rx/of (set-selected-token-set-name name)
(dch/commit-changes changes))))))))
(defn toggle-token-set
[name]
(assert (string? name) "expected a string for `name`")
@ -385,17 +401,8 @@
(when-let [token (ctob/get-token token-set token-name)]
(let [tokens (ctob/get-tokens token-set)
unames (map :name tokens)
suffix-fn
(fn [copy-count]
(let [suffix (tr "workspace.token.duplicate-suffix")]
(str/concat "-"
suffix
(when (> copy-count 1)
(str "-" copy-count)))))
copy-name
(cfh/generate-unique-name token-name unames :suffix-fn suffix-fn)]
suffix (tr "workspace.token.duplicate-suffix")
copy-name (cfh/generate-unique-name token-name unames :suffix suffix)]
(rx/of (create-token (assoc token :name copy-name)))))))))

View file

@ -44,6 +44,12 @@
(fn []
(st/emit! (dt/start-token-set-edition edition-id))))
on-duplicate
(mf/use-fn
(mf/deps is-group id)
(fn []
(st/emit! (dt/duplicate-token-set id is-group))))
on-delete
(mf/use-fn
(mf/deps is-group path)
@ -53,6 +59,8 @@
(when is-group
[:> menu-entry* {:title (tr "workspace.token.add-set-to-group") :on-click create-set-at-path}])
[:> menu-entry* {:title (tr "labels.rename") :on-click on-edit}]
(when-not is-group
[:> menu-entry* {:title (tr "labels.duplicate") :on-click on-duplicate}])
[:> menu-entry* {:title (tr "labels.delete") :on-click on-delete}]]))
(mf/defc token-set-context-menu*