@@ -5,6 +5,8 @@ export const systemService = { | |||
loadIsActivated, | |||
activate, | |||
loadSystemConfigs, | |||
loadEntityConfigs, | |||
search, | |||
loadMessages, | |||
loadTimezones, | |||
detectTimezone, | |||
@@ -32,6 +34,19 @@ function loadSystemConfigs() { | |||
.then(configs => { return configs; }); | |||
} | |||
function loadEntityConfigs() { | |||
const requestOptions = util.userLoggedIn() ? util.getWithAuth() : { method: 'GET' }; | |||
return fetch(`${config.apiUrl}/ec?full=true`, requestOptions) | |||
.then(util.handleBasicResponse) | |||
.then(config => { return config; }); | |||
} | |||
function search(type, query) { | |||
return fetch(`${config.apiUrl}/search/${type}`, util.postWithAuth(query)) | |||
.then(util.handleBasicResponse) | |||
.then(config => { return config; }); | |||
} | |||
function loadMessages(group, locale) { | |||
const requestOptions = util.userLoggedIn() ? util.getWithAuth() : { method: 'GET' }; | |||
if (!locale || locale === '') locale = 'detect'; | |||
@@ -11,7 +11,9 @@ const state = { | |||
entityClasses: [], | |||
locales: ['en_US'] | |||
}, | |||
status: { activating: false }, | |||
entityConfigs: {}, | |||
searchResults: [], | |||
status: { activating: false, searching: false }, | |||
activated: null, | |||
error: null, | |||
messages: { | |||
@@ -70,6 +72,22 @@ const actions = { | |||
error => commit('loadSystemConfigsFailure', error) | |||
); | |||
}, | |||
loadEntityConfigs({ commit }) { | |||
commit('loadEntityConfigsRequest'); | |||
systemService.loadEntityConfigs() | |||
.then( | |||
configs => commit('loadEntityConfigsSuccess', configs), | |||
error => commit('loadEntityConfigsFailure', error) | |||
); | |||
}, | |||
search({ commit }, type, query) { | |||
commit('searchRequest'); | |||
systemService.search(type, query) | |||
.then( | |||
results => commit('searchSuccess', {type, query, results}), | |||
error => commit('searchFailure', error) | |||
); | |||
}, | |||
loadMessages({ commit }, group, locale) { | |||
commit('loadMessagesRequest'); | |||
systemService.loadMessages(group, locale) | |||
@@ -214,6 +232,32 @@ const mutations = { | |||
loadSystemConfigsFailure(state, error) { | |||
state.error = error; | |||
}, | |||
loadEntityConfigsRequest(state) {}, | |||
loadEntityConfigsSuccess(state, configs) { | |||
// console.log('loadEntityConfigsSuccess: received configs='+JSON.stringify(configs)); | |||
const newConfigs = {}; | |||
for (let i=0; i<configs.length; i++) { | |||
for (let j=0; j<configs[i].names.length; j++) { | |||
newConfigs[configs[i].names[j]] = configs[i].entityConfig; | |||
} | |||
} | |||
state.entityConfigs = newConfigs; | |||
}, | |||
loadEntityConfigsFailure(state, error) { | |||
state.error = error; | |||
}, | |||
searchRequest(state) { | |||
state.status.searching = true; | |||
}, | |||
searchSuccess(state, {type, query, results}) { | |||
console.log('searchSuccess: '+JSON.stringify(results)); | |||
state.status.searching = false; | |||
state.searchResults = results; | |||
}, | |||
searchFailure(state, error) { | |||
state.status.searching = false; | |||
state.error = error; | |||
}, | |||
loadMessagesRequest(state) {}, | |||
loadMessagesSuccess(state, {group, messages}) { | |||
if (state.messageGroupsLoaded.indexOf(group) === -1) state.messageGroupsLoaded.push(group); | |||
@@ -3,12 +3,25 @@ | |||
<h2>{{messages.form_title_model_setup}}</h2> | |||
<form @submit.prevent="setupModel"> | |||
<div class="form-group"> | |||
<label for="configType">{{messages.field_label_entity_type}}</label> | |||
<select v-model="configType" name="configType" class="form-control"> | |||
<label for="type">{{messages.field_label_entity_type}}</label> | |||
<select @change="selectType()" v-model="type" name="type" class="form-control"> | |||
<option v-for="opt in this.configs.entityClasses" v-bind:value="opt.value">{{opt.name}}</option> | |||
</select> | |||
</div> | |||
</form> | |||
<table border="1" v-if="this.ec && this.ec[this.lcType] && this.ec[this.lcType].listFields"> | |||
<thead> | |||
<tr> | |||
<td v-for="field in this.ec[this.lcType].listFields">{{field}}</td> | |||
</tr> | |||
</thead> | |||
<tbody v-if="this.results && this.results.results"> | |||
<tr v-for="row in this.results.results"> | |||
<td v-for="field in ec[lcType].listFields">{{row[field]}}</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</div> | |||
</template> | |||
@@ -18,23 +31,48 @@ | |||
export default { | |||
data() { | |||
return { | |||
configType: 'Account' | |||
ec: {}, | |||
type: 'bubble.model.account.Account', | |||
query: { | |||
query: '', | |||
page: 1, | |||
size: 10, | |||
sort: '' | |||
}, | |||
results: [] | |||
}; | |||
}, | |||
computed: { | |||
...mapState('account', ['locale']), | |||
...mapState('system', ['configs', 'messages']) | |||
...mapState('system', ['configs', 'messages', 'entityConfigs', 'searchResults']), | |||
lcType () { return this.type.toLowerCase(); } | |||
}, | |||
created () { | |||
this.loadEntityConfigs(); | |||
this.loadSystemConfigs(); // ensure config.entityClasses is refreshed | |||
this.loadMessages('pre_auth', this.locale); | |||
this.loadMessages('post_auth', this.locale); | |||
this.selectType(); | |||
}, | |||
methods: { | |||
// ...mapActions('system', ['loadIsActivated', 'activate']), | |||
...mapActions('system', ['loadIsActivated', 'loadSystemConfigs', 'loadMessages', 'loadTimezones']), | |||
...mapActions('system', [ | |||
'loadIsActivated', 'loadSystemConfigs', 'loadMessages', 'loadTimezones', 'loadEntityConfigs', 'search' | |||
]), | |||
setupModel(e) { | |||
console.log('setupModel called'); | |||
}, | |||
selectType() { | |||
this.search(this.type, this.query); | |||
} | |||
}, | |||
watch: { | |||
entityConfigs (configs) { | |||
if (configs) this.ec = configs; | |||
}, | |||
searchResults (results) { | |||
console.log('updating this.results='+JSON.stringify(results)); | |||
if (results) this.results = results; | |||
} | |||
} | |||
}; |