index.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. weekStartsOn: PropTypes.number,
  27. scrollTop: PropTypes.number,
  28. onClick: PropTypes.func,
  29. renderTimeDisplay: PropTypes.func,
  30. markWeekend: PropTypes.bool,
  31. width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
  32. height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
  33. style: PropTypes.object,
  34. className: PropTypes.string,
  35. };
  36. static defaultProps = {
  37. events: [] as EventObject[],
  38. displayValue: new Date(),
  39. showCurrTime: true,
  40. mode: 'week',
  41. markWeekend: false,
  42. height: 600,
  43. scrollTop: 400,
  44. weekStartsOn: 0,
  45. };
  46. render() {
  47. const { mode, ...rest } = this.props;
  48. const component = {
  49. month: (<MonthCalendar />),
  50. week: (<WeekCalendar />),
  51. day: (<DayCalendar />),
  52. range: (<RangeCalendar />)
  53. };
  54. return React.cloneElement(component[mode], { ...rest });
  55. }
  56. }
  57. export { EventObject };
  58. export default Calendar;