import { createElement, forwardRef, HTMLAttributes, RefForwardingComponent, useContext } from 'rax'; import View from 'rax-view'; import Text from 'rax-text'; import Context from './context'; import { handleMarks, isInRange, unit } from './utils'; export interface TrackProps extends HTMLAttributes { min?: number; max?: number; ratio?: number[]; marks?: object; rangeWidth?: number; } const Track: RefForwardingComponent = ({ min, max, ratio, marks, rangeWidth }, ref) => { const { styles } = useContext(Context); const markItems = []; const labelItems = []; handleMarks(marks).forEach((key) => { const left = ((key - min) / (max - min)) * rangeWidth; const isActive = isInRange((key - min) / (max - min), ratio); markItems.push( ); labelItems.push( {marks[key]} ); }); const selectedLeft = ratio.length === 2 ? ratio[0] * rangeWidth : 0; const width = ratio.length === 2 ? Math.abs(ratio[1] - ratio[0]) * rangeWidth : ratio[0] * rangeWidth; return ( {markItems} {labelItems} ); }; export default forwardRef(Track);