index.tsx 2.1 KB

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