index.jsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import React, { useState, useCallback, useMemo } from 'react';
  2. import { format } from 'date-fns';
  3. import { IconClose, IconChevronDown } from '@douyinfe/semi-icons';
  4. import { DatePicker, Button } from '../../../index';
  5. Demo.parameters = {
  6. chromatic: { disableSnapshot: true },
  7. };
  8. export default function Demo() {
  9. const [date, setDate] = useState(new Date());
  10. const formatToken = 'yyyy-MM-dd';
  11. const onChange = useCallback((dateStr, date) => {
  12. setDate(date);
  13. }, []);
  14. const onClear = useCallback(e => {
  15. e && e.stopPropagation();
  16. setDate(null);
  17. }, []);
  18. const closeIcon = useMemo(() => (date ? <IconClose onClick={onClear} /> : <IconChevronDown />), [date]);
  19. return (
  20. <DatePicker
  21. onChange={onChange}
  22. value={date}
  23. format={formatToken}
  24. triggerRender={({ value, placeholder }) => (
  25. <Button theme={'light'} icon={closeIcon} iconPosition={'right'}>
  26. {(date && format(date, formatToken)) || placeholder}
  27. </Button>
  28. )}
  29. />
  30. );
  31. }