Index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import classNames from 'classnames'
  4. import Styles from './index.css'
  5. import {
  6. PREV_DAY, NEXT_DAY,
  7. } from '../../const'
  8. import { DateContext } from '../../context'
  9. import { withContext } from '../../utils'
  10. class Index extends React.Component {
  11. selectDay = (day, event) => {
  12. if (day.disabled) {
  13. return
  14. }
  15. const { context: { onSelectDay } } = this.props
  16. onSelectDay(day, event)
  17. }
  18. render() {
  19. const { context: { weekTags, days } } = this.props
  20. return (
  21. <div className={Styles.wrapper}>
  22. { weekTags.map(weekName => (
  23. <span
  24. className={`${Styles.normal} ${Styles.week}`}
  25. title={`星期${weekName}`}
  26. key={weekName}
  27. >
  28. { weekName }
  29. </span>
  30. )) }
  31. {
  32. days.map(day => (
  33. <span
  34. className={classNames(Styles.normal, {
  35. [Styles.prev]: day.tag === PREV_DAY,
  36. [Styles.next]: day.tag === NEXT_DAY,
  37. [Styles.current]: day.current,
  38. [Styles.selected]: day.selected,
  39. [Styles.disabled]: day.disabled,
  40. })}
  41. title={day.full}
  42. key={day.full}
  43. onClick={e => this.selectDay(day, e)}
  44. role="presentation"
  45. >
  46. { day.day }
  47. </span>
  48. ))
  49. }
  50. </div>
  51. )
  52. }
  53. }
  54. Index.propTypes = {
  55. context: PropTypes.shape({
  56. weekTags: PropTypes.array.isRequired,
  57. days: PropTypes.array.isRequired,
  58. onSelectDay: PropTypes.func.isRequired,
  59. }).isRequired,
  60. }
  61. export default withContext(DateContext, Index)