Guest User

Untitled

a guest
Apr 19th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.70 KB | None | 0 0
  1. import React, { Component } from "react";
  2. import moment from 'moment';
  3. import PropTypes from 'prop-types';
  4.  
  5. const defaultDateState = moment();
  6.  
  7. const daysWeek = [
  8. {name: 'All'},
  9. {name: 'Sunday'},
  10. {name: 'Monday'},
  11. {name: 'Tuesday'},
  12. {name: 'Wednesday'},
  13. {name: 'Thursday'},
  14. {name: 'Friday'},
  15. {name: 'Saturday'}
  16. ];
  17. const descMaxChars = 512;
  18.  
  19. export const BasicContext = React.createContext();
  20.  
  21. class BasicInfoProvider extends Component {
  22. state = {
  23. basicDesc: null,
  24. startDate: defaultDateState,
  25. endDate: defaultDateState,
  26. daysOfWeek: null,
  27. dayWeek: [],
  28. dayWeekOptions: daysWeek,
  29. descCharsLeft: descMaxChars,
  30. };
  31.  
  32. //handle dates
  33. handleChangeStart = (date) => {
  34. console.log(date);
  35. this.setState({
  36. startDate: date
  37. });
  38. }
  39.  
  40. handleChangeEnd = (date) => {
  41. this.setState({
  42. endDate: date
  43. });
  44. }
  45.  
  46.  
  47. handleChangeDesc = (e) => {
  48. var input = e.target.value;
  49. this.setState({
  50. basicDesc: input,
  51. descCharsLeft: descMaxChars - input.length
  52. });
  53. }
  54.  
  55. handleDaysWeek = (e) => {
  56. console.log('days week selection', e.target.value)
  57. const daySelection = e.target.value;
  58. let daySelectionArr;
  59. if(this.state.dayWeek.indexOf(daySelection) > -1) {
  60. daySelectionArr = this.state.dayWeek.filter(s => s !== daySelection)
  61. } else {
  62. daySelectionArr = [...this.state.dayWeek, daySelection];
  63. }
  64. this.setState({ dayWeek: daySelectionArr });
  65. }
  66.  
  67.  
  68. render(){
  69. return(
  70. <React.Fragment>
  71. <BasicContext.Provider value={{
  72. state: this.state,
  73. actions: {
  74. handleChangeDesc: this.handleChangeDesc,
  75. handleChangeEnd: this.handleChangeEnd,
  76. handleChangeStart: this.handleChangeStart,
  77. handleDaysWeek: this.handleDaysWeek
  78. },
  79. }}>
  80. {this.props.children}
  81. </BasicContext.Provider>
  82. </React.Fragment>
  83.  
  84. )
  85. }
  86. }
  87.  
  88. export const contextTypes = {
  89. basicDesc: PropTypes.string,
  90. startDate: PropTypes.number,
  91. endDate: PropTypes.number,
  92. daysOfWeek: PropTypes.string,
  93. dayWeek: PropTypes.array,
  94. dayWeekOptions: PropTypes.array,
  95. descCharsLeft: PropTypes.number,
  96. }
  97.  
  98. export default BasicInfoProvider;
  99.  
  100. import React, { Component } from "react";
  101. import DateElement from "../DateElement";
  102. import { Button, ButtonToolbar, FormGroup, ControlLabel, Checkbox, FormControl, HelpBlock, Modal, Glyphicon } from "react-bootstrap";
  103. import DatePicker from 'react-datepicker';
  104. import Select from 'react-select';
  105. import { BasicContext, contextTypes } from './BasicInfoProvider';
  106. import {getContext} from '../../utilities/GetContext';
  107.  
  108. import 'react-datepicker/dist/react-datepicker.css';
  109. import 'react-select/dist/react-select.css';
  110.  
  111. class BasicInfoForm extends Component {
  112. render(){
  113. return(
  114. <section className="basic-info-section">
  115. <BasicContext.Consumer >
  116. {({state, actions}) => (
  117. <React.Fragment>
  118. <div className="row">
  119. <FormGroup
  120. controlId="desc-field"
  121. >
  122. <h3>Description</h3>
  123. <FormControl
  124. type="textarea"
  125. value={state.basicDesc}
  126. placeholder="Enter Your Description Here"
  127. onChange={actions.handleChangeDesc}
  128. maxLength="512"
  129. />
  130. <FormControl.Feedback />
  131. <HelpBlock>Characters left: {state.descCharsLeft}</HelpBlock>
  132. </FormGroup>
  133. </div>
  134.  
  135. <hr/>
  136.  
  137. <div className="row">
  138. <div className="date-picker-duo col-sm-6">
  139. <div className="col-xs-6">
  140. <h3>Start Date</h3>
  141. <DatePicker
  142. inline
  143. selected={state.startDate}
  144. selectsStart
  145. onChange={actions.handleChangeStart}
  146. placeholderText='Click to select a date'
  147. className="start-date-field"
  148. />
  149. </div>
  150. <div className="col-xs-6">
  151. <h3>End Date</h3>
  152. <DatePicker
  153. inline
  154. selected={state.endDate}
  155. selectsend
  156. onChange={actions.handleChangeEnd}
  157. placeholderText='Click to select a date'
  158. className="end-date-field"
  159. />
  160. </div>
  161. </div>
  162. <FormGroup bsClass="col-sm-6" controlId="formControlsSelectMultiple">
  163. <h3 className="days-checkbox-title">Days of the Week</h3>
  164. {state.dayWeekOptions.map((day) => {
  165. return(
  166. <div className="weekday-checkbox col-xs-3">
  167. <input
  168. value={day.name}
  169. onChange={actions.handleDaysWeek}
  170. type="checkbox"
  171. id={day.name}
  172. key={day.name} />
  173. <label htmlFor={day.name}>{day.name}</label>
  174. </div>
  175. )
  176. })}
  177.  
  178. </FormGroup>
  179.  
  180. </div>
  181. </React.Fragment>
  182. )}
  183. </BasicContext.Consumer>
  184.  
  185. </section>
  186. );
  187. }
  188. };
  189.  
  190. export default BasicInfoForm = getContext(contextTypes)(BasicInfoForm);
  191.  
  192. import React from 'react';
  193. import { BasicContext, contextTypes } from './BasicInfoProvider';
  194. import {getContext} from '../../utilities/GetContext';
  195.  
  196. const finalReview = (props) => {
  197. return(
  198. <div className="row">
  199. <h2>So you're all done with your new Promotion?</h2>
  200.  
  201. <p>Take another look at what you're about to submit and if you like how it looks, send it on through!</p>
  202. <div className="well">
  203.  
  204. <header className="review-section-header">
  205. <h3>Basic Info </h3>
  206. <span className="review-edit" onClick={() => this.handleTabSelect(1)}>Edit Section</span>
  207. </header>
  208. <BasicContext.Consumer >
  209. {({state}) => (
  210. <div className="review-group">
  211. <p>
  212. <span className="review-title">Description: </span>
  213. <span className="review-value">{state.basicDesc}</span>
  214. </p>
  215. <p>
  216. <span className="review-title">Promotion Start Date: </span>
  217. <span className="review-value">{state.startDate.toString()}</span>
  218. </p>
  219. <p>
  220. <span className="review-title">Promotion End Date: </span>
  221. <span className="review-value">{state.endDate.toString()}</span>
  222. </p>
  223. <p>
  224. <span className="review-title">Promotion Days of the Week: </span>
  225. <span className="review-value">
  226. {state.dayWeek.map((day) => {
  227. return( `${day}, `)
  228. })}
  229. </span>
  230. </p>
  231. </div>
  232. )}
  233. </BasicContext.Consumer>
  234.  
  235. </div>
  236. </div>
  237. )
  238. }
  239.  
  240. const FinalReview = getContext(contextTypes)(finalReview);
  241.  
  242. export default FinalReview;
Add Comment
Please, Sign In to add comment