Guest User

Untitled

a guest
Mar 24th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. var Col = require('react-bootstrap/lib/Col')
  2. var PageHeader = require('react-bootstrap/lib/PageHeader')
  3. var React = require('react')
  4. var Row = require('react-bootstrap/lib/Row')
  5. var {connect} = require('react-redux')
  6. var {reduxForm} = require('redux-form')
  7.  
  8. var DateInput = require('./DateInput')
  9. var FormField = require('./FormField')
  10. var LoadingButton = require('./LoadingButton')
  11. var StaticField = require('./StaticField')
  12. var TextInput = require('./TextInput')
  13.  
  14. var {zeroTime} = require('./utils')
  15.  
  16. var TODAY = zeroTime(new Date())
  17.  
  18. var mapStateToProps = state => state
  19.  
  20. var form = reduxForm({
  21. form: 'addTravel',
  22. fields: ['startDate', 'endDate', 'origin', 'destination', 'hotel', 'hasCar'],
  23. touchOnChange: true, // react-widgets DateTimePicker doesn't blur
  24. validate(travel) {
  25. var errors = {}
  26. if (!travel.startDate) errors.startDate = 'Please enter a start date.'
  27. if (!travel.endDate) errors.endDate = 'Please enter an end date.'
  28. if (travel.startDate && travel.endDate &&
  29. zeroTime(travel.endDate) < zeroTime(travel.startDate)) {
  30. errors.endDate = 'End date must not be earlier than start date.'
  31. }
  32. if (!travel.origin) errors.origin = 'Please enter an origin.'
  33. if (!travel.destination) errors.destination = 'Please enter a destination.'
  34. return errors
  35. }
  36. })
  37.  
  38. var AddTravel = React.createClass({
  39. getInitialState() {
  40. return {
  41. fakeSaving: false,
  42. fakeSubmitted: null
  43. }
  44. },
  45. componentWillMount() {
  46. this.props.initializeForm({
  47. startDate: null,
  48. endDate: null,
  49. origin: '',
  50. destination: '',
  51. hotel: '',
  52. hasCar: 'no'
  53. })
  54. },
  55.  
  56. /**
  57. * Set endDate to startDate if it's blank or would otherwise be invalid.
  58. */
  59. handleStartDateChange(startDate) {
  60. var {endDate} = this.props.fields
  61. if (endDate.value == null || endDate.value < startDate) {
  62. endDate.onChange(startDate)
  63. }
  64. },
  65. handleSubmit(data) {
  66. this.setState({fakeSaving: true, fakeSubmitted: data})
  67. setTimeout(() => this.setState({fakeSaving: false}), 2000)
  68. },
  69.  
  70. render() {
  71. var {fields} = this.props
  72. var {fakeSaving, fakeSubmitted} = this.state
  73. return <div className="container">
  74. <PageHeader>redux-form example</PageHeader>
  75. <form className="form-horizontal" onSubmit={this.props.handleSubmit(this.handleSubmit)}>
  76. <Row>
  77. <StaticField label="First Name:" value="Steve"/>
  78. <StaticField label="Last Name:" value="Test"/>
  79. </Row>
  80. <Row>
  81. <DateInput
  82. afterChange={this.handleStartDateChange}
  83. disabled={fakeSaving}
  84. field={fields.startDate}
  85. id="startDate"
  86. label="Start Date:"
  87. min={TODAY}
  88. />
  89. <DateInput
  90. disabled={fakeSaving}
  91. field={fields.endDate}
  92. id="endDate"
  93. label="End Date:"
  94. min={fields.startDate.value || TODAY}
  95. />
  96. </Row>
  97. <Row>
  98. <TextInput
  99. disabled={fakeSaving}
  100. field={fields.origin}
  101. id="origin"
  102. label="Origin:"
  103. />
  104. <TextInput
  105. disabled={fakeSaving}
  106. field={fields.destination}
  107. label="Destination:"
  108. id="destination"
  109. />
  110. </Row>
  111. <Row>
  112. <TextInput
  113. disabled={fakeSaving}
  114. field={fields.hotel}
  115. help="Please enter name of hotel here. If no hotel booking exists or unknown put 'N/A'"
  116. id="hotel"
  117. label="Hotel:"
  118. />
  119. <FormField help="Please select 'Yes' if access to a car (rented or personal) during travel and 'No' if no access to a car during travel"
  120. label="Car:">
  121. <label className="radio-inline">
  122. <input type="radio" name="hasCar" value="yes" onChange={fields.hasCar.onChange} disabled={fakeSaving}/> Yes
  123. </label>
  124. <label className="radio-inline">
  125. <input type="radio" name="hasCar" value="no" onChange={fields.hasCar.onChange} defaultChecked disabled={fakeSaving}/> No
  126. </label>
  127. </FormField>
  128. </Row>
  129. <Row className="form-group">
  130. <Col sm={12} className="text-center">
  131. <LoadingButton
  132. bsSize="large"
  133. bsStyle="primary"
  134. label="Add Travel"
  135. loading={fakeSaving}
  136. loadingLabel="Adding Travel"
  137. type="submit"
  138. />
  139. </Col>
  140. </Row>
  141. {fakeSubmitted && <pre><code>{JSON.stringify(fakeSubmitted, null, 2)}</code></pre>}
  142. </form>
  143. </div>
  144. }
  145. })
  146.  
  147. module.exports = connect(mapStateToProps)(form(AddTravel))
Add Comment
Please, Sign In to add comment