| import { memo } from 'react' |
| import { useViewport } from 'reactflow' |
| import { useStore } from '../store' |
| import type { |
| HelpLineHorizontalPosition, |
| HelpLineVerticalPosition, |
| } from './types' |
|
|
| const HelpLineHorizontal = memo(({ |
| top, |
| left, |
| width, |
| }: HelpLineHorizontalPosition) => { |
| const { x, y, zoom } = useViewport() |
|
|
| return ( |
| <div |
| className='absolute h-[1px] bg-primary-300 z-[9]' |
| style={{ |
| top: top * zoom + y, |
| left: left * zoom + x, |
| width: width * zoom, |
| }} |
| /> |
| ) |
| }) |
| HelpLineHorizontal.displayName = 'HelpLineBase' |
|
|
| const HelpLineVertical = memo(({ |
| top, |
| left, |
| height, |
| }: HelpLineVerticalPosition) => { |
| const { x, y, zoom } = useViewport() |
|
|
| return ( |
| <div |
| className='absolute w-[1px] bg-primary-300 z-[9]' |
| style={{ |
| top: top * zoom + y, |
| left: left * zoom + x, |
| height: height * zoom, |
| }} |
| /> |
| ) |
| }) |
| HelpLineVertical.displayName = 'HelpLineVertical' |
|
|
| const HelpLine = () => { |
| const helpLineHorizontal = useStore(s => s.helpLineHorizontal) |
| const helpLineVertical = useStore(s => s.helpLineVertical) |
|
|
| if (!helpLineHorizontal && !helpLineVertical) |
| return null |
|
|
| return ( |
| <> |
| { |
| helpLineHorizontal && ( |
| <HelpLineHorizontal {...helpLineHorizontal} /> |
| ) |
| } |
| { |
| helpLineVertical && ( |
| <HelpLineVertical {...helpLineVertical} /> |
| ) |
| } |
| </> |
| ) |
| } |
|
|
| export default memo(HelpLine) |
|
|