packages/react-settings-form/src/components/PositionInput/index.tsx (39 lines of code) (raw):

import React, { useState, useEffect } from 'react' import { usePrefix } from '@designable/react' import cls from 'classnames' import './styles.less' export interface IPositionInputProps { className?: string style?: React.CSSProperties value?: string onChange?: (value: string) => void } export const PositionInput: React.FC<IPositionInputProps> = (props) => { const prefix = usePrefix('position-input') const [current, setCurrent] = useState(props.value) useEffect(() => { if (!props.value) { setCurrent('center') } }, [props.value]) const createCellProps = (type: string) => ({ className: cls(prefix + '-cell', { active: current === type }), onClick() { setCurrent(type) props.onChange?.(type) }, }) return ( <div className={cls(prefix, props.className)} style={props.style}> <div className={prefix + '-row'}> <div {...createCellProps('top')}>┳</div> </div> <div className={prefix + '-row'}> <div {...createCellProps('left')}>┣</div> <div {...createCellProps('center')}>╋</div> <div {...createCellProps('right')}>┫</div> </div> <div className={prefix + '-row'}> <div {...createCellProps('bottom')}>┻</div> </div> </div> ) }