-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathHorizontalAxis1D.tsx
More file actions
70 lines (62 loc) · 2.09 KB
/
HorizontalAxis1D.tsx
File metadata and controls
70 lines (62 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { useMemo, useRef } from 'react';
import { useLinearPrimaryTicks } from 'react-d3-utils';
import { AxisUnitPicker } from '../1d-2d/components/axis_unit_picker.tsx';
import { useChartData } from '../context/ChartContext.js';
import { useScaleChecked } from '../context/ScaleContext.js';
import { D3Axis } from '../elements/D3Axis.js';
import { useCheckExportStatus } from '../hooks/useViewportSize.js';
import {
axisUnitToLabel,
useHorizontalAxisUnit,
} from '../hooks/use_axis_unit.ts';
import { useGridline1DConfig } from '../hooks/use_gridlines_config.ts';
import { useIsInset } from './inset/InsetProvider.js';
export function HorizontalAxis1D() {
const { height, width, margin } = useChartData();
const { scaleX } = useScaleChecked();
const isInset = useIsInset();
const isExportingProcessStart = useCheckExportStatus();
const { unit, allowedUnits, setUnit } = useHorizontalAxisUnit();
const unitLabel = axisUnitToLabel[unit];
const refAxis = useRef<SVGGElement>(null);
const scaler = useMemo(() => {
// TODO apply unit conversion
return scaleX(null);
}, [scaleX]);
const { ticks, scale: ticksScale } = useLinearPrimaryTicks(
scaler,
'horizontal',
refAxis,
);
const gridConfig = useGridline1DConfig();
if (!width || !height) {
return null;
}
return (
<D3Axis
ref={refAxis}
transform={`translate(0,${height - margin.bottom})`}
scale={ticksScale}
axisPosition="bottom"
gridSize={height - margin.top - margin.bottom}
ticks={ticks}
showGrid={!isExportingProcessStart && !isInset}
showPrimaryGrid={gridConfig.primary.enabled}
showSecondaryGrid={gridConfig.secondary.enabled}
primaryGridProps={gridConfig.primary.lineStyle}
secondaryGridProps={gridConfig.secondary.lineStyle}
>
{!isInset && (
<AxisUnitPicker
unit={unit}
allowedUnits={allowedUnits}
onChange={setUnit}
>
<text fill="#000" x={width - 10} y="30" dy="0.70em" textAnchor="end">
{unitLabel}
</text>
</AxisUnitPicker>
)}
</D3Axis>
);
}