chrome-devtools-frontend
Version:
Chrome DevTools UI
68 lines (56 loc) • 2.04 kB
text/typescript
// 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`
<li class="router-rule">
<div class="rule-id">Rule ${rule.id}</div>
<ul class="item">
<li class="condition">
<div class="rule-type">Condition</div>
<div class="rule-value">${rule.condition}</div>
</li>
<li class="source">
<div class="rule-type">Source</div>
<div class="rule-value">${rule.source}</div>
</li>
</ul>
</li>`;
}
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`
<style>${serviceWorkerRouterViewStyles}</style>
<ul class="router-rules">
${input.rules.map(renderRouterRule)}
</ul>`, 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);
}
}