65 lines
1.5 KiB
JavaScript
65 lines
1.5 KiB
JavaScript
|
|
Vue.component('entity-data', {
|
|
props: [ "filter" ],
|
|
mounted: function() {
|
|
this.startRequesting("");
|
|
},
|
|
beforeDestroy: function() {
|
|
this.stopRequesting();
|
|
},
|
|
data: function() {
|
|
return {
|
|
scope: "",
|
|
scope_pending: "",
|
|
data: [],
|
|
data_request: undefined,
|
|
error: false
|
|
}
|
|
},
|
|
methods: {
|
|
request_data(scope) {
|
|
var url = "scope/" + scope + "?include=Name";
|
|
if (this.filter) {
|
|
url += "," + this.filter.join(",");
|
|
}
|
|
|
|
app.get(url, (msg) => {
|
|
this.data = msg;
|
|
this.error = false;
|
|
this.scope = this.scope_pending;
|
|
}, (Http) => {
|
|
if (Http.status == 404) {
|
|
this.error = true;
|
|
}
|
|
});
|
|
},
|
|
// Stop periodically requesting the scope
|
|
stopRequesting() {
|
|
this.data = [];
|
|
clearInterval(this.data_request);
|
|
},
|
|
// Start periodically requesting a scope
|
|
startRequesting(scope) {
|
|
this.stopRequesting();
|
|
|
|
// Initial request
|
|
var scope_url = scope.replace(/\./g, "/");
|
|
this.request_data(scope_url);
|
|
|
|
// Start periodic request
|
|
this.data_request = window.setInterval(function() {
|
|
this.request_data(scope_url);
|
|
}.bind(this), 1000);
|
|
},
|
|
select_scope(scope) {
|
|
this.scope_pending = scope;
|
|
this.startRequesting(scope);
|
|
}
|
|
},
|
|
template: `
|
|
<div>
|
|
<entity-table v-for="table in data" :data="table" :key="table.type.join(',')"></entity-table>
|
|
</div>
|
|
`
|
|
});
|