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