blob: 4741aec6a62dd388e05b9ae0651e69e3faad6e4d [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '/strings.m.js';
import './icons.html.js';
import '//resources/cr_elements/cr_chip/cr_chip.js';
import '//resources/cr_elements/cr_icon/cr_icon.js';
import type {BookmarkProductInfo} from '//resources/cr_components/commerce/shared.mojom-webui.js';
import {loadTimeData} from '//resources/js/load_time_data.js';
import type {DomRepeatEvent} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {getTemplate} from './power_bookmarks_labels.html.js';
import type {Label} from './power_bookmarks_service.js';
export class PowerBookmarksLabelsElement extends PolymerElement {
static get is() {
return 'power-bookmarks-labels';
}
static get template() {
return getTemplate();
}
static get properties() {
return {
disabled: {
type: Boolean,
value: false,
},
labels: {
type: Array,
computed: 'computeLabels(trackedProductInfos.*)',
notify: true,
},
trackedProductInfos: {
type: Object,
value: () => {
return {};
},
},
};
}
declare disabled: boolean;
declare labels: Label[];
declare trackedProductInfos: {[key: string]: BookmarkProductInfo};
private computeLabels() {
const labels: Label[] = [];
const hasTrackedProducts =
Object.keys(this.trackedProductInfos)
.some(key => this.trackedProductInfos[key] !== null);
if (hasTrackedProducts) {
// Reuse the current price tracking label if one exists, to maintain its
// active state.
const currentLabel = this.labels[0];
labels.push(Object.assign(
{}, {
label: loadTimeData.getString('priceTrackingLabel'),
icon: 'bookmarks:price-tracking',
active: false,
},
{active: currentLabel ? currentLabel.active : false}));
}
return labels;
}
private getLabelIcon(label: Label): string {
return label.active ? 'bookmarks:check' : label.icon;
}
private onLabelClick(event: DomRepeatEvent<Label>) {
event.preventDefault();
event.stopPropagation();
this.set(`labels.${event.model.index}.active`, !event.model.item.active);
}
}
declare global {
interface HTMLElementTagNameMap {
'power-bookmarks-labels': PowerBookmarksLabelsElement;
}
}
customElements.define(
PowerBookmarksLabelsElement.is, PowerBookmarksLabelsElement);