quickControl.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React, { PureComponent } from 'react';
  2. import classNames from 'classnames';
  3. import PropTypes from 'prop-types';
  4. import { cssClasses } from '@douyinfe/semi-foundation/datePicker/constants';
  5. import Button from '../button/index';
  6. import { noop } from '@douyinfe/semi-foundation/utils/function';
  7. import { PresetsType, PresetType } from '@douyinfe/semi-foundation/datePicker/foundation';
  8. const prefixCls = cssClasses.PREFIX;
  9. export interface QuickControlProps {
  10. presets: PresetsType;
  11. onPresetClick: (preset: PresetType, e: React.MouseEvent) => void;
  12. type: string;
  13. }
  14. class QuickControl extends PureComponent<QuickControlProps> {
  15. static propTypes = {
  16. presets: PropTypes.array,
  17. onPresetClick: PropTypes.func,
  18. type: PropTypes.string
  19. };
  20. static defaultProps = {
  21. presets: [] as PresetsType,
  22. onPresetClick: noop,
  23. };
  24. render() {
  25. const { presets, onPresetClick, type } = this.props;
  26. const wrapperCls = classNames(`${prefixCls}-quick-control`, {
  27. [`${prefixCls}-quick-control-${type}`]: type
  28. });
  29. const itemCls = classNames(`${prefixCls}-quick-control-item`);
  30. if (!presets.length) {
  31. return null;
  32. }
  33. return (
  34. <div className={wrapperCls}>
  35. {presets.map((item, index) => {
  36. const _item: PresetType = typeof item === 'function' ? item() : item;
  37. return (
  38. <div className={itemCls} onClick={e => onPresetClick(_item, e)} key={index}>
  39. <Button size="small" theme="borderless" type="primary">
  40. <span>{_item.text}</span>
  41. </Button>
  42. </div>
  43. );
  44. })}
  45. </div>
  46. );
  47. }
  48. }
  49. export default QuickControl;