index.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { Component } from 'react';
  2. import './index.less';
  3. import { DatePicker } from 'antd';
  4. export default class extends Component {
  5. constructor(props) {
  6. super(props);
  7. this.state = { key: 0 };
  8. this.loading = false;
  9. }
  10. dateRender(date) {
  11. const { dateRender, checkRefresh } = this.props;
  12. if (!this.loading && checkRefresh) {
  13. if (checkRefresh(date, () => this.needRefresh())) {
  14. this.loading = true;
  15. }
  16. }
  17. if (dateRender) return dateRender(date);
  18. return <div className="ant-calendar-date">{date.get('date')}</div>;
  19. }
  20. needRefresh() {
  21. this.setState({ key: this.state.key + 1 });
  22. this.loading = false;
  23. setTimeout(() => {
  24. this.setState({ key: this.state.key + 1 });
  25. }, 1);
  26. }
  27. render() {
  28. const { show, hideInput, disabledDate, theme = '', value, onChange } = this.props;
  29. return (
  30. <div
  31. ref={ref => {
  32. if (!this.ref) {
  33. this.ref = ref;
  34. this.setState({ load: false });
  35. }
  36. }}
  37. className={`g-date-block ${hideInput ? 'hide-input' : ''}`}
  38. >
  39. <DatePicker
  40. open={show && this.ref}
  41. value={value}
  42. getCalendarContainer={() => this.ref.parentNode}
  43. dropdownClassName={`g-date ${theme} ${hideInput ? 'hide-input' : ''}`}
  44. disabledDate={disabledDate}
  45. dateRender={date => this.dateRender(date)}
  46. onChange={date => onChange(date)}
  47. />
  48. </div>
  49. );
  50. }
  51. }