0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-15 09:11:21 -05:00

♻️ Refactor storage and i18n internals.

This commit is contained in:
Andrey Antukh 2020-04-30 08:19:40 +02:00 committed by Alonso Torres
parent 51c39d169f
commit e9d5eccd16
2 changed files with 30 additions and 29 deletions

View file

@ -8,16 +8,17 @@
(ns uxbox.util.i18n
"A i18n foundation."
(:require
[cuerdas.core :as str]
[rumext.alpha :as mf]
[beicon.core :as rx]
[cuerdas.core :as str]
[goog.object :as gobj]
[okulary.core :as l]
[rumext.alpha :as mf]
[uxbox.config :as cfg]
[uxbox.util.transit :as t]
[uxbox.util.storage :refer [storage]]))
[uxbox.util.storage :refer [storage]]
[uxbox.util.transit :as t]))
(defonce locale (get storage ::locale cfg/default-language))
(defonce locale-sub (rx/subject))
(defonce locale (l/atom (or (get storage ::locale)
cfg/default-language)))
(defonce translations #js {})
;; The traslations `data` is a javascript object and should be treated
@ -33,8 +34,7 @@
(defn set-current-locale!
[v]
(swap! storage assoc ::locale v)
(set! locale v)
(rx/push! locale-sub v))
(reset! locale v))
(defn set-default-locale!
[]
@ -76,15 +76,12 @@
(apply str/format value (map #(if (c? %) @% %) args)))))
(defn tr
([code] (t locale code))
([code & args] (apply t locale code args)))
([code] (t @locale code))
([code & args] (apply t @locale code args)))
;; DEPRECATED
(defn use-locale
[]
(let [[locale set-locale] (mf/useState locale)]
(mf/useEffect (fn []
(let [sub (rx/sub! locale-sub #(set-locale %))]
#(rx/dispose! sub)))
#js [])
locale))
(mf/deref locale))

View file

@ -9,24 +9,27 @@
(defn- persist
[alias value]
(let [key (name alias)
value (t/encode value)]
(.setItem js/localStorage key value)))
(when-not (or (= *target* "nodejs")
(not (exists? js/window)))
(let [key (name alias)
value (t/encode value)]
(.setItem js/localStorage key value))))
(defn- load
[alias]
(if (or (= *target* "nodejs") (not (exists? js/window)))
{}
(when-not (or (= *target* "nodejs")
(not (exists? js/window)))
(let [data (.getItem js/localStorage (name alias))]
(if data
(try
(t/decode data)
{}))))
(catch :default e
(js/console.error "Error on loading data from local storage." e)
nil)))))
(defn make-storage
(defn- make-storage
[alias]
(let [data (atom (load alias))]
(when (not= *target* "nodejs")
(add-watch data :sub #(persist alias %4)))
(add-watch data :sub #(persist alias %4))
(reify
Object
(toString [_]
@ -56,8 +59,9 @@
ILookup
(-lookup [_ key]
(-lookup @data key nil))
(get @data key nil))
(-lookup [_ key not-found]
(-lookup @data key not-found)))))
(get @data key not-found)))))
(def storage (make-storage "uxbox"))
(def storage
(make-storage "uxbox"))