1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker// 3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker// 7*6dbdd20aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker// 9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerimport m from 'mithril'; 16*6dbdd20aSAndroid Build Coastguard Workerimport {Trace} from './trace'; 17*6dbdd20aSAndroid Build Coastguard Worker 18*6dbdd20aSAndroid Build Coastguard Worker/** 19*6dbdd20aSAndroid Build Coastguard Worker * Allows to register custom page endpoints that response to given routes, e.g. 20*6dbdd20aSAndroid Build Coastguard Worker * /viewer, /record etc. 21*6dbdd20aSAndroid Build Coastguard Worker */ 22*6dbdd20aSAndroid Build Coastguard Workerexport interface PageManager { 23*6dbdd20aSAndroid Build Coastguard Worker /** 24*6dbdd20aSAndroid Build Coastguard Worker * Example usage: 25*6dbdd20aSAndroid Build Coastguard Worker * registerPage({route: '/foo', page: FooPage}) 26*6dbdd20aSAndroid Build Coastguard Worker * class FooPage implements m.ClassComponent<PageWithTrace> { 27*6dbdd20aSAndroid Build Coastguard Worker * view({attrs}: m.CVnode<PageWithTrace>) { 28*6dbdd20aSAndroid Build Coastguard Worker * return m('div', ... 29*6dbdd20aSAndroid Build Coastguard Worker * onclick: () => attrs.trace.timeline.zoom(...); 30*6dbdd20aSAndroid Build Coastguard Worker * ) 31*6dbdd20aSAndroid Build Coastguard Worker * } 32*6dbdd20aSAndroid Build Coastguard Worker * } 33*6dbdd20aSAndroid Build Coastguard Worker */ 34*6dbdd20aSAndroid Build Coastguard Worker registerPage(pageHandler: PageHandler): Disposable; 35*6dbdd20aSAndroid Build Coastguard Worker} 36*6dbdd20aSAndroid Build Coastguard Worker 37*6dbdd20aSAndroid Build Coastguard Worker/** 38*6dbdd20aSAndroid Build Coastguard Worker * Mithril attrs for pages that don't require a Trace object. These pages are 39*6dbdd20aSAndroid Build Coastguard Worker * always accessible, even before a trace is loaded. 40*6dbdd20aSAndroid Build Coastguard Worker */ 41*6dbdd20aSAndroid Build Coastguard Workerexport interface PageAttrs { 42*6dbdd20aSAndroid Build Coastguard Worker subpage?: string; 43*6dbdd20aSAndroid Build Coastguard Worker trace?: Trace; 44*6dbdd20aSAndroid Build Coastguard Worker} 45*6dbdd20aSAndroid Build Coastguard Worker 46*6dbdd20aSAndroid Build Coastguard Worker/** 47*6dbdd20aSAndroid Build Coastguard Worker * Mithril attrs for pages that require a Trace object. These pages are 48*6dbdd20aSAndroid Build Coastguard Worker * reachable only after a trace is loaded. Trying to access the route without a 49*6dbdd20aSAndroid Build Coastguard Worker * trace loaded results in the HomePage (route: '/') to be displayed instead. 50*6dbdd20aSAndroid Build Coastguard Worker */ 51*6dbdd20aSAndroid Build Coastguard Workerexport interface PageWithTraceAttrs extends PageAttrs { 52*6dbdd20aSAndroid Build Coastguard Worker trace: Trace; 53*6dbdd20aSAndroid Build Coastguard Worker} 54*6dbdd20aSAndroid Build Coastguard Worker 55*6dbdd20aSAndroid Build Coastguard Workerexport type PageHandler<PWT = m.ComponentTypes<PageWithTraceAttrs>> = { 56*6dbdd20aSAndroid Build Coastguard Worker route: string; // e.g. '/' (default route), '/viewer' 57*6dbdd20aSAndroid Build Coastguard Worker pluginId?: string; // Not needed, the internal impl will fill it. 58*6dbdd20aSAndroid Build Coastguard Worker} & ( 59*6dbdd20aSAndroid Build Coastguard Worker | { 60*6dbdd20aSAndroid Build Coastguard Worker // If true, the route will be available even when there is no trace 61*6dbdd20aSAndroid Build Coastguard Worker // loaded. The component needs to deal with a possibly undefined attr. 62*6dbdd20aSAndroid Build Coastguard Worker traceless: true; 63*6dbdd20aSAndroid Build Coastguard Worker page: m.ComponentTypes<PageAttrs>; 64*6dbdd20aSAndroid Build Coastguard Worker } 65*6dbdd20aSAndroid Build Coastguard Worker | { 66*6dbdd20aSAndroid Build Coastguard Worker // If is omitted, the route will be available only when a trace is loaded. 67*6dbdd20aSAndroid Build Coastguard Worker // The component is guarranteed to get a defined Trace in its attrs. 68*6dbdd20aSAndroid Build Coastguard Worker traceless?: false; 69*6dbdd20aSAndroid Build Coastguard Worker page: PWT; 70*6dbdd20aSAndroid Build Coastguard Worker } 71*6dbdd20aSAndroid Build Coastguard Worker); 72