xref: /aosp_15_r20/external/pigweed/pw_web/log-viewer/src/createLogViewer.ts (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker// Copyright 2024 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker//
3*61c4878aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker// use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker// the License at
6*61c4878aSAndroid Build Coastguard Worker//
7*61c4878aSAndroid Build Coastguard Worker//     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker//
9*61c4878aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker// License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker// the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport { LogViewer as RootComponent } from './components/log-viewer';
16*61c4878aSAndroid Build Coastguard Workerimport { LogViewerState } from './shared/state';
17*61c4878aSAndroid Build Coastguard Workerimport { LogSource } from '../src/log-source';
18*61c4878aSAndroid Build Coastguard Workerimport { LogStore } from './log-store';
19*61c4878aSAndroid Build Coastguard Worker
20*61c4878aSAndroid Build Coastguard Workerimport '@material/web/button/filled-button.js';
21*61c4878aSAndroid Build Coastguard Workerimport '@material/web/button/outlined-button.js';
22*61c4878aSAndroid Build Coastguard Workerimport '@material/web/checkbox/checkbox.js';
23*61c4878aSAndroid Build Coastguard Workerimport '@material/web/field/outlined-field.js';
24*61c4878aSAndroid Build Coastguard Workerimport '@material/web/textfield/outlined-text-field.js';
25*61c4878aSAndroid Build Coastguard Workerimport '@material/web/textfield/filled-text-field.js';
26*61c4878aSAndroid Build Coastguard Workerimport '@material/web/icon/icon.js';
27*61c4878aSAndroid Build Coastguard Workerimport '@material/web/iconbutton/icon-button.js';
28*61c4878aSAndroid Build Coastguard Workerimport '@material/web/menu/menu.js';
29*61c4878aSAndroid Build Coastguard Workerimport '@material/web/menu/sub-menu.js';
30*61c4878aSAndroid Build Coastguard Workerimport '@material/web/menu/menu-item.js';
31*61c4878aSAndroid Build Coastguard Worker
32*61c4878aSAndroid Build Coastguard Worker/**
33*61c4878aSAndroid Build Coastguard Worker * Create an instance of log-viewer
34*61c4878aSAndroid Build Coastguard Worker * @param logSources - Collection of sources from where logs originate
35*61c4878aSAndroid Build Coastguard Worker * @param root - HTML component to append log-viewer to
36*61c4878aSAndroid Build Coastguard Worker * @param options - Optional parameters to change default settings
37*61c4878aSAndroid Build Coastguard Worker * @param options.columnOrder - Defines column order between level and
38*61c4878aSAndroid Build Coastguard Worker *   message. Undefined fields are added between defined order and message.
39*61c4878aSAndroid Build Coastguard Worker * @param options.logStore - Stores and handles management of all logs
40*61c4878aSAndroid Build Coastguard Worker * @param options.state - Handles state between sessions, defaults to localStorage
41*61c4878aSAndroid Build Coastguard Worker */
42*61c4878aSAndroid Build Coastguard Workerexport function createLogViewer(
43*61c4878aSAndroid Build Coastguard Worker  logSources: LogSource[] | LogSource,
44*61c4878aSAndroid Build Coastguard Worker  root: HTMLElement,
45*61c4878aSAndroid Build Coastguard Worker  options?: {
46*61c4878aSAndroid Build Coastguard Worker    columnOrder?: string[] | undefined;
47*61c4878aSAndroid Build Coastguard Worker    logSources?: LogSource | LogSource[] | undefined;
48*61c4878aSAndroid Build Coastguard Worker    logStore?: LogStore | undefined;
49*61c4878aSAndroid Build Coastguard Worker    state?: LogViewerState | undefined;
50*61c4878aSAndroid Build Coastguard Worker  },
51*61c4878aSAndroid Build Coastguard Worker) {
52*61c4878aSAndroid Build Coastguard Worker  const logViewer = new RootComponent(logSources, options);
53*61c4878aSAndroid Build Coastguard Worker  root.appendChild(logViewer);
54*61c4878aSAndroid Build Coastguard Worker
55*61c4878aSAndroid Build Coastguard Worker  // Method to destroy and unsubscribe
56*61c4878aSAndroid Build Coastguard Worker  return () => {
57*61c4878aSAndroid Build Coastguard Worker    if (logViewer.parentNode) {
58*61c4878aSAndroid Build Coastguard Worker      logViewer.parentNode.removeChild(logViewer);
59*61c4878aSAndroid Build Coastguard Worker    }
60*61c4878aSAndroid Build Coastguard Worker  };
61*61c4878aSAndroid Build Coastguard Worker}
62