summaryrefslogtreecommitdiff
path: root/client/js/controls
diff options
context:
space:
mode:
authorHunternif <hunternif@gmail.com>2019-04-28 02:58:32 +0700
committerHunternif <hunternif@gmail.com>2019-04-29 02:55:13 +0700
commitc2d3fdd3ec0d0aba7d7c9048939476f3bf431f18 (patch)
tree210f04a178c0aab7333836f544a3726c0294096b /client/js/controls
parent1d1f2c796ee2261d7c5117dfe56af47da4b2aa81 (diff)
client: re-open bulk edit and metrics blocks when returning to post list.
+ select metrics on click; + improve header style
Diffstat (limited to 'client/js/controls')
-rw-r--r--client/js/controls/metric_header_control.js35
1 files changed, 34 insertions, 1 deletions
diff --git a/client/js/controls/metric_header_control.js b/client/js/controls/metric_header_control.js
index 428ba40..7bc03a3 100644
--- a/client/js/controls/metric_header_control.js
+++ b/client/js/controls/metric_header_control.js
@@ -13,6 +13,7 @@ class MetricHeaderControl extends events.EventTarget {
super();
this._ctx = ctx;
this._hostNode = hostNode;
+ this._selectedMetrics = new MetricList();
this._headerNode = mainTemplate(ctx);
this._metricListNode = this._headerNode.querySelector('ul.metric-list');
@@ -22,16 +23,48 @@ class MetricHeaderControl extends events.EventTarget {
MetricList.loadAll().then(response => {
this._metrics = response.results;
+ this._addSelectedMetrics(ctx.parameters.metrics);
this._installMetrics(response.results);
});
}
+ _addSelectedMetrics(metricsStr) {
+ let selectedNames = (metricsStr || '').split(' ');
+ for (let metric of [...this._metrics]) {
+ if (selectedNames.includes(metric.tag.names[0])) {
+ this._selectedMetrics.add(metric);
+ }
+ }
+ }
+
_installMetrics(metrics) {
for (let metric of metrics) {
- const node = metricItemTemplate({metric: metric, ctx: this._ctx});
+ const node = metricItemTemplate(Object.assign({},
+ {
+ metric: metric,
+ selected: this._selectedMetrics.includes(metric),
+ },
+ this._ctx));
+ node.addEventListener('click', e => this._evtMetricClicked(e, node, metric));
this._metricListNode.appendChild(node);
}
}
+
+ _evtMetricClicked(e, node, metric) {
+ e.preventDefault();
+ node.classList.toggle('selected');
+ node.querySelector('a').classList.toggle('selected');
+ if (this._selectedMetrics.includes(metric)) {
+ this._selectedMetrics.remove(metric);
+ } else {
+ this._selectedMetrics.add(metric);
+ }
+ this._ctx.parameters = Object.assign({}, this._ctx.parameters, {
+ metrics: this._selectedMetrics
+ .map(metric => metric.tag.names[0]).join(' ')
+ });
+ this.dispatchEvent(new CustomEvent('submit'));
+ }
}
module.exports = MetricHeaderControl;