Skip to content

Commit 43b21cd

Browse files
committed
Added graph toggle
1 parent a5cf2cf commit 43b21cd

File tree

3 files changed

+45
-28
lines changed

3 files changed

+45
-28
lines changed

packages/collaboration/src/activitybargraph.tsx

+9-12
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@ import { Notebook, NotebookPanel } from '@jupyterlab/notebook';
33
import * as React from 'react';
44
import Plot from 'react-plotly.js';
55

6-
import { ActivityDisplayComponentProps } from './activitydisplay';
7-
import { Role } from './roles';
6+
import { GraphProps } from './activitydisplay';
87

9-
export const ActivityBarGraph: React.FC<ActivityDisplayComponentProps> = ({tracker, currentUser, userRoles}) => {
10-
11-
const user = currentUser;
12-
const roles = userRoles;
8+
export const ActivityBarGraph: React.FC<GraphProps> = ({tracker}) => {
139

1410
const [state, setState] = React.useState<number[]>([]);
1511

12+
const MIN_HORIZONTAL_RANGE = 20;
13+
1614
React.useEffect(() => {
1715

1816
const updateCounts = (notebook: Notebook) => {
@@ -52,6 +50,8 @@ export const ActivityBarGraph: React.FC<ActivityDisplayComponentProps> = ({track
5250
}
5351

5452
}, [tracker]);
53+
54+
const maxXvalue = Math.max(Math.max(...state), MIN_HORIZONTAL_RANGE);
5555

5656
const data = [{
5757
y: state.map((_, index) => index + 1),
@@ -66,7 +66,8 @@ export const ActivityBarGraph: React.FC<ActivityDisplayComponentProps> = ({track
6666
width: 300,
6767
height: 500,
6868
xaxis: {
69-
title: 'Active users'
69+
title: 'Active users',
70+
range: [0, maxXvalue]
7071
},
7172
yaxis: {
7273
title: 'Cell',
@@ -80,10 +81,6 @@ export const ActivityBarGraph: React.FC<ActivityDisplayComponentProps> = ({track
8081
}
8182
};
8283

83-
return <div>
84-
{roles.get(user.identity!.username) === Role.Owner && (
85-
<Plot className='jp-graph' data={data} layout={layout}/>
86-
)}
87-
</div>
84+
return <Plot className='jp-graph' data={data} layout={layout}/>
8885

8986
}

packages/collaboration/src/activitydisplay.tsx

+31-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { User } from '@jupyterlab/services';
44

55
import * as React from 'react';
66

7-
// import { ActivityBarGraph } from './activitybargraph';
7+
import { ActivityBarGraph } from './activitybargraph';
88
import { ActivityDotPlot } from './activitydotplot';
9-
import { Roles } from './roles';
9+
import { Role, Roles } from './roles';
1010

1111
export interface ActivityDisplayComponentProps {
1212

@@ -16,6 +16,12 @@ export interface ActivityDisplayComponentProps {
1616

1717
}
1818

19+
export interface GraphProps {
20+
21+
tracker: INotebookTracker
22+
23+
}
24+
1925
export class ActivityDisplay extends ReactWidget {
2026

2127
private _tracker: INotebookTracker
@@ -33,7 +39,29 @@ export class ActivityDisplay extends ReactWidget {
3339
}
3440

3541
render() {
36-
return <ActivityDotPlot tracker={this._tracker} currentUser={this._currentUser} userRoles={this._roles}/>
42+
return <ActivityDisplayComponent tracker={this._tracker} currentUser={this._currentUser} userRoles={this._roles}/>
3743
}
3844

3945
}
46+
47+
const ActivityDisplayComponent: React.FC<ActivityDisplayComponentProps> = ({tracker, currentUser, userRoles}) => {
48+
49+
const [showBarGraph, setShowBarGraph] = React.useState(true);
50+
51+
const switchGraph = () => {setShowBarGraph(prev => !prev)};
52+
53+
const barGraph = ActivityBarGraph({tracker});
54+
const dotPlot = ActivityDotPlot({tracker});
55+
56+
return <div>
57+
{userRoles.get(currentUser.identity!.username) === Role.Owner && (
58+
<div>
59+
<button onClick={switchGraph} style={{marginTop: '3px', marginLeft: '3px'}}>
60+
{showBarGraph ? 'Switch to Dot Plot' : 'Switch to Bar Graph'}
61+
</button>
62+
{showBarGraph ? barGraph : dotPlot}
63+
</div>
64+
)}
65+
</div>
66+
67+
}

packages/collaboration/src/activitydotplot.tsx

+5-13
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@ import { Notebook, NotebookPanel } from '@jupyterlab/notebook';
33
import * as React from 'react';
44
import Plot from 'react-plotly.js';
55

6-
import { ActivityDisplayComponentProps } from './activitydisplay';
6+
import { GraphProps } from './activitydisplay';
77
import { SimpleUser } from './cellTracker';
8-
import { Role } from './roles';
98

10-
export const ActivityDotPlot: React.FC<ActivityDisplayComponentProps> = ({tracker, currentUser, userRoles}) => {
11-
12-
const user = currentUser;
13-
const roles = userRoles;
9+
export const ActivityDotPlot: React.FC<GraphProps> = ({tracker}) => {
1410

1511
const [state, setState] = React.useState<SimpleUser[][]>([]);
1612

@@ -63,14 +59,14 @@ export const ActivityDotPlot: React.FC<ActivityDisplayComponentProps> = ({tracke
6359
userArray.forEach((user, userIndex) => {
6460
yValues.push(-cellIndex - 1);
6561
xValues.push(userIndex + 1);
66-
hoverText.push(`${user.name} on cell ${cellIndex}`);
62+
hoverText.push(`${user.name} on cell ${cellIndex + 1}`);
6763
});
6864

6965
});
7066

7167
const maxCellIndex = state.length > 0 ? state.length - 1 : 0
7268
const tickvals = Array.from(Array(maxCellIndex + 2).keys()).map(index => -index);
73-
const ticktext = Array.from(Array(maxCellIndex + 2).keys()).map(index => (index - 1).toString());
69+
const ticktext = Array.from(Array(maxCellIndex + 2).keys()).map(index => (index).toString());
7470
const maxXvalue = Math.max(...xValues, MIN_HORIZONTAL_RANGE);
7571

7672
const data = [{
@@ -106,10 +102,6 @@ export const ActivityDotPlot: React.FC<ActivityDisplayComponentProps> = ({tracke
106102
}
107103
};
108104

109-
return <div>
110-
{roles.get(user.identity!.username) === Role.Owner && (
111-
<Plot className='jp-graph' data={data} layout={layout}/>
112-
)}
113-
</div>
105+
return <Plot className='jp-graph' data={data} layout={layout}/>
114106

115107
}

0 commit comments

Comments
 (0)