Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.55 KB | None | 0 0
  1. import React from "react";
  2. import styled from "styled-components";
  3. import axios from "axios";
  4. import { withRouter } from "react-router-dom";
  5. import { errorMessage } from "../../actions";
  6. import { connect } from "react-redux";
  7. import { Formik } from "formik";
  8. import BillingFields from "../AddressFields/BillingFields";
  9. import ShippingFields from "../AddressFields/ShippingFields";
  10. import Button from "../../components/Button/Button";
  11. import Title from "../../components/Title/Title";
  12. import AddressCheckbox from "./components/AddressCheckbox";
  13. import Input from "../../components/Input/Input";
  14. import WrapperButton from "./components/ButtonWrapper";
  15. import AddressCheckboxWrapper from "./components/AddressCheckboxWrapper";
  16. import inputsConfig from "./assets/data";
  17. import InputWrapper from "../../components/Input/InputWrapper";
  18. import Regulations from "./components/Regulations";
  19. import Newsletter from "./components/Newsletter";
  20. import {
  21. addressValidationSchema,
  22. billingValidationSchema
  23. } from "../AddressFields/assets/validationSchema";
  24. import viewGtm from "../../helpers/gtm";
  25.  
  26. const RegistrationWrapper = styled.div`
  27. width: 100%;
  28. max-width: 400px;
  29. margin-top: 40px;
  30. `;
  31.  
  32. const ShippingWrapper = styled.div`
  33. margin-top: 40px;
  34. `;
  35.  
  36. const WrapperRegulations = styled.div`
  37. margin-top: 10px;
  38. `;
  39.  
  40. const WrapperNewsletter = styled.div`
  41. margin-top: 30px;
  42. `;
  43.  
  44. const stepNumber = '2';
  45.  
  46. class Registration extends React.Component {
  47. constructor(props) {
  48. super(props);
  49.  
  50. this.state = {
  51. shippingSameBilling: true
  52. };
  53.  
  54. this.onChangeShippingSameBilling = this.onChangeShippingSameBilling.bind(this);
  55. }
  56.  
  57. onChangeShippingSameBilling() {
  58. this.setState({
  59. shippingSameBilling: !this.state.shippingSameBilling
  60. });
  61. }
  62.  
  63. async registerUser(values) {
  64. window.mainSpinner(true);
  65. const formKey = document.getElementById("form-key").value;
  66. const url = "/subscription/api_customer/register";
  67.  
  68. const data = {
  69. created_in: "Deutsch",
  70. prefix: "Herr",
  71. firstname: values.billingFirstname,
  72. lastname: values.billingLastname,
  73. email: values.registerEmail,
  74. company: values.billingCompany,
  75. street: [values.billingStreet1],
  76. city: values.billingCity,
  77. country_id: "DE",
  78. postcode: values.billingPostcode,
  79. vat_id: "1",
  80. password: values.registerPassword,
  81. create_address: "1",
  82. default_billing: 1,
  83. default_shipping: this.state.shippingSameBilling ? 1 : 0,
  84. create_shipping_address: this.state.shippingSameBilling ? 0 : 1,
  85. shipping_firstname: values.shippingFirstname,
  86. shipping_lastname: values.shippingLastname,
  87. shipping_company: values.shippingCompany,
  88. shipping_street: [values.shippingStreet1],
  89. shipping_city: values.shippingCity,
  90. shipping_country_id: "DE",
  91. shipping_postcode: values.shippingPostcode,
  92. shipping_default_billing: 0,
  93. shipping_default_shipping: 1,
  94. is_subscribed: values.is_subscribed ? 1 : 0
  95. };
  96.  
  97. try {
  98. const res = await axios({
  99. method: "post",
  100. headers: { "X-Requested-With": "XMLHttpRequest" },
  101. params: {
  102. form_key: formKey
  103. },
  104. url,
  105. data
  106. });
  107.  
  108. window.mainSpinner(false);
  109. document.getElementById("form-key").value = res.data.token;
  110.  
  111. return res.data;
  112. } catch (err) {
  113. console.log(err);
  114.  
  115. window.mainSpinner(false);
  116. return err;
  117. }
  118. }
  119.  
  120. render() {
  121. const { userLogged, userFormKey, errorMessage, history, products } = this.props;
  122. return (
  123. <RegistrationWrapper>
  124. <Title text="Ich bin Neukunde" />
  125. <Formik
  126. validateOnChange={false}
  127. validateOnBlur={false}
  128. onSubmit={async (values, { setSubmitting }) => {
  129. setSubmitting(false);
  130. const data = await this.registerUser(values);
  131.  
  132. if (data.status === "ok") {
  133. const formKey = document.getElementById("form-key").value;
  134. userLogged(true);
  135. userFormKey(formKey);
  136. errorMessage("");
  137. history.push("/subscription/cart/checkout/address");
  138. } else {
  139. errorMessage(data.message);
  140. }
  141. }}
  142. initialValues={{
  143. registerEmail: "",
  144. registerPassword: "",
  145. billingFirstname: "",
  146. billingLastname: "",
  147. billingStreet1: "",
  148. billingCompany: "",
  149. billingPostcode: "",
  150. billingCity: "",
  151. billingPrefix: "Herr",
  152. billingAddressId: "",
  153. shippingFirstname: "",
  154. shippingLastname: "",
  155. shippingStreet1: "",
  156. shippingCompany: "",
  157. shippingPostcode: "",
  158. shippingCity: "",
  159. shippingPrefix: "Herr",
  160. shippingAddressId: "",
  161. is_subscribed: false,
  162. regulations: ""
  163. }}
  164. validationSchema={
  165. this.state.shippingSameBilling ? billingValidationSchema : addressValidationSchema
  166. }
  167. >
  168. {({ values, errors, handleChange, handleSubmit, isSubmitting }) => (
  169. <form onSubmit={handleSubmit}>
  170. <BillingFields values={values} handleChange={handleChange} errors={errors} />
  171.  
  172. <AddressCheckboxWrapper>
  173. <AddressCheckbox
  174. checked={this.state.shippingSameBilling}
  175. handleCheck={this.onChangeShippingSameBilling}
  176. inputRef={el => (this.inputElement = el)}
  177. />
  178. </AddressCheckboxWrapper>
  179.  
  180. {inputsConfig.map(input => (
  181. <InputWrapper key={input.id}>
  182. <Input
  183. id={input.id}
  184. type={input.type}
  185. label={input.label}
  186. value={values[input.id]}
  187. error={errors[input.id]}
  188. handleChange={handleChange}
  189. />
  190. </InputWrapper>
  191. ))}
  192.  
  193. {this.state.shippingSameBilling ? null : (
  194. <ShippingWrapper>
  195. <Title text="Lieferadresse" />
  196. <ShippingFields values={values} handleChange={handleChange} errors={errors} />
  197. </ShippingWrapper>
  198. )}
  199.  
  200. <WrapperNewsletter>
  201. <Newsletter
  202. id="is_subscribed"
  203. value={values.is_subscribed}
  204. handleChange={handleChange}
  205. />
  206. </WrapperNewsletter>
  207.  
  208. <WrapperRegulations>
  209. <Regulations
  210. id="regulations"
  211. value={values.regulations}
  212. handleChange={handleChange}
  213. error={errors.regulations}
  214. />
  215. </WrapperRegulations>
  216.  
  217. <WrapperButton>
  218. <Button type="submit" onClick={viewGtm.bind(this,products,stepNumber)} disabled={isSubmitting} action={() => console.log("click")}>
  219. Weiter
  220. </Button>
  221. </WrapperButton>
  222. </form>
  223. )}
  224. </Formik>
  225. </RegistrationWrapper>
  226. );
  227. }
  228. }
  229.  
  230. const mapStateToProps = (state) => {
  231. return {
  232. products: state.products
  233. }
  234. };
  235.  
  236. const mapDispatchToProps = { errorMessage };
  237.  
  238. Registration = connect(
  239. mapStateToProps,
  240. mapDispatchToProps
  241. )(Registration);
  242.  
  243. export default withRouter(Registration);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement