perfetto-ui: Implement pinning for tracks
Change-Id: Iddd074a895d35005bf453b4eb60e88cf7770081f
diff --git a/ui/src/frontend/track_panel.ts b/ui/src/frontend/track_panel.ts
index d2e121d..ccf6041 100644
--- a/ui/src/frontend/track_panel.ts
+++ b/ui/src/frontend/track_panel.ts
@@ -14,7 +14,8 @@
import * as m from 'mithril';
-import {moveTrack} from '../common/actions';
+import {moveTrack, toggleTrackPinned} from '../common/actions';
+import {Action} from '../common/actions';
import {TrackState} from '../common/state';
import {globals} from './globals';
@@ -27,18 +28,26 @@
// If any uses can't be removed we should read this constant from CSS.
export const TRACK_SHELL_WIDTH = 300;
+function isPinned(id: string) {
+ return globals.state.pinnedTracks.indexOf(id) !== -1;
+}
+
const TrackShell = {
view({attrs}) {
return m(
'.track-shell',
m('h1', attrs.trackState.name),
- m(TrackMoveButton, {
- direction: 'up',
- trackId: attrs.trackState.id,
+ m(TrackButton, {
+ action: moveTrack(attrs.trackState.id, 'up'),
+ i: 'arrow_upward_alt',
}),
- m(TrackMoveButton, {
- direction: 'down',
- trackId: attrs.trackState.id,
+ m(TrackButton, {
+ action: moveTrack(attrs.trackState.id, 'down'),
+ i: 'arrow_downward_alt',
+ }),
+ m(TrackButton, {
+ action: toggleTrackPinned(attrs.trackState.id),
+ i: isPinned(attrs.trackState.id) ? 'star' : 'star_border',
}));
},
} as m.Component<{trackState: TrackState}>;
@@ -67,21 +76,20 @@
}
} as m.Component<{trackState: TrackState, track: Track}>;
-const TrackMoveButton = {
+const TrackButton = {
view({attrs}) {
return m(
- 'i.material-icons.track-move-icons',
+ 'i.material-icons.track-button',
{
- onclick: () =>
- globals.dispatch(moveTrack(attrs.trackId, attrs.direction)),
+ onclick: () => globals.dispatch(attrs.action),
},
- attrs.direction === 'up' ? 'arrow_upward_alt' : 'arrow_downward_alt');
+ attrs.i);
}
} as m.Component<{
- direction: 'up' | 'down',
- trackId: string,
+ action: Action,
+ i: string,
},
- {}>;
+ {}>;
interface TrackPanelAttrs {
id: string;