diff --git a/src/lib/userstate.js b/src/lib/userstate.js index 0e3d4bb9..ae0957e5 100644 --- a/src/lib/userstate.js +++ b/src/lib/userstate.js @@ -1,3 +1,5 @@ +import utils from './utils.js' + const tokenLocalStorageKey = 'lab_user_token'; const userInfoLocalStorageKey = 'lab_user_info'; @@ -15,19 +17,19 @@ function isUserLogined() { } function updateToken(token) { - if (typeof(token) === 'string') { + if (utils.isString(token)) { localStorage.setItem(tokenLocalStorageKey, token); } } function updateUserInfo(user) { - if (typeof(user) === 'object') { + if (utils.isObject(user)) { localStorage.setItem(userInfoLocalStorageKey, JSON.stringify(user)); } } function updateTokenAndUserInfo(item) { - if (typeof(item) === 'object') { + if (utils.isObject(item)) { if (item.token) { updateToken(item.token); } diff --git a/src/lib/utils.js b/src/lib/utils.js new file mode 100644 index 00000000..02b58ff4 --- /dev/null +++ b/src/lib/utils.js @@ -0,0 +1,36 @@ +function isFunction(val) { + return typeof(val) === 'function'; +} + +function isObject(val) { + return val != null && typeof(val) === 'object'; +} + +function isArray(val) { + if (isFunction(Array.isArray)) { + return Array.isArray(val); + } + + return Object.prototype.toString.call(val) === '[object Array]'; +} + +function isString(val) { + return typeof(val) === 'string'; +} + +function isNumber(val) { + return typeof(val) === 'number'; +} + +function isBoolean(val) { + return typeof(val) === 'boolean'; +} + +export default { + isFunction, + isObject, + isArray, + isString, + isNumber, + isBoolean, +}; diff --git a/src/mobile-main.js b/src/mobile-main.js index 3ada4ffb..d0156ac1 100644 --- a/src/mobile-main.js +++ b/src/mobile-main.js @@ -18,6 +18,7 @@ import version from './lib/version.js'; import settings from './lib/settings.js'; import services from './lib/services.js'; import userstate from './lib/userstate.js'; +import utils from './lib/utils.js'; import App from './Mobile.vue'; Vue.use(VueI18n); @@ -29,6 +30,7 @@ Framework7.use(Framework7Vue); const i18n = new VueI18n(getI18nOptions()); Vue.prototype.$version = version.getVersion; +Vue.prototype.$utils = utils; Vue.prototype.$settings = settings; Vue.prototype.$getDefaultLanguage = getDefaultLanguage; Vue.prototype.$getAllLanguages = getAllLanguages; diff --git a/src/views/mobile/Signup.vue b/src/views/mobile/Signup.vue index 50d26a39..3e0b6246 100644 --- a/src/views/mobile/Signup.vue +++ b/src/views/mobile/Signup.vue @@ -144,7 +144,7 @@ export default { return; } - if (typeof(data.result.token) === 'string') { + if (self.$utils.isString(data.result.token)) { self.$user.updateTokenAndUserInfo(data.result); } diff --git a/src/views/mobile/users/TwoFactorAuth.vue b/src/views/mobile/users/TwoFactorAuth.vue index 9a04a7d7..8e53a5f4 100644 --- a/src/views/mobile/users/TwoFactorAuth.vue +++ b/src/views/mobile/users/TwoFactorAuth.vue @@ -161,7 +161,7 @@ export default { self.loading = false; const data = response.data; - if (!data || !data.success || !data.result || typeof(data.result.enable) !== 'boolean') { + if (!data || !data.success || !data.result || !self.$utils.isBoolean(data.result.enable)) { self.$alert('Unable to get current two factor authentication status', () => { router.back(); }); diff --git a/src/views/mobile/users/UserProfile.vue b/src/views/mobile/users/UserProfile.vue index ae2de689..44bc143e 100644 --- a/src/views/mobile/users/UserProfile.vue +++ b/src/views/mobile/users/UserProfile.vue @@ -220,11 +220,11 @@ export default { return; } - if (typeof(data.result.newToken) === 'string') { + if (self.$utils.isString(data.result.newToken)) { self.$user.updateToken(data.result.newToken); } - if (typeof(data.result.user) === 'object') { + if (self.$utils.isObject(data.result.user)) { self.$user.updateUserInfo(data.result.user); }