Skip to content

Commit cfa96e5

Browse files
hide axis and invert added to menu
1 parent 9261639 commit cfa96e5

3 files changed

Lines changed: 42 additions & 2 deletions

File tree

src/component.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ export class HiPlot extends React.Component<HiPlotProps, HiPlotState> {
331331

332332
// Setup contextmenu when we right-click a parameter
333333
this.contextMenuRef.current.addCallback(this.columnContextMenu.bind(this), this);
334+
this.contextMenuRef.current.addCallback(this.columnContextMenuFooter.bind(this), this, "last");
334335

335336
// Load experiment provided in constructor if any
336337
if (this.props.experiment) {
@@ -452,6 +453,31 @@ export class HiPlot extends React.Component<HiPlotProps, HiPlotState> {
452453
link_colorize.addClass('disabled').css('pointer-events', 'none');
453454
}
454455
contextmenu.append(link_colorize);
456+
457+
}
458+
columnContextMenuFooter(column: string, cm: HTMLDivElement) {
459+
var contextmenu = $(cm);
460+
const ppRef = this.plugins_ref[DefaultPlugins.PARALLEL_PLOT];
461+
const pp = ppRef && ppRef.current ? ppRef.current as unknown as ParallelPlot : null;
462+
contextmenu.append($('<div class="dropdown-divider"></div>'));
463+
464+
if (pp && pp.can_hide_axis && pp.can_hide_axis(column)) {
465+
var hide_axis = $('<a class="dropdown-item" href="#">Hide axis</a>');
466+
hide_axis.click(function(this: HiPlot, event) {
467+
if (pp.remove_axis) {
468+
pp.remove_axis(column);
469+
}
470+
event.preventDefault();
471+
}.bind(this));
472+
contextmenu.append(hide_axis);
473+
}
474+
475+
var close_menu = $('<a class="dropdown-item" href="#">Close menu</a>');
476+
close_menu.click(function(this: HiPlot, event) {
477+
this.contextMenuRef.current.hide();
478+
event.preventDefault();
479+
}.bind(this));
480+
contextmenu.append(close_menu);
455481
}
456482
createNewParamsDef(rows_filtered: Array<Datapoint>): ParamDefMap {
457483
var new_pd = Object.assign({}, this.state.params_def);

src/contextmenu.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ interface ContextMenuState {
2323
export class ContextMenu extends React.Component<ContextMenuProps, ContextMenuState> {
2424
context_menu_div: React.RefObject<HTMLDivElement> = React.createRef();
2525
trigger_callbacks: Array<{cb: (column: string, element: HTMLDivElement) => void, obj: any}> = [];
26+
trigger_callbacks_last: Array<{cb: (column: string, element: HTMLDivElement) => void, obj: any}> = [];
2627
hide: any;
2728
constructor(props: ContextMenuProps) {
2829
super(props);
@@ -39,11 +40,16 @@ export class ContextMenu extends React.Component<ContextMenuProps, ContextMenuSt
3940
}.bind(this);
4041
$(window).on("click", this.hide);
4142
}
42-
addCallback(fn: (column: string, element: HTMLDivElement) => void, obj: any) {
43-
this.trigger_callbacks.push({cb: fn, obj: obj});
43+
addCallback(fn: (column: string, element: HTMLDivElement) => void, obj: any, priority: "normal" | "last" = "normal") {
44+
if (priority === "last") {
45+
this.trigger_callbacks_last.push({cb: fn, obj: obj});
46+
} else {
47+
this.trigger_callbacks.push({cb: fn, obj: obj});
48+
}
4449
}
4550
removeCallbacks(obj: any) {
4651
this.trigger_callbacks = this.trigger_callbacks.filter(trigger => trigger.obj != obj);
52+
this.trigger_callbacks_last = this.trigger_callbacks_last.filter(trigger => trigger.obj != obj);
4753
}
4854
show(pageX: number, pageY: number, column: string) {
4955
// This assumes parent has `relative` positioning
@@ -77,6 +83,9 @@ export class ContextMenu extends React.Component<ContextMenuProps, ContextMenuSt
7783
this.trigger_callbacks.forEach(function(trigger) {
7884
trigger.cb(me.state.column, cm);
7985
});
86+
this.trigger_callbacks_last.forEach(function(trigger) {
87+
trigger.cb(me.state.column, cm);
88+
});
8089
// After content is added, check if menu overflows viewport and reposition if needed
8190
requestAnimationFrame(() => {
8291
const rect = cm.getBoundingClientRect();

src/parallel/parallel.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@ export class ParallelPlot extends React.Component<ParallelPlotData, ParallelPlot
500500
.attr("text-anchor", "left")
501501
.classed("pplot-label", true)
502502
.classed("label-name", true)
503+
.classed(style.label, true)
503504
.classed(style.axisLabelText, true)
504505
.classed(style.pplotLabel, true)
505506
.each(function(dim) {
@@ -965,6 +966,10 @@ export class ParallelPlot extends React.Component<ParallelPlotData, ParallelPlot
965966
getRestorableColumnsCount(): number {
966967
return Array.from(this.state.hide).filter(d => this.can_restore_axis(d)).length;
967968
}
969+
970+
can_hide_axis(d: string): boolean {
971+
return this.state.dimensions.indexOf(d) !== -1;
972+
}
968973
path = function(this: ParallelPlot, d: Datapoint, ctx: CanvasRenderingContext2D, color?: string) {
969974
if (color) ctx.strokeStyle = color;
970975
var has_started = false;

0 commit comments

Comments
 (0)