From 447bdebde6000d9cabaae5aff5cccc6b87eaddec Mon Sep 17 00:00:00 2001 From: mehrzad-fs Date: Tue, 22 Jun 2021 11:31:47 +0430 Subject: [PATCH] add lang to cookie --- package-lock.json | 26 +++++++++++++ package.json | 1 + src/common/lang.js | 2 + src/common/utils/cookieManager.js | 61 +++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 src/common/utils/cookieManager.js diff --git a/package-lock.json b/package-lock.json index 7059240afd..080a384717 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2961,6 +2961,16 @@ "gulp-babel": "^6.1.2" } }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -6254,6 +6264,13 @@ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -6894,6 +6911,7 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } } @@ -8278,6 +8296,7 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, @@ -10144,6 +10163,7 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } } @@ -10564,6 +10584,11 @@ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, "js-interpreter": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/js-interpreter/-/js-interpreter-2.2.0.tgz", @@ -17203,6 +17228,7 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } } diff --git a/package.json b/package.json index db9b344c8e..60c0121500 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,7 @@ "core-js": "^2.6.5", "crc-32": "^1.2.0", "gh-pages": "^2.0.1", + "js-cookie": "^2.2.1", "mobx": "^5.9.4", "mobx-react": "^5.4.4", "pako": "^1.0.11", diff --git a/src/common/lang.js b/src/common/lang.js index 5bfa715b48..504d5a9845 100644 --- a/src/common/lang.js +++ b/src/common/lang.js @@ -1,11 +1,13 @@ import { parseQueryString } from '../common/utils/tools'; import { set as setStorage, get as getStorage } from '../common/utils/storageManager'; +import { setCookieLanguage } from '../common/utils/cookieManager'; import { supportedLanguages, translate, init } from './i18n'; export const getLanguage = () => { const queryLang = parseQueryString().l; const lang = queryLang in supportedLanguages ? queryLang : getStorage('lang') || 'en'; setStorage('lang', lang); + setCookieLanguage(lang); return lang; }; diff --git a/src/common/utils/cookieManager.js b/src/common/utils/cookieManager.js new file mode 100644 index 0000000000..b15c05e2a0 --- /dev/null +++ b/src/common/utils/cookieManager.js @@ -0,0 +1,61 @@ +const Cookies = require('js-cookie'); + +export const CookieStorage = function(cookieName, cookieDomain) { + this.initialized = false; + this.cookieName = cookieName; + this.domain = cookieDomain; + this.path = '/'; + this.expires = new Date('Thu, 1 Jan 2037 12:00:00 GMT'); + this.value = {}; +}; + +CookieStorage.prototype = { + read() { + const cookieValue = Cookies.get(this.cookieName); + try { + this.value = cookieValue ? JSON.parse(cookieValue) : {}; + } catch (e) { + this.value = {}; + } + this.initialized = true; + }, + write(val, expireDate, isSecure, sameSite) { + if (!this.initialized) this.read(); + this.value = val; + if (expireDate) this.expires = expireDate; + Cookies.set(this.cookieName, this.value, { + expires : this.expires, + path : this.path, + domain : this.domain, + secure : !!isSecure, + sameSite: sameSite || 'strict', + }); + }, + get(key) { + if (!this.initialized) this.read(); + return this.value[key]; + }, + set(key, val, options) { + if (!this.initialized) this.read(); + this.value[key] = val; + Cookies.set(this.cookieName, this.value, { + expires: new Date(this.expires), + path : this.path, + domain : this.domain, + ...options, + }); + }, + remove() { + Cookies.remove(this.cookieName, { + path : this.path, + domain: this.domain, + }); + }, +}; + +export const setCookieLanguage = lang => { + if (!Cookies.get('language') || lang) { + const cookie = new CookieStorage('language'); + cookie.write(lang.toUpperCase(), undefined, true, 'none'); + } +};