import { assertGroup } from '@h5web/shared';
import { isEqual } from 'lodash';
import DimensionMapper from '../../../dimension-mapper/DimensionMapper';
import { useDimMappingState } from '../../../dimension-mapper/hooks';
import VisBoundary from '../../VisBoundary';
import MappedLineVis from '../../core/line/MappedLineVis';
import { useLineConfig } from '../../core/line/config';
import { getSliceSelection } from '../../core/utils';
import type { VisContainerProps } from '../../models';
import NxValuesFetcher from '../NxValuesFetcher';
import { assertNumericNxData } from '../guards';
import { useNxData } from '../hooks';
function NxSpectrumContainer(props: VisContainerProps) {
const { entity, toolbarContainer } = props;
assertGroup(entity);
const nxData = useNxData(entity);
assertNumericNxData(nxData);
const { signalDef, axisDefs, auxDefs, silxStyle } = nxData;
const signalDims = signalDef.dataset.shape;
const errorDims = signalDef.errorDataset?.shape;
if (errorDims && !isEqual(signalDims, errorDims)) {
const dimsStr = JSON.stringify({ signalDims, errorsDims: errorDims });
throw new Error(`Signal and errors dimensions don't match: ${dimsStr}`);
}
const [dimMapping, setDimMapping] = useDimMappingState(signalDims, 1);
const xDimIndex = dimMapping.indexOf('x');
const config = useLineConfig({
xScaleType: silxStyle.axisScaleTypes?.[xDimIndex],
yScaleType: silxStyle.signalScaleType,
});
const { autoScale } = config;
const selection = autoScale ? getSliceSelection(dimMapping) : undefined;
return (
<>
{
const { signal, errors, axisValues, auxValues, auxErrors, title } =
nxValues;
return (
def?.label)}
auxValues={auxValues}
auxErrors={auxErrors}
dims={signalDims}
dimMapping={dimMapping}
axisLabels={axisDefs.map((def) => def?.label)}
axisValues={axisValues}
title={title}
toolbarContainer={toolbarContainer}
config={config}
/>
);
}}
/>
>
);
}
export default NxSpectrumContainer;