Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

PollAnswer.tsx 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import React from 'react';
  2. import { makeStyles } from 'tss-react/mui';
  3. import { withPixelLineHeight } from '../../../base/styles/functions.web';
  4. import Button from '../../../base/ui/components/web/Button';
  5. import Checkbox from '../../../base/ui/components/web/Checkbox';
  6. import { BUTTON_TYPES } from '../../../base/ui/constants.web';
  7. import { isSubmitAnswerDisabled } from '../../functions';
  8. import AbstractPollAnswer, { AbstractProps } from '../AbstractPollAnswer';
  9. const useStyles = makeStyles()(theme => {
  10. return {
  11. container: {
  12. margin: '24px',
  13. padding: '16px',
  14. backgroundColor: theme.palette.ui02,
  15. borderRadius: '8px',
  16. wordBreak: 'break-word'
  17. },
  18. header: {
  19. marginBottom: '24px'
  20. },
  21. question: {
  22. ...withPixelLineHeight(theme.typography.heading6),
  23. color: theme.palette.text01,
  24. marginBottom: '8px'
  25. },
  26. creator: {
  27. ...withPixelLineHeight(theme.typography.bodyShortRegular),
  28. color: theme.palette.text02
  29. },
  30. answerList: {
  31. listStyleType: 'none',
  32. margin: 0,
  33. padding: 0,
  34. marginBottom: '24px'
  35. },
  36. answer: {
  37. display: 'flex',
  38. marginBottom: '16px'
  39. },
  40. footer: {
  41. display: 'flex',
  42. justifyContent: 'flex-end'
  43. },
  44. buttonMargin: {
  45. marginRight: theme.spacing(3)
  46. }
  47. };
  48. });
  49. const PollAnswer = ({
  50. creatorName,
  51. checkBoxStates,
  52. poll,
  53. setCheckbox,
  54. skipAnswer,
  55. skipChangeVote,
  56. submitAnswer,
  57. t
  58. }: AbstractProps) => {
  59. const { changingVote } = poll;
  60. const { classes } = useStyles();
  61. return (
  62. <div className = { classes.container }>
  63. <div className = { classes.header }>
  64. <div className = { classes.question }>
  65. { poll.question }
  66. </div>
  67. <div className = { classes.creator }>
  68. { t('polls.by', { name: creatorName }) }
  69. </div>
  70. </div>
  71. <ul className = { classes.answerList }>
  72. {
  73. poll.answers.map((answer: any, index: number) => (
  74. <li
  75. className = { classes.answer }
  76. key = { index }>
  77. <Checkbox
  78. checked = { checkBoxStates[index] }
  79. key = { index }
  80. label = { answer.name }
  81. // eslint-disable-next-line react/jsx-no-bind
  82. onChange = { ev => setCheckbox(index, ev.target.checked) } />
  83. </li>
  84. ))
  85. }
  86. </ul>
  87. <div className = { classes.footer } >
  88. <Button
  89. accessibilityLabel = { t('polls.answer.skip') }
  90. className = { classes.buttonMargin }
  91. labelKey = { 'polls.answer.skip' }
  92. onClick = { changingVote ? skipChangeVote : skipAnswer }
  93. type = { BUTTON_TYPES.SECONDARY } />
  94. <Button
  95. accessibilityLabel = { t('polls.answer.submit') }
  96. disabled = { isSubmitAnswerDisabled(checkBoxStates) }
  97. labelKey = { 'polls.answer.submit' }
  98. onClick = { submitAnswer } />
  99. </div>
  100. </div>
  101. );
  102. };
  103. /*
  104. * We apply AbstractPollAnswer to fill in the AbstractProps common
  105. * to both the web and native implementations.
  106. */
  107. // eslint-disable-next-line new-cap
  108. export default AbstractPollAnswer(PollAnswer);