Guest User

Untitled

a guest
Aug 9th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. 'use strict';
  2. const e = React.createElement;
  3. const ReactInputMask = window.ReactInputMask
  4.  
  5. class LikeButton extends React.Component {
  6. constructor(props) {
  7. super(props);
  8. this.fileInput = React.createRef();
  9. this.state = {
  10. phoneIsValid: true,
  11. fileIsValid: true,
  12. phone: '',
  13. };
  14.  
  15. this.handleChangePhone = this.handleChangePhone.bind(this);
  16. this.handleSubmit = this.handleSubmit.bind(this);
  17. }
  18.  
  19. handleChangePhone(event) {
  20. let phone = event.target.value.replace(/\s+/g, '');
  21. this.setState({
  22. phone: phone,
  23. });
  24. }
  25.  
  26. handleValidation(){
  27. let phone = this.state.phone;
  28. let file = this.fileInput.current.files[0];
  29. let formIsValid = {
  30. phoneIsValid: true,
  31. fileIsValid: true
  32. };
  33. let fileIsValid = true;
  34.  
  35. if(phone.length !== 15){
  36. formIsValid.phoneIsValid = false;
  37. }
  38. //Name
  39. if(!file || (file.size > (10 * 1024 * 1024))){
  40. formIsValid.fileIsValid = false;
  41. }
  42. if (!file.name.match(/\.(jpg|jpeg|png|gif)$/)) {
  43. formIsValid.fileIsValid = false;
  44. }
  45. return formIsValid;
  46. }
  47.  
  48. handleSubmit(event) {
  49. event.preventDefault()
  50. let formIsValid = this.handleValidation()
  51. if(formIsValid.phoneIsValid && formIsValid.fileIsValid){
  52. let data = new FormData();
  53. data.append('phone', this.state.phone);
  54. data.append('file', this.fileInput.current.files[0]);
  55. console.log(this.state.phone);
  56. fetch('http://belarus2020.org/api/v1/vote', {
  57. method: 'POST',
  58. body: data
  59. })
  60. .then(response => {
  61.  
  62. this.setState({
  63. success: true,
  64. phone: '',
  65. file: null,
  66. })
  67. })
  68. .catch(() => this.setState({ success: false}));
  69. }
  70. else{
  71. this.setState({
  72. phoneIsValid: formIsValid.phoneIsValid,
  73. fileIsValid: formIsValid.fileIsValid,
  74. })
  75. }
  76.  
  77. }
  78.  
  79.  
  80. render() {
  81. const phoneIsValid = this.state.phoneIsValid;
  82. const fileIsValid = this.state.fileIsValid;
  83. const success = this.state.success;
  84. if (success) {
  85. return (<div className="finalMessage"><span>Ваши данные учтены, спасибо за участие</span></div>);
  86. }
  87. return (
  88. <form onSubmit={this.handleSubmit}>
  89. <label htmlFor="phone">Номер телефона</label>
  90. <ReactInputMask id='phone' type='text' mask="+375(99)999 99 99" maskChar=" " value={this.state.phone} onChange={this.handleChangePhone}/>
  91. {phoneIsValid
  92. ? <span> </span>
  93. : <span>Введите действительный номер телефона.</span>
  94. }
  95. <div className="example-2">
  96. <div className="form-group">
  97. <label htmlFor="file">Фотография бюллетеня</label>
  98. <input type="file" name="file" ref={this.fileInput} id="file" accept="image/*,.pdf" multiple='false' className="input-file" />
  99. <label htmlFor="file" className="btn btn-tertiary js-labelFile">
  100. <i className="icon fa fa-check" />
  101. <span className="js-fileName"> Загрузить файл</span>
  102. </label>
  103. </div>
  104. </div>
  105. {fileIsValid
  106. ? <span> </span>
  107. : <span>Выберите фотографию. Размер фотографии не должен привышать 10 Мб.</span>
  108. }
  109. <button className="glo" type="submit" value="Submit">Отправить</button>
  110. </form>
  111. )
  112. }
  113. }
  114.  
  115. const domContainer = document.querySelector('#phone_input');
  116. ReactDOM.render(e(LikeButton), domContainer);
  117.  
Add Comment
Please, Sign In to add comment