File tree Expand file tree Collapse file tree 8 files changed +76
-8
lines changed
__mocks__/@vscode/webview-ui-toolkit
src/experiments/components/table Expand file tree Collapse file tree 8 files changed +76
-8
lines changed Original file line number Diff line number Diff line change @@ -350,6 +350,15 @@ export class Experiments extends BaseRepository<TableData> {
350350 }
351351 }
352352
353+ private hideTableColumn ( path : string ) {
354+ this . toggleColumnStatus ( path )
355+ sendTelemetryEvent (
356+ EventName . VIEWS_EXPERIMENTS_TABLE_HIDE_COLUMN ,
357+ { path } ,
358+ undefined
359+ )
360+ }
361+
353362 private setupInitialData ( ) {
354363 const waitForInitialData = this . dispose . track (
355364 this . onDidChangeExperiments ( ( ) => {
@@ -407,6 +416,8 @@ export class Experiments extends BaseRepository<TableData> {
407416 )
408417 case MessageFromWebviewType . TOGGLE_EXPERIMENT :
409418 return this . setExperimentStatus ( message . payload )
419+ case MessageFromWebviewType . HIDE_EXPERIMENTS_TABLE_COLUMN :
420+ return this . hideTableColumn ( message . payload )
410421 case MessageFromWebviewType . SORT_COLUMN :
411422 return this . addColumnSort ( message . payload )
412423 case MessageFromWebviewType . REMOVE_COLUMN_SORT :
Original file line number Diff line number Diff line change @@ -36,6 +36,7 @@ export const EventName = Object.assign(
3636 'views.experimentTable.toggleStatus' ,
3737 VIEWS_EXPERIMENTS_TABLE_FOCUS_CHANGED :
3838 'views.experimentsTable.focusChanged' ,
39+ VIEWS_EXPERIMENTS_TABLE_HIDE_COLUMN : 'views.experimentsTable.columnHidden' ,
3940 VIEWS_EXPERIMENTS_TABLE_REMOVE_COLUMN_SORT :
4041 'views.experimentsTable.columnSortRemoved' ,
4142 VIEWS_EXPERIMENTS_TABLE_RESIZE_COLUMN :
@@ -187,6 +188,9 @@ export interface IEventNamePropertyMapping {
187188 }
188189 [ EventName . VIEWS_EXPERIMENTS_TABLE_CREATED ] : undefined
189190 [ EventName . VIEWS_EXPERIMENTS_TABLE_FOCUS_CHANGED ] : WebviewFocusChangedProperties
191+ [ EventName . VIEWS_EXPERIMENTS_TABLE_HIDE_COLUMN ] : {
192+ path : string
193+ }
190194
191195 [ EventName . VIEWS_PLOTS_CLOSED ] : undefined
192196 [ EventName . VIEWS_PLOTS_CREATED ] : undefined
Original file line number Diff line number Diff line change @@ -344,6 +344,30 @@ suite('Experiments Test Suite', () => {
344344 return { experiments, experimentsModel, mockExecuteCommand }
345345 }
346346
347+ it ( 'should be able to handle a message to hide a table column' , async ( ) => {
348+ const { experiments, columnsModel } = buildExperiments ( disposable )
349+
350+ const mockToggleStatus = stub ( columnsModel , 'toggleStatus' )
351+ const mockSendTelemetryEvent = stub ( Telemetry , 'sendTelemetryEvent' )
352+ const webview = await experiments . showWebview ( )
353+ const mockMessageReceived = getMessageReceivedEmitter ( webview )
354+ const mockColumnId = 'mock-column-id'
355+
356+ mockMessageReceived . fire ( {
357+ payload : mockColumnId ,
358+ type : MessageFromWebviewType . HIDE_EXPERIMENTS_TABLE_COLUMN
359+ } )
360+
361+ expect ( mockToggleStatus ) . to . be . calledOnce
362+ expect ( mockToggleStatus ) . to . be . calledWithExactly ( mockColumnId )
363+
364+ expect ( mockSendTelemetryEvent ) . to . be . calledWithExactly (
365+ EventName . VIEWS_EXPERIMENTS_TABLE_HIDE_COLUMN ,
366+ { path : mockColumnId } ,
367+ undefined
368+ )
369+ } )
370+
347371 it ( 'should be able to handle a message to apply an experiment to workspace' , async ( ) => {
348372 const { experiments, mockExecuteCommand } =
349373 setupExperimentsAndMockCommands ( )
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ import { CheckpointsModel } from '../../../experiments/checkpoints/model'
1919import { FileSystemData } from '../../../fileSystem/data'
2020import * as Watcher from '../../../fileSystem/watcher'
2121import { ExperimentsModel } from '../../../experiments/model'
22+ import { ColumnsModel } from '../../../experiments/columns/model'
2223
2324const hasCheckpoints = ( data : ExperimentsOutput ) => {
2425 const [ experimentsWithBaseline ] = Object . values ( omit ( data , 'workspace' ) )
@@ -73,6 +74,8 @@ export const buildExperiments = (
7374 cliExecutor,
7475 cliReader,
7576 cliRunner,
77+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
78+ columnsModel : ( experiments as any ) . columns as ColumnsModel ,
7679 experiments,
7780 // eslint-disable-next-line @typescript-eslint/no-explicit-any
7881 experimentsModel : ( experiments as any ) . experiments as ExperimentsModel ,
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ export enum MessageFromWebviewType {
2626 RESIZE_PLOTS = 'resize-plots' ,
2727 SORT_COLUMN = 'sort-column' ,
2828 TOGGLE_EXPERIMENT = 'toggle-experiment' ,
29+ HIDE_EXPERIMENTS_TABLE_COLUMN = 'hide-experiments-table-column' ,
2930 SELECT_EXPERIMENTS = 'select-experiments' ,
3031 SELECT_PLOTS = 'select-plots' ,
3132 TOGGLE_METRIC = 'toggle-metric' ,
@@ -62,6 +63,10 @@ export type MessageFromWebview =
6263 type : MessageFromWebviewType . TOGGLE_EXPERIMENT
6364 payload : string
6465 }
66+ | {
67+ type : MessageFromWebviewType . HIDE_EXPERIMENTS_TABLE_COLUMN
68+ payload : string
69+ }
6570 | {
6671 type : MessageFromWebviewType . APPLY_EXPERIMENT_TO_WORKSPACE
6772 payload : string
Original file line number Diff line number Diff line change @@ -12,3 +12,7 @@ export const VSCodeButton: React.FC<MockButtonProps> = ({
1212} : MockButtonProps ) => {
1313 return < button onClick = { onClick } > { children } </ button >
1414}
15+
16+ export const VSCodeDivider : React . FC = ( ) => {
17+ return < hr />
18+ }
Original file line number Diff line number Diff line change @@ -150,9 +150,9 @@ describe('Table', () => {
150150 fireEvent . contextMenu ( column , {
151151 bubbles : true
152152 } )
153- const columnMenu = await screen . findByRole ( 'menu' )
153+ const columnMenu = await screen . findAllByRole ( 'menu' )
154154
155- const sortOption = await within ( columnMenu ) . findByText ( optionLabel )
155+ const sortOption = await within ( columnMenu [ 0 ] ) . findByText ( optionLabel )
156156 fireEvent . click ( sortOption )
157157 }
158158
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ import React from 'react'
88import { HeaderGroup } from 'react-table'
99import cx from 'classnames'
1010import { MessageFromWebviewType } from 'dvc/src/webview/contract'
11+ import { VSCodeDivider } from '@vscode/webview-ui-toolkit/react'
1112import styles from './styles.module.scss'
1213import { SortOrder , SortPicker } from './SortPicker'
1314import { countUpperLevels , isFirstLevelHeader } from '../../util/columns'
@@ -19,6 +20,7 @@ import {
1920 OnDragStart ,
2021 OnDrop
2122} from '../../../shared/components/dragDrop/DragDropWorkbench'
23+ import { MessagesMenu } from '../../../shared/components/messagesMenu/MessagesMenu'
2224
2325export const ColumnDragHandle : React . FC < {
2426 disabled : boolean
@@ -206,12 +208,27 @@ export const TableHeader: React.FC<TableHeaderProps> = ({
206208 onDrop = { onDrop }
207209 menuDisabled = { ! isSortable }
208210 menuContent = {
209- < SortPicker
210- sortOrder = { sortOrder }
211- setSelectedOrder = { order => {
212- setColumnSort ( order )
213- } }
214- />
211+ < div >
212+ < SortPicker
213+ sortOrder = { sortOrder }
214+ setSelectedOrder = { order => {
215+ setColumnSort ( order )
216+ } }
217+ />
218+ < VSCodeDivider />
219+ < MessagesMenu
220+ options = { [
221+ {
222+ id : 'hide-column' ,
223+ label : 'Hide Column' ,
224+ message : {
225+ payload : column . id ,
226+ type : MessageFromWebviewType . HIDE_EXPERIMENTS_TABLE_COLUMN
227+ }
228+ }
229+ ] }
230+ />
231+ </ div >
215232 }
216233 />
217234 )
You can’t perform that action at this time.
0 commit comments