Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions client/component/src/AxisConfigModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ interface AxisConfigModalProps<S extends ScaleType> {
domain?: Domain;
/** The custom domain for the axis (optional) */
customDomain?: CustomDomain;
/** Histogram params */
histogram?: HistogramParams;
/** Histogram params getter */
histogramGetter?: () => HistogramParams;
/** The function to call when the custom domain is updated (optional) */
setCustomDomain?: (value: CustomDomain) => void;
/** Point size for scatter plot (optional) */
Expand Down Expand Up @@ -106,15 +106,15 @@ function AxisConfigModal<S extends ScaleType>(
);

const domainSelector = props.domain &&
props.histogram &&
props.histogramGetter &&
props.customDomain &&
props.setCustomDomain && (
<DomainConfig
dataDomain={props.domain}
customDomain={props.customDomain}
scaleType={props.scaleType as ColorScaleType | undefined}
onCustomDomainChange={props.setCustomDomain}
histogram={props.histogram}
histogramGetter={props.histogramGetter}
/>
);

Expand Down
9 changes: 7 additions & 2 deletions client/component/src/DomainConfig.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ interface DomainConfigProps {
/** Handles custom domain change */
onCustomDomainChange: (domain: CustomDomain) => void;
/** Histogram params */
histogram?: HistogramParams;
histogramGetter?: () => HistogramParams;
}

/**
Expand All @@ -83,11 +83,16 @@ interface DomainConfigProps {
*/
function DomainConfig(props: DomainConfigProps) {
const { dataDomain, customDomain, scaleType } = props;
const { onCustomDomainChange, histogram } = props;
const { onCustomDomainChange, histogramGetter } = props;
const [lockDomain, setLockDomain] = useState<boolean>(false);

const visDomain = useVisDomain(customDomain, dataDomain);

const histogram = useMemo(
Comment thread
PeterC-DLS marked this conversation as resolved.
() => histogramGetter && histogramGetter(),
[histogramGetter]
);

const memoizedCustomDomain = useMemo(() => {
if (lockDomain) {
return customDomain;
Expand Down
23 changes: 7 additions & 16 deletions client/component/src/HeatmapPlot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from '@h5web/lib';

import {
calculateHistogramCounts,
createHistogramParams,
createInteractionsConfig,
InteractionModeType,
} from './utils';
Expand All @@ -20,7 +20,7 @@ import {
usePlotCustomizationContext,
} from './PlotCustomizationContext';
import { AnyToolbar } from './PlotToolbar';
import { useEffect, useMemo } from 'react';
import { useEffect } from 'react';

interface Props {
xValues?: NDT;
Expand All @@ -47,24 +47,15 @@ export function HeatmapVisCanvas({ xValues, yValues, values }: Props) {
colourMap,
invertColourMap,
dScaleType,
setHistogram,
updateHistogramGetter,
} = usePlotCustomizationContext();
const interactionsConfig = createInteractionsConfig(mode);

const histogram = useMemo(
() => calculateHistogramCounts(values.data, dDomain),
[dDomain, values]
);

useEffect(() => {
if (histogram) {
setHistogram({
...histogram,
colorMap: colourMap,
invertColorMap: invertColourMap,
});
}
}, [colourMap, invertColourMap, histogram, setHistogram]);
const hg = () =>
createHistogramParams(values.data, dDomain, colourMap, invertColourMap);
updateHistogramGetter(hg);
}, [values.data, dDomain, colourMap, invertColourMap, updateHistogramGetter]);

return (
<HeatmapVis
Expand Down
24 changes: 16 additions & 8 deletions client/component/src/PlotCustomizationContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,11 @@ export interface PlotCustomizationContextValue {
showPoints: boolean;
/** A function that toggles the points */
toggleShowPoints: () => void;
/** Histogram params */
histogram?: HistogramParams;
/** Set heatmap histogram */
setHistogram: (histogram: HistogramParams) => void;
/** Get heatmap histogram */
histogramGetter?: () => HistogramParams;
/** Update heatmap histogram getter */
updateHistogramGetter: (getter: () => HistogramParams) => void;

/** Can select */
canSelect: boolean;
/** Type of plot */
Expand Down Expand Up @@ -213,9 +214,15 @@ export function PlotCustomizationContextProvider(
new Map()
);
const [currentLineKey, setCurrentLineKey] = useState<string | null>(null);
const [histogram, setHistogram] = useState<HistogramParams>();
const [histogramGetter, setHistogramGetter] =
useState<() => HistogramParams>();
const [scatterPointSize, setScatterPointSize] = useState<number>(10);

const updateHistogramGetter = useCallback(
(g: () => HistogramParams) => setHistogramGetter(() => g),
[setHistogramGetter]
);

useEffect(() => {
if (props.plotConfig.title) setTitle(props.plotConfig.title);
}, [props.plotConfig.title, setTitle]);
Expand Down Expand Up @@ -370,7 +377,8 @@ export function PlotCustomizationContextProvider(
selectionMax,
selectionType,
setSelectionType: newSetSelectionType,
setHistogram,
histogramGetter,
updateHistogramGetter,
selections,
setSelections,
updateSelection: newUpdateSelection,
Expand All @@ -387,7 +395,6 @@ export function PlotCustomizationContextProvider(
setColourMap,
invertColourMap,
toggleInvertColourMap,
histogram,
scatterPointSize,
setScatterPointSize,
showPoints,
Expand All @@ -405,7 +412,8 @@ export function PlotCustomizationContextProvider(
dCustomDomain,
dDomain,
dScaleType,
histogram,
histogramGetter,
updateHistogramGetter,
invertColourMap,
mode,
newUpdateSelection,
Expand Down
2 changes: 1 addition & 1 deletion client/component/src/PlotToolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ function PlotToolbar(props: PropsWithChildren): JSX.Element {
domain: value.dDomain,
customDomain: value.dCustomDomain,
setCustomDomain: value.setDCustomDomain,
histogram: value.histogram,
histogramGetter: value.histogramGetter,
scatterPointSize: isScatter ? value.scatterPointSize : undefined,
setScatterPointSize: value.setScatterPointSize,
hasBaton,
Expand Down
23 changes: 7 additions & 16 deletions client/component/src/ScatterPlot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {

import SelectionComponent from './SelectionComponent';
import {
calculateHistogramCounts,
createHistogramParams,
createInteractionsConfig,
InteractionModeType,
} from './utils';
Expand All @@ -18,7 +18,7 @@ import {
usePlotCustomizationContext,
} from './PlotCustomizationContext';
import { AnyToolbar } from './PlotToolbar';
import { useEffect, useMemo } from 'react';
import { useEffect } from 'react';

interface Props {
x: NDT;
Expand Down Expand Up @@ -47,24 +47,15 @@ export function ScatterVisCanvas({ x, y, values }: Props) {
invertColourMap,
dScaleType,
scatterPointSize,
setHistogram,
updateHistogramGetter,
} = usePlotCustomizationContext();
const interactionsConfig = createInteractionsConfig(mode);

const histogram = useMemo(
() => calculateHistogramCounts(values.data, dDomain),
[dDomain, values]
);

useEffect(() => {
if (histogram) {
setHistogram({
...histogram,
colorMap: colourMap,
invertColorMap: invertColourMap,
});
}
}, [colourMap, invertColourMap, histogram, setHistogram]);
const hg = () =>
createHistogramParams(values.data, dDomain, colourMap, invertColourMap);
updateHistogramGetter(hg);
}, [values.data, dDomain, colourMap, invertColourMap, updateHistogramGetter]);

return (
<ScatterVis
Expand Down
20 changes: 6 additions & 14 deletions client/component/src/SurfacePlot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from './PlotCustomizationContext';
import { AnyToolbar } from './PlotToolbar';
import { PropsWithChildren, useEffect, useMemo } from 'react';
import { calculateHistogramCounts } from './utils';
import { createHistogramParams } from './utils';

interface Props {
values: NDT;
Expand All @@ -30,7 +30,7 @@ export function SurfaceVisCanvas(props: PropsWithChildren<Props>) {
invertColourMap,
dScaleType,
showPoints,
setHistogram,
updateHistogramGetter,
} = usePlotCustomizationContext();

const visDomain = useMemo(
Expand All @@ -39,18 +39,10 @@ export function SurfaceVisCanvas(props: PropsWithChildren<Props>) {
);

useEffect(() => {
const histogram = calculateHistogramCounts(values.data, dDomain);

if (histogram) {
console.log('Set histogram:', histogram, colourMap, invertColourMap);

setHistogram({
...histogram,
colorMap: colourMap,
invertColorMap: invertColourMap,
});
}
}, [dDomain, values, colourMap, invertColourMap, setHistogram]);
const hg = () =>
createHistogramParams(values.data, dDomain, colourMap, invertColourMap);
updateHistogramGetter(hg);
}, [values.data, dDomain, colourMap, invertColourMap, updateHistogramGetter]);

return (
<SurfaceVis
Expand Down
23 changes: 23 additions & 0 deletions client/component/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import type {
ColorScaleType,
DefaultInteractionsConfig,
Domain,
HistogramParams,
PanProps,
SelectToZoomProps,
XAxisZoomProps,
Expand Down Expand Up @@ -545,6 +546,27 @@ function calculateHistogramCounts(
return undefined;
}

/**
* Create histogram parameters
* @param data
* @param domain
* @param colorMap
* @param invertColorMap
* @returns histogram parameters
*/
function createHistogramParams(
data: TypedArray,
domain: Domain,
colorMap: ColorMap,
invertColorMap: boolean
) {
const histogram = calculateHistogramCounts(data, domain);
return { ...histogram, colorMap, invertColorMap } as HistogramParams;
}

/**
* Measure time of interaction
*/
function measureInteraction() {
const startTimestamp = performance.now();
return {
Expand Down Expand Up @@ -573,6 +595,7 @@ export {
createSurfaceData,
createTableData,
calculateHistogramCounts,
createHistogramParams,
createInteractionsConfig,
getAspectType,
InteractionModeType,
Expand Down