diff --git a/packages/base/src/signals/signal-manager.ts b/packages/base/src/signals/signal-manager.ts index 1ffd2334..6c0752b9 100644 --- a/packages/base/src/signals/signal-manager.ts +++ b/packages/base/src/signals/signal-manager.ts @@ -47,6 +47,7 @@ export declare interface SignalManager { fireRequestSelectionRangeChange(payload: TimeRangeUpdatePayload): void; fireContributeContextMenu(payload: ContextMenuContributedSignalPayload): void; fireContextMenuItemClicked(payload: ContextMenuItemClickedSignalPayload): void; + fireTraceContexModelUpdated(payload: { [key: string]: unknown }): void; } export const Signals = { @@ -84,7 +85,8 @@ export const Signals = { REQUEST_SELECTION_RANGE_CHANGE: 'change selection range', OUTPUT_DATA_CHANGED: 'output data changed', CONTRIBUTE_CONTEXT_MENU: 'contribute context menu', - CONTEXT_MENU_ITEM_CLICKED: 'context menu item clicked' + CONTEXT_MENU_ITEM_CLICKED: 'context menu item clicked', + TRACE_MODEL_UPDATED: 'trace model updated' }; export class SignalManager extends EventEmitter implements SignalManager { @@ -193,6 +195,9 @@ export class SignalManager extends EventEmitter implements SignalManager { fireContextMenuItemClicked(payload: ContextMenuItemClickedSignalPayload): void { this.emit(Signals.CONTEXT_MENU_ITEM_CLICKED, payload); } + fireTraceContexModelUpdated(payload: { [key: string]: unknown }): void { + this.emit(Signals.TRACE_MODEL_UPDATED, payload); + } } let instance: SignalManager = new SignalManager(); diff --git a/packages/react-components/src/components/timegraph-output-component.tsx b/packages/react-components/src/components/timegraph-output-component.tsx index 0a959690..f91458cd 100644 --- a/packages/react-components/src/components/timegraph-output-component.tsx +++ b/packages/react-components/src/components/timegraph-output-component.tsx @@ -104,6 +104,8 @@ export class TimegraphOutputComponent extends AbstractTreeOutputComponent { @@ -1482,4 +1494,44 @@ export class TimegraphOutputComponent extends AbstractTreeOutputComponent => { + // handle item clicked payload and perform whatever function you need to based on the selection + // TODO: create generic API to execute command-handler for server driven actions + // For example, a pre-defined way to query additional query parameters that are passed to back-end calls (global filter) + + if (payload?.getItemId() === 'org.eclipse.tracecompass.follow.thread.id') { + const items: { id: number; parentId?: number; metadata?: { [key: string]: unknown } }[] = + payload.getProps()['selectedRows']; + const item = items[0].id; + const parameters = QueryHelper.selectionQuery([item]); + const tspClientResponse = await this.props.tspClient.fetchTimeGraphTreeContext( + this.props.traceId, + this.props.outputDescriptor.id, + parameters + ); + const model: { [key: string]: unknown } | undefined = tspClientResponse.getModel()?.model; + if (model) { + signalManager().fireTraceContexModelUpdated(model); + } + } + }; + + onModelUpdated = (model: { [key: string]: unknown }): void => { + // TODO add model as addtional parameters to back-end queries + this.additonalParameters = model; + }; } diff --git a/theia-extensions/viewer-prototype/src/browser/theia-rpc-tsp-proxy.ts b/theia-extensions/viewer-prototype/src/browser/theia-rpc-tsp-proxy.ts index 50a3d00d..8a6b22a0 100644 --- a/theia-extensions/viewer-prototype/src/browser/theia-rpc-tsp-proxy.ts +++ b/theia-extensions/viewer-prototype/src/browser/theia-rpc-tsp-proxy.ts @@ -219,6 +219,23 @@ export class TheiaRpcTspProxy implements ITspClient { ); } + /** + * Fetch Time Graph tree, Model is a key-value map + * @param expUUID Experiment UUID + * @param outputID Output ID + * @param parameters Query object + * @returns Time graph entry response with model is a key-value map + */ + public async fetchTimeGraphTreeContext( + expUUID: string, + outputID: string, + parameters: Query + ): Promise>> { + return this.toTspClientResponse>( + await this.tspClient.fetchTimeGraphTreeContext(expUUID, outputID, parameters) + ); + } + /** * Fetch Time Graph states. Model extends TimeGraphModel * @param expUUID Experiment UUID