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.

37 lines
1.1 KiB

  1. import { Button, Drawer, DrawerProps } from 'antd'
  2. import React, { useState } from 'react'
  3. import { useStyle } from './style'
  4. import { generateUUID } from '@/utils/uuid.ts'
  5. export interface DrawerPickerProps extends DrawerProps {
  6. target?: React.ReactNode
  7. children?: React.ReactNode
  8. key?: string
  9. }
  10. const DrawerPicker = ({ children, target, ...props }: DrawerPickerProps) => {
  11. const { styles } = useStyle()
  12. const [ open, setOpen ] = useState(false)
  13. const getTarget = () => {
  14. const def = <Button>{props.title ?? 'Target'}</Button>
  15. return <span className={styles.target}>{target ?? def}</span>
  16. }
  17. return (
  18. <div className={styles.container} key={props.key ?? generateUUID()}>
  19. <span className={styles.target} onClick={() => {
  20. setOpen(true)
  21. }}>
  22. {getTarget()}
  23. </span>
  24. <Drawer {...props}
  25. open={open}
  26. onClose={() => setOpen(false)}
  27. >{children}</Drawer>
  28. </div>
  29. )
  30. }
  31. export default DrawerPicker