// 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 type * as SDK from '../../../core/sdk/sdk.js';
import * as UI from '../../../ui/legacy/legacy.js';
import {html, render, type TemplateResult} from '../../../ui/lit/lit.js';
import serviceWorkerRouterViewStyles from './serviceWorkerRouterView.css.js';
function renderRouterRule(rule: SDK.ServiceWorkerManager.ServiceWorkerRouterRule): TemplateResult {
return html`
Rule ${rule.id}
-
Condition
${rule.condition}
-
Source
${rule.source}
`;
}
interface ViewInterface {
rules: SDK.ServiceWorkerManager.ServiceWorkerRouterRule[];
}
type View = (input: ViewInterface, output: undefined, target: HTMLElement) => void;
const DEFAULT_VIEW: View = (input, _output, target) => {
// clang-format off
render(html`
${input.rules.map(renderRouterRule)}
`, target);
// clang-format on
};
export class ServiceWorkerRouterView extends UI.Widget.Widget {
#rules: SDK.ServiceWorkerManager.ServiceWorkerRouterRule[] = [];
#view: View;
constructor(element?: HTMLElement, view = DEFAULT_VIEW) {
super(element, {useShadowDom: true});
this.#view = view;
}
set rules(rules: SDK.ServiceWorkerManager.ServiceWorkerRouterRule[]) {
this.#rules = rules;
if (this.#rules.length > 0) {
this.requestUpdate();
}
}
get rules(): SDK.ServiceWorkerManager.ServiceWorkerRouterRule[] {
return this.#rules;
}
override performUpdate(): void {
this.#view({rules: this.#rules}, undefined, this.contentElement);
}
}