You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.1 KiB
38 lines
1.1 KiB
import { Button, Drawer, DrawerProps } from 'antd'
|
|
import React, { useState } from 'react'
|
|
import { useStyle } from './style'
|
|
import { generateUUID } from '@/utils/uuid.ts'
|
|
|
|
export interface DrawerPickerProps extends DrawerProps {
|
|
target?: React.ReactNode
|
|
children?: React.ReactNode
|
|
key?: string
|
|
}
|
|
|
|
const DrawerPicker = ({ children, target, ...props }: DrawerPickerProps) => {
|
|
|
|
const { styles } = useStyle()
|
|
|
|
const [ open, setOpen ] = useState(false)
|
|
|
|
const getTarget = () => {
|
|
const def = <Button>{props.title ?? 'Target'}</Button>
|
|
return <span className={styles.target}>{target ?? def}</span>
|
|
}
|
|
|
|
return (
|
|
<div className={styles.container} key={props.key ?? generateUUID()}>
|
|
<span className={styles.target} onClick={() => {
|
|
setOpen(true)
|
|
}}>
|
|
{getTarget()}
|
|
</span>
|
|
<Drawer {...props}
|
|
open={open}
|
|
onClose={() => setOpen(false)}
|
|
>{children}</Drawer>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default DrawerPicker
|