import React, { useState, useCallback, useMemo, memo } from 'react'; import type { ViewStyle, LayoutChangeEvent, DimensionValue, } from 'react-native'; import { View, useWindowDimensions } from 'react-native'; import { Line, Svg } from 'react-native-svg'; import Theme from '../theme'; import type { DividerLineProps } from './interface'; import { varCreator } from './style'; /** * 分割线 */ const DividerLineDashed: React.FC = ({ color, position, adaptive = true, direction = 'horizontal', }) => { const isVertical = direction === 'vertical'; const { width } = useWindowDimensions(); const TOKENS = Theme.useThemeTokens(); const VC = Theme.createVar(TOKENS, varCreator); const [size, setSize] = useState( isVertical ? VC.divider_vertical_min_height : width ); const viewStyle = useMemo(() => { if (isVertical) { return { flex: 1, width: 1, transform: [{ scaleX: 0.5 }], height: '100%' as DimensionValue, }; } const s: ViewStyle = { flex: 1, maxWidth: 'auto', height: 1, transform: [{ scaleY: 0.5 }], }; if (position === 'left') { s.marginRight = VC.divider_margin_horizontal; } if (position === 'right') { s.marginLeft = VC.divider_margin_horizontal; } if (!adaptive) { s.maxWidth = ( position === 'left' ? VC.divider_content_left_width : VC.divider_content_right_width ) as DimensionValue; } return s; }, [ isVertical, position, adaptive, VC.divider_margin_horizontal, VC.divider_content_left_width, VC.divider_content_right_width, ]); const onLayout = useCallback( (e: LayoutChangeEvent) => { setSize(e.nativeEvent.layout[isVertical ? 'height' : 'width']); }, [isVertical] ); return ( {isVertical ? ( ) : ( )} ); }; export default memo(DividerLineDashed);