import { memo, useRef } from 'react'; import { useLinearPrimaryTicks } from 'react-d3-utils'; import { useChartData } from '../context/ChartContext.js'; import { D3Axis } from '../elements/D3Axis.js'; import { useActiveNucleusTab } from '../hooks/useActiveNucleusTab.js'; import { useTextMetrics } from '../hooks/useTextMetrics.js'; import { useScale2DY } from './utilities/scale.js'; const defaultMargin = { right: 50, top: 0, bottom: 0, left: 0 }; interface YAxisProps { margin?: { right: number; top: number; bottom: number; left: number; }; } function YAxis(props: YAxisProps) { const { margin: marginProps = defaultMargin } = props; const { width, height, margin } = useChartData(); const nucleusStr = useActiveNucleusTab(); const [, unit] = nucleusStr.split(','); const { getTextWidth } = useTextMetrics({ labelSize: 10 }); const scaleY = useScale2DY(); const refAxis = useRef(null); const { ticks, scale: ticksScale } = useLinearPrimaryTicks( scaleY, 'vertical', refAxis, ); if (!width || !height) { return null; } const label = /^[0-9]+[A-Z][a-z]?$/.test(unit) ? 'δ [ppm]' : unit; const labelHeight = getTextWidth(label); return ( {label} ); } export default memo(YAxis);