store: implement API caching for logged in user

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2020-05-23 03:39:03 +05:30
parent 8c2a1f1854
commit 3b765d4597
4 changed files with 31 additions and 19 deletions

2
ui/package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "primate",
"version": "0.4.0",
"version": "0.5.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -25,7 +25,7 @@ import 'nprogress/nprogress.css' // progress bar style
import message from 'ant-design-vue/es/message'
import notification from 'ant-design-vue/es/notification'
import { setDocumentTitle, domTitle } from '@/utils/domUtil'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { ACCESS_TOKEN, APIS } from '@/store/mutation-types'
NProgress.configure({ showSpinner: false }) // NProgress Configuration
@ -42,7 +42,10 @@ router.beforeEach((to, from, next) => {
NProgress.done()
} else {
if (Object.keys(store.getters.apis).length === 0) {
message.loading('Discovering features...', 5)
const cachedApis = Vue.ls.get(APIS, {})
if (Object.keys(cachedApis).length === 0) {
message.loading('Loading...', 4)
}
store
.dispatch('GetInfo')
.then(apis => {

View File

@ -19,7 +19,7 @@ import Cookies from 'js-cookie'
import Vue from 'vue'
import md5 from 'md5'
import { login, logout, api } from '@/api'
import { ACCESS_TOKEN, CURRENT_PROJECT, DEFAULT_THEME, ASYNC_JOB_IDS } from '@/store/mutation-types'
import { ACCESS_TOKEN, CURRENT_PROJECT, DEFAULT_THEME, APIS, ASYNC_JOB_IDS } from '@/store/mutation-types'
const user = {
state: {
@ -54,6 +54,7 @@ const user = {
},
SET_APIS: (state, apis) => {
state.apis = apis
Vue.ls.set(APIS, apis)
},
SET_FEATURES: (state, features) => {
state.features = features
@ -114,22 +115,29 @@ const user = {
GetInfo ({ commit }) {
return new Promise((resolve, reject) => {
api('listApis').then(response => {
const apis = {}
const apiList = response.listapisresponse.api
for (var idx = 0; idx < apiList.length; idx++) {
const api = apiList[idx]
const apiName = api.name
apis[apiName] = {
params: api.params,
response: api.response
const cachedApis = Vue.ls.get(APIS, {})
if (Object.keys(cachedApis).length > 0) {
console.log('Login detected, using cached APIs')
commit('SET_APIS', cachedApis)
resolve(cachedApis)
} else {
api('listApis').then(response => {
const apis = {}
const apiList = response.listapisresponse.api
for (var idx = 0; idx < apiList.length; idx++) {
const api = apiList[idx]
const apiName = api.name
apis[apiName] = {
params: api.params,
response: api.response
}
}
}
commit('SET_APIS', apis)
resolve(apis)
}).catch(error => {
reject(error)
})
commit('SET_APIS', apis)
resolve(apis)
}).catch(error => {
reject(error)
})
}
api('listUsers').then(response => {
const result = response.listusersresponse.user[0]

View File

@ -27,6 +27,7 @@ export const DEFAULT_FIXED_SIDEMENU = 'DEFAULT_FIXED_SIDEMENU'
export const DEFAULT_FIXED_HEADER_HIDDEN = 'DEFAULT_FIXED_HEADER_HIDDEN'
export const DEFAULT_CONTENT_WIDTH_TYPE = 'DEFAULT_CONTENT_WIDTH_TYPE'
export const DEFAULT_MULTI_TAB = 'DEFAULT_MULTI_TAB'
export const APIS = 'APIS'
export const ASYNC_JOB_IDS = 'ASYNC_JOB_IDS'
export const CONTENT_WIDTH_TYPE = {