mirror of
https://github.com/penpot/penpot.git
synced 2025-05-31 21:31:38 +02:00
✨ 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:
parent
f5c699ab7a
commit
eee5cf5fb4
10 changed files with 190 additions and 23 deletions
|
@ -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)))))))))
|
||||
|
||||
|
|
|
@ -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*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue