blob: 5238ea7f7854b65f416a3b05f9fc4657f5f9beaf [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'chrome://resources/cr_elements/hidden_style_css.m.js';
import 'chrome://resources/cr_elements/cr_tabs/cr_tabs.js';
import 'chrome://resources/polymer/v3_0/iron-location/iron-location.js';
import 'chrome://resources/polymer/v3_0/iron-pages/iron-pages.js';
import './database_tab.js';
import './discards_tab.js';
import './graph_tab.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
Polymer({
is: 'discards-main',
_template: html`{__html_template__}`,
properties: {
selected: {
type: Number,
value: 0,
observer: 'selectedChanged_',
},
path: {
type: String,
value: '',
observer: 'pathChanged_',
},
tabs: {
type: Array,
value: () => ['Discards', 'Database', 'Graph'],
},
},
/**
* Updates the location hash on selection change.
* @param {number} newValue
* @param {number|undefined} oldValue
* @private
*/
selectedChanged_(newValue, oldValue) {
if (oldValue !== undefined) {
// The first tab is special-cased to the empty path.
const defaultTab = this.tabs[0].toLowerCase();
const tabName = this.tabs[newValue].toLowerCase();
this.path = '/' + (tabName === defaultTab ? '' : tabName);
}
},
/**
* Returns the index of the currently selected tab corresponding to the
* path or zero if no match.
* @param {string} path
* @return {number}
* @private
*/
selectedFromPath_(path) {
const index = this.tabs.findIndex(tab => path === tab.toLowerCase());
return Math.max(index, 0);
},
/**
* Updates the selection property on path change.
* @param {string} newValue
* @param {string|undefined} oldValue
* @private
*/
pathChanged_(newValue, oldValue) {
this.selected = this.selectedFromPath_(newValue.substr(1));
},
});