@@ -104,6 +104,8 @@ export class TimegraphOutputComponent extends AbstractTreeOutputComponent<Timegr
104104 this . chartLayer . updateChart ( ) ;
105105 } , 500 ) ;
106106
107+ private additonalParameters : { [ key : string ] : unknown } | undefined ;
108+
107109 constructor ( props : TimegraphOutputProps ) {
108110 super ( props ) ;
109111 this . state = {
@@ -260,6 +262,12 @@ export class TimegraphOutputComponent extends AbstractTreeOutputComponent<Timegr
260262 } ) ;
261263 this . waitAnalysisCompletion ( ) ;
262264 this . subscribeToEvents ( ) ;
265+
266+ /* Server-side context menus */
267+ if ( this . props . outputDescriptor ) {
268+ console . log ( 'this.props.outputDescriptor' ) ;
269+ this . registerServerSideMenus ( ) ;
270+ }
263271 }
264272
265273 componentWillUnmount ( ) : void {
@@ -273,13 +281,17 @@ export class TimegraphOutputComponent extends AbstractTreeOutputComponent<Timegr
273281 signalManager ( ) . on ( Signals . OUTPUT_DATA_CHANGED , this . onOutputDataChanged ) ;
274282 signalManager ( ) . on ( Signals . THEME_CHANGED , this . onThemeChange ) ;
275283 signalManager ( ) . on ( Signals . SELECTION_CHANGED , this . onSelectionChanged ) ;
284+ signalManager ( ) . on ( Signals . CONTEXT_MENU_ITEM_CLICKED , this . _onContextMenuItemClicked ) ;
285+ signalManager ( ) . on ( Signals . TRACE_MODEL_UPDATED , this . onModelUpdated ) ;
276286 }
277287
278288 protected unsubscribeToEvents ( ) : void {
279289 signalManager ( ) . off ( Signals . CONTRIBUTE_CONTEXT_MENU , this . onContextMenuContributed ) ;
280290 signalManager ( ) . off ( Signals . OUTPUT_DATA_CHANGED , this . onOutputDataChanged ) ;
281291 signalManager ( ) . off ( Signals . THEME_CHANGED , this . onThemeChange ) ;
282292 signalManager ( ) . off ( Signals . SELECTION_CHANGED , this . onSelectionChanged ) ;
293+ signalManager ( ) . off ( Signals . CONTEXT_MENU_ITEM_CLICKED , this . _onContextMenuItemClicked ) ;
294+ signalManager ( ) . off ( Signals . TRACE_MODEL_UPDATED , this . onModelUpdated ) ;
283295 }
284296
285297 async fetchTree ( ) : Promise < ResponseStatus > {
@@ -1482,4 +1494,44 @@ export class TimegraphOutputComponent extends AbstractTreeOutputComponent<Timegr
14821494 ) ;
14831495 this . chartLayer . selectAndReveal ( rowIndex ) ;
14841496 }
1497+
1498+ protected registerServerSideMenus ( ) : void {
1499+ // TODO: create generic API to register server driven menus
1500+ const ctxMenu : ContextMenuItems = {
1501+ submenus : [ ] ,
1502+ items : [ { id : 'org.eclipse.tracecompass.follow.thread.id' , label : 'Follow thread' } ]
1503+ } ;
1504+ const pld : ContextMenuContributedSignalPayload = new ContextMenuContributedSignalPayload (
1505+ this . props . outputDescriptor . id ,
1506+ ctxMenu
1507+ ) ;
1508+ signalManager ( ) . fireContributeContextMenu ( pld ) ;
1509+ }
1510+
1511+ private _onContextMenuItemClicked = async ( payload : ContextMenuItemClickedSignalPayload ) : Promise < void > => {
1512+ // handle item clicked payload and perform whatever function you need to based on the selection
1513+ // TODO: create generic API to execute command-handler for server driven actions
1514+ // For example, a pre-defined way to query additional query parameters that are passed to back-end calls (global filter)
1515+
1516+ if ( payload ?. getItemId ( ) === 'org.eclipse.tracecompass.follow.thread.id' ) {
1517+ const items : { id : number ; parentId ?: number ; metadata ?: { [ key : string ] : unknown } } [ ] =
1518+ payload . getProps ( ) [ 'selectedRows' ] ;
1519+ const item = items [ 0 ] . id ;
1520+ const parameters = QueryHelper . selectionQuery ( [ item ] ) ;
1521+ const tspClientResponse = await this . props . tspClient . fetchTimeGraphTreeContext (
1522+ this . props . traceId ,
1523+ this . props . outputDescriptor . id ,
1524+ parameters
1525+ ) ;
1526+ const model : { [ key : string ] : unknown } | undefined = tspClientResponse . getModel ( ) ?. model ;
1527+ if ( model ) {
1528+ signalManager ( ) . fireTraceContexModelUpdated ( model ) ;
1529+ }
1530+ }
1531+ } ;
1532+
1533+ onModelUpdated = ( model : { [ key : string ] : unknown } ) : void => {
1534+ // TODO add model as addtional parameters to back-end queries
1535+ this . additonalParameters = model ;
1536+ } ;
14851537}
0 commit comments