import { MatrixVis } from '@h5web/lib'; import type { ArrayShape, ArrayValue, Dataset, PrintableType, } from '@h5web/shared'; import { createPortal } from 'react-dom'; import type { DimensionMapping } from '../../../dimension-mapper/models'; import { useDataContext } from '../../../providers/DataProvider'; import { useMappedArray, useSlicedDimsAndMapping } from '../hooks'; import { getSliceSelection } from '../utils'; import MatrixToolbar from './MatrixToolbar'; import type { MatrixVisConfig } from './config'; import { getCellWidth, getFormatter } from './utils'; interface Props { dataset: Dataset; value: ArrayValue; dimMapping: DimensionMapping; toolbarContainer: HTMLDivElement | undefined; config: MatrixVisConfig; } function MappedMatrixVis(props: Props) { const { dataset, value, dimMapping, toolbarContainer, config } = props; const { sticky, customCellWidth, notation } = config; const { shape: dims, type } = dataset; const [slicedDims, slicedMapping] = useSlicedDimsAndMapping(dims, dimMapping); const [mappedArray] = useMappedArray(value, slicedDims, slicedMapping); const formatter = getFormatter(type, notation); const cellWidth = getCellWidth(type); const { getExportURL } = useDataContext(); const selection = getSliceSelection(dimMapping); return ( <> {toolbarContainer && createPortal( getExportURL(dataset, selection, value, format)) } />, toolbarContainer )} ); } export default MappedMatrixVis;