diff --git a/src/_helpers/router.js b/src/_helpers/router.js index 0739e79..b380727 100644 --- a/src/_helpers/router.js +++ b/src/_helpers/router.js @@ -3,6 +3,7 @@ import Router from 'vue-router'; import HomePage from '../account/HomePage' import ActivationPage from '../auth/ActivationPage' +import ModelSetupPage from '../admin/ModelSetupPage' import RegisterPage from '../auth/RegisterPage' import LoginPage from '../auth/LoginPage' import MultifactorAuthPage from '../auth/MultifactorAuthPage' @@ -74,6 +75,7 @@ export const router = new Router({ { path: '/admin/accounts', component: AccountsPage }, { path: '/admin/accounts/:uuid', component: ProfilePage }, + { path: '/admin/model', component: ModelSetupPage }, // otherwise redirect to home { path: '*', redirect: '/' } diff --git a/src/_helpers/util.js b/src/_helpers/util.js index 10089d1..5694a98 100644 --- a/src/_helpers/util.js +++ b/src/_helpers/util.js @@ -1,6 +1,7 @@ let landingPage = null; export const util = { + USER_KEY: 'user', getLandingPage: function () { return landingPage; }, setLandingPage: function (page) { landingPage = page; }, resetLandingPage: function () { landingPage = null; }, diff --git a/src/_services/user.service.js b/src/_services/user.service.js index 0dafde5..be50fc6 100644 --- a/src/_services/user.service.js +++ b/src/_services/user.service.js @@ -11,6 +11,7 @@ export const userService = { updatePolicyById, addPolicyContactById, removePolicyContactByUuid, + setLocale, update, delete: _delete, approveAction, @@ -104,6 +105,16 @@ function denyAction(id, code, messages, errors) { return fetch(`${config.apiUrl}/auth/deny/${code}`, util.postWithAuth()).then(util.handleCrudResponse(messages, errors)); } +function setLocale(locale, messages, errors) { + const user = util.currentUser(); + if (user != null && user.token) { + return fetch(`${config.apiUrl}/me/locale/${locale}`, util.postWithAuth()).then(util.handleCrudResponse(messages, errors)); + } else { + const loc = {locale: locale}; + return Promise.resolve(loc); + } +} + function update(user, messages, errors) { return fetch(`${config.apiUrl}/users/${user.uuid}`, util.postWithAuth(user)).then(util.handleCrudResponse(messages, errors)); } diff --git a/src/_store/account.module.js b/src/_store/account.module.js index 0d21176..f543e09 100644 --- a/src/_store/account.module.js +++ b/src/_store/account.module.js @@ -1,16 +1,14 @@ import { userService, systemService } from '../_services'; import { router, util } from '../_helpers'; -// todo: why can't we import currentUser from api-util and use that here? -// when I try to do that, webpack succeeds but then an error occurs loading any page, with the -// error message "_helpers.currentUser is not defined" -// const user = JSON.parse(localStorage.getItem('user')); const user = util.currentUser(); const defaultStatus = { loggingIn: false, loggedIn: false, registering: false, + updating: false, + settingLocale: false, activating: false, approving: false, denying: false, @@ -22,12 +20,13 @@ const state = { activated: null, status: Object.assign({}, defaultStatus, {loggedIn: (user != null)}), user: user, - actionStatus: {} + actionStatus: {}, + locale: user == null ? 'detect' : (typeof user.locale !== 'undefined' && user.locale !== null ? user.locale : 'detect') }; const actions = { refreshUser({ commit }) { - commit('refreshUser', JSON.parse(localStorage.getItem('user'))); + commit('refreshUser', JSON.parse(localStorage.getItem(util.USER_KEY))); }, login({ dispatch, commit }, { user, messages, errors }) { commit('loginRequest', { name: user.name }); @@ -75,6 +74,15 @@ const actions = { } ); }, + setLocale({ commit }, {locale, messages, errors}) { + state.locale = locale; + commit('setLocaleRequest', locale); + userService.setLocale(locale, messages, errors) + .then( + user => commit('setLocaleSuccess', user), + error => commit('setLocaleFailure', error) + ); + }, update({ dispatch, commit }, {user, messages, errors}) { commit('updateRequest', user); userService.update(user, messages, errors) @@ -152,8 +160,9 @@ const mutations = { } else { state.status = {}; } - localStorage.setItem('user', JSON.stringify(user)); + localStorage.setItem(util.USER_KEY, JSON.stringify(user)); state.user = user; + state.locale = (typeof user.locale !== 'undefined' && user.locale !== null ? user.locale : state.locale); }, loginFailure(state) { state.status.loggingIn = false; @@ -171,13 +180,54 @@ const mutations = { }, registerSuccess(state, user) { state.status.registering = false; + localStorage.setItem(util.USER_KEY, JSON.stringify(user)); state.user = user; + state.locale = (typeof user.locale !== 'undefined' && user.locale !== null ? user.locale : state.locale); }, registerFailure(state) { state.status.registering = false; state.status = {}; }, + setLocaleRequest(state, locale) { + console.log('setLocaleRequest: setting locale='+locale); + state.status.settingLocale = true; + state.locale = locale; + const user = util.currentUser(); + if (user === null) { + localStorage.setItem(util.USER_KEY, JSON.stringify({locale: locale})); + } else { + user.locale = locale; + localStorage.setItem(util.USER_KEY, JSON.stringify(user)); + } + state.user = user; + }, + setLocaleSuccess(state, user) { + console.log('setLocaleSuccess: user='+JSON.stringify(user)); + state.locale = ''+state.locale; + state.status.settingLocale = false; + }, + setLocaleFailure(state) { + console.log('setLocaleFailure'); + state.status.settingLocale = false; + state.status = {}; + }, + + updateRequest(state, user) { + state.status.updating = true; + state.user = user; + }, + updateSuccess(state, user) { + state.status.updating = false; + localStorage.setItem(util.USER_KEY, JSON.stringify(user)); + state.user = user; + state.locale = (typeof user.locale !== 'undefined' && user.locale !== null ? user.locale : state.locale); + }, + updateFailure(state) { + state.status.updating = false; + state.status = {}; + }, + approveActionRequest(state) { state.status.approving = true; state.actionStatus = { requesting: true, type: 'approve' }; @@ -216,7 +266,7 @@ const mutations = { state.user = user; } else if (user.multifactorAuth) { state.user.multifactorAuth = user.multifactorAuth; - localStorage.setItem('user', JSON.stringify(user)); + localStorage.setItem(util.USER_KEY, JSON.stringify(user)); } }, sendAuthenticatorCodeFailure(state, error) { diff --git a/src/_store/system.module.js b/src/_store/system.module.js index 0176dd3..249b2a2 100644 --- a/src/_store/system.module.js +++ b/src/_store/system.module.js @@ -1,12 +1,15 @@ import { systemService } from '../_services'; import { account } from "./account.module"; -import {router} from "../_helpers"; +import { router } from "../_helpers"; const state = { configs: { allowRegistration: false, paymentsEnabled: false, - sageLauncher: false + sageLauncher: false, + cloudDrivers: [], + entityClasses: [], + locales: ['en_US'] }, status: { activating: false }, activated: null, @@ -26,6 +29,7 @@ const state = { return {count: parseInt(ms), units: ''}; } }, + messageGroupsLoaded: [], countries: [], locales: [], timezones: [], @@ -74,6 +78,11 @@ const actions = { error => commit('loadMessagesFailure', error) ); }, + reloadMessages({ commit }, locale) { + for (let i=0; i \ No newline at end of file diff --git a/src/app/App.vue b/src/app/App.vue index afc34d8..166ad7b 100644 --- a/src/app/App.vue +++ b/src/app/App.vue @@ -9,25 +9,55 @@ +
+
+ +
+
+ + +
{{ errors.first('locale') }}
+
+ +
+
\ No newline at end of file