index.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { EventObject } from '@douyinfe/semi-foundation/calendar/foundation';
  4. import BaseComponent from '../_base/baseComponent';
  5. import DayCalendar from './dayCalendar';
  6. import WeekCalendar from './weekCalendar';
  7. import MonthCalendar from './monthCalendar';
  8. import RangeCalendar from './rangeCalendar';
  9. import { CalendarProps } from './interface';
  10. import '@douyinfe/semi-foundation/calendar/calendar.scss';
  11. export * from './interface';
  12. // eslint-disable-next-line @typescript-eslint/ban-types
  13. class Calendar extends BaseComponent<CalendarProps, {}> {
  14. static propTypes = {
  15. displayValue: PropTypes.instanceOf(Date),
  16. header: PropTypes.node,
  17. events: PropTypes.arrayOf(PropTypes.shape({
  18. allDay: PropTypes.bool,
  19. start: PropTypes.instanceOf(Date),
  20. end: PropTypes.instanceOf(Date),
  21. key: PropTypes.string.isRequired,
  22. children: PropTypes.node,
  23. })),
  24. mode: PropTypes.string,
  25. showCurrTime: PropTypes.bool,
  26. scrollTop: PropTypes.number,
  27. onClick: PropTypes.func,
  28. renderTimeDisplay: PropTypes.func,
  29. markWeekend: PropTypes.bool,
  30. width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
  31. height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
  32. style: PropTypes.object,
  33. className: PropTypes.string,
  34. };
  35. static defaultProps = {
  36. events: [] as EventObject[],
  37. displayValue: new Date(),
  38. showCurrTime: true,
  39. mode: 'week',
  40. markWeekend: false,
  41. height: 600,
  42. scrollTop: 400
  43. };
  44. render() {
  45. const { mode, ...rest } = this.props;
  46. const component = {
  47. month: (<MonthCalendar />),
  48. week: (<WeekCalendar />),
  49. day: (<DayCalendar />),
  50. range: (<RangeCalendar />)
  51. };
  52. return React.cloneElement(component[mode], { ...rest });
  53. }
  54. }
  55. export { EventObject };
  56. export default Calendar;