Add minor efficiency improvements to tokens import export

This commit is contained in:
Andrey Antukh 2025-02-06 15:03:13 +01:00
parent efe204c346
commit 91b6d498fe

View file

@ -385,12 +385,15 @@
:active-theme-tokens active-theme-tokens :active-theme-tokens active-theme-tokens
:tokens []}])])) :tokens []}])]))
(mf/defc import-export-button (mf/defc import-export-button*
{::mf/wrap-props false} []
[{:keys []}] (let [input-ref (mf/use-ref)
(let [show-menu* (mf/use-state false)
show-menu* (mf/use-state false)
show-menu? (deref show-menu*) show-menu? (deref show-menu*)
can-edit? (:can-edit (deref refs/permissions))
can-edit?
(mf/use-ctx ctx/can-edit?)
open-menu open-menu
(mf/use-fn (mf/use-fn
@ -404,34 +407,37 @@
(dom/stop-propagation event) (dom/stop-propagation event)
(reset! show-menu* false))) (reset! show-menu* false)))
input-ref (mf/use-ref)
on-display-file-explorer on-display-file-explorer
(mf/use-fn (mf/use-fn #(dom/click (mf/ref-val input-ref)))
#(.click (mf/ref-val input-ref)))
on-import on-import
(fn [event] (mf/use-fn
(let [file (-> event .-target .-files (aget 0))] (fn [event]
(->> (wapi/read-file-as-text file) (let [file (-> (dom/get-target event)
(sd/process-json-stream) (dom/get-files)
(rx/subs! (fn [lib] (first))]
(st/emit! (ptk/event ::ev/event {::ev/name "import-tokens"})) (->> (wapi/read-file-as-text file)
(st/emit! (dt/import-tokens-lib lib))) (sd/process-json-stream)
(fn [err] (rx/subs! (fn [lib]
(js/console.error err) (st/emit! (ptk/data-event ::ev/event {::ev/name "import-tokens"})
(st/emit! (ntf/show {:content (wte/humanize-errors [(ex-data err)]) (dt/import-tokens-lib lib)))
:type :toast (fn [err]
:level :error}))))) (js/console.error err)
(set! (.-value (mf/ref-val input-ref)) ""))) (st/emit! (ntf/show {:content (wte/humanize-errors [(ex-data err)])
:type :toast
:level :error})))))
(-> (mf/ref-val input-ref)
(dom/set-value! "")))))
on-export (fn [] on-export
(st/emit! (ptk/event ::ev/event {::ev/name "export-tokens"})) (mf/use-fn
(let [tokens-json (some-> (deref refs/tokens-lib) (fn []
(ctob/encode-dtcg) (st/emit! (ptk/data-event ::ev/event {::ev/name "export-tokens"}))
(clj->js) (let [tokens-json (some-> (deref refs/tokens-lib)
(js/JSON.stringify nil 2))] (ctob/encode-dtcg)
(->> (wapi/create-blob (or tokens-json "{}") "application/json") (json/encode :key-fn identity))]
(dom/trigger-download "tokens.json"))))] (->> (wapi/create-blob (or tokens-json "{}") "application/json")
(dom/trigger-download "tokens.json")))))]
[:div {:class (stl/css :import-export-button-wrapper)} [:div {:class (stl/css :import-export-button-wrapper)}
(when can-edit? (when can-edit?
@ -478,4 +484,4 @@
:on-lost-pointer-capture on-lost-pointer-capture-pages :on-lost-pointer-capture on-lost-pointer-capture-pages
:on-pointer-move on-pointer-move-pages}] :on-pointer-move on-pointer-move-pages}]
[:> tokens-tab* {:tokens-lib tokens-lib}]] [:> tokens-tab* {:tokens-lib tokens-lib}]]
[:& import-export-button]])) [:> import-export-button*]]))