Aliendreamer

simple react componnet

Oct 2nd, 2019
339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { Component } from "react";
  2. import {
  3.   SimpleForm,
  4.   Create,
  5.   SelectInput,
  6.   TextInput,
  7.   showNotification,
  8.   withDataProvider,
  9.   DisabledInput,
  10.   required,
  11.   number
  12. } from "react-admin";
  13. import Button from "@material-ui/core/Button";
  14. import { connect } from "react-redux";
  15. import { getFormValues } from "redux-form";
  16. import { getFieldValue } from "helpers/fields";
  17. import { withStyles } from "@material-ui/core/styles";
  18. import { getBearerAccessToken } from "helpers/security/helper";
  19.  
  20. const style = {
  21.   root: {
  22.     display: "inline-block",
  23.     marginRight: 10
  24.   }
  25. };
  26.  
  27. const validateNumberInputs = [required(), number("Should be number")];
  28.  
  29. class NewOrder extends Component {
  30.   state = {
  31.     dropdownOptionsVendor: [],
  32.     dropdownOptionsProfileDescription: [],
  33.     dropdownOptionsRange: [],
  34.     dropdownOptionsType: [],
  35.     previewData: null
  36.   };
  37.  
  38.   componentWillMount() {
  39.     const options = {
  40.       headers: new Headers({
  41.         Accept: "application/json",
  42.         Authorization: getBearerAccessToken()
  43.       })
  44.     };
  45.     fetch(`${process.env.REACT_APP_SIMCARDS_API}/simcard/neworder`, options)
  46.       .then(response => response.json())
  47.       .then(data => {
  48.         this.setState({
  49.           dropdownOptionsType: data.fields[0].options,
  50.           dropdownOptionsVendor: data.fields[2].options
  51.         });
  52.       })
  53.       .catch(e => {
  54.         showNotification("Error", "warning");
  55.       });
  56.   }
  57.  
  58.   updateHandler = data => {
  59.     if (Object.keys(data).length - 1 <= 2) {
  60.       let vendorId = data["vendor"];
  61.  
  62.       let profileOption = data.hasOwnProperty("profileDescription")
  63.         ? data["profileDescription"]
  64.         : "";
  65.  
  66.       let queryString = data.hasOwnProperty("profileDescription")
  67.         ? `/?profileOption=${profileOption}&vendorId=${vendorId}`
  68.         : `/?vendorId=${vendorId}`;
  69.       const options = {
  70.         headers: new Headers({
  71.           Accept: "application/json",
  72.           Authorization: getBearerAccessToken()
  73.         })
  74.       };
  75.       fetch(
  76.         `${process.env.REACT_APP_SIMCARDS_API}/simcard/neworder` + queryString,
  77.         options
  78.       )
  79.         .then(response => response.json())
  80.         .then(data => {
  81.           this.setState({
  82.             dropdownOptionsProfileDescription: data.fields[1].options,
  83.             dropdownOptionsRange: data.fields[3].options
  84.           });
  85.         })
  86.         .catch(e => {
  87.           showNotification("Error", "warning");
  88.         });
  89.     }
  90.   };
  91.  
  92.   preview = () => {
  93.     let {
  94.       vendor,
  95.       profileDescription,
  96.       quantity,
  97.       type,
  98.       range
  99.     } = this.props.values;
  100.  
  101.     if (typeof range === "undefined") {
  102.       range = 10;
  103.     }
  104.  
  105.     const queryString = `/?vendor=${vendor}&profileDescription=${profileDescription}&quantity=${quantity}&type=${type}&range=${range}`;
  106.     fetch(
  107.       `${
  108.         process.env.REACT_APP_SIMCARDS_API
  109.       }/simcard/getOrderFields${queryString}`,
  110.       this.options
  111.     )
  112.       .then(response => response.json())
  113.       .then(data => {
  114.         const newData = {
  115.           date: getFieldValue(data, "date"),
  116.           profileNum: getFieldValue(data, "profileNum"),
  117.           batch: getFieldValue(data, "batch"),
  118.           keyindexOTA: getFieldValue(data, "keyindexOTA"),
  119.           tkOTA: getFieldValue(data, "tkOTA"),
  120.           artwork: getFieldValue(data, "artwork"),
  121.           start_iccid: getFieldValue(data, "start_iccid"),
  122.           end_iccid: getFieldValue(data, "end_iccid"),
  123.           start_imsi: getFieldValue(data, "start_imsi"),
  124.           end_imsi: getFieldValue(data, "end_imsi"),
  125.           address1: "A1",
  126.           address2: "Sofia",
  127.           address3: "1, Kukush str.",
  128.           address4: "Bulgaria",
  129.           customer: "A1"
  130.         };
  131.  
  132.         this.setState({ previewData: newData });
  133.       })
  134.       .catch(e => {
  135.         showNotification("Error", "warning");
  136.       });
  137.   };
  138.  
  139.   submit = () => {
  140.     let object = { ...this.props.values };
  141.     let formData = new FormData();
  142.     for (let property in object) {
  143.       if (object.hasOwnProperty(property)) {
  144.         formData.append(property, object[property]);
  145.       }
  146.     }
  147.     fetch(`${process.env.REACT_APP_SIMCARDS_API}/simcard/neworder/order`, {
  148.       method: "POST",
  149.       mode: "cors",
  150.       headers: {
  151.         Authorization: getBearerAccessToken()
  152.       },
  153.       responseType: "blob",
  154.       body: formData
  155.     })
  156.       .then(response => {
  157.         if (response.ok) {
  158.           return {
  159.             name: response.headers.get("X-File-Name"),
  160.             blob: response.blob()
  161.           };
  162.         } else {
  163.           throw Error(`Request rejected with status ${response.status}`);
  164.         }
  165.       })
  166.       .then(data => {
  167.         return Promise.resolve(data);
  168.       })
  169.       .then(data => {
  170.         return data.blob.then(blob => {
  171.           if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  172.             window.navigator.msSaveOrOpenBlob(blob, data.name);
  173.           } else {
  174.             var url = window.URL.createObjectURL(blob);
  175.             var a = document.createElement("a");
  176.             a.href = url;
  177.             a.download = data.name;
  178.             document.body.appendChild(a);
  179.             a.click();
  180.             a.remove();
  181.           }
  182.         });
  183.       })
  184.       .then(() => {
  185.         setTimeout(() => {
  186.           window.location.reload();
  187.         }, 250);
  188.       });
  189.   };
  190.  
  191.   render() {
  192.     return (
  193.       <Create {...this.props}>
  194.         <SimpleForm
  195.           defaultValue={this.state.previewData}
  196.           form="NewOrderForm"
  197.           toolbar={null}
  198.           onChange={this.updateHandler}
  199.           redirect="sim-simcard/neworder"
  200.         >
  201.           <SelectInput
  202.             formClassName={this.props.classes.root}
  203.             source="vendor"
  204.             choices={this.state.dropdownOptionsVendor}
  205.           />
  206.           <SelectInput
  207.             formClassName={this.props.classes.root}
  208.             source="profileDescription"
  209.             choices={this.state.dropdownOptionsProfileDescription}
  210.           />
  211.           <SelectInput
  212.             formClassName={this.props.classes.root}
  213.             source="range"
  214.             choices={this.state.dropdownOptionsRange}
  215.           />
  216.           <TextInput
  217.             formClassName={this.props.classes.root}
  218.             source="quantity"
  219.             validate={validateNumberInputs}
  220.           />
  221.           <SelectInput
  222.             formClassName={this.props.classes.root}
  223.             source="type"
  224.             choices={this.state.dropdownOptionsType}
  225.           />
  226.           <DisabledInput
  227.             formClassName={this.props.classes.root}
  228.             source="date"
  229.           />
  230.           <TextInput
  231.             formClassName={this.props.classes.root}
  232.             source="profileNum"
  233.             validate={validateNumberInputs}
  234.           />
  235.           <DisabledInput
  236.             formClassName={this.props.classes.root}
  237.             source="batch"
  238.           />
  239.           <DisabledInput
  240.             formClassName={this.props.classes.root}
  241.             source="artwork"
  242.           />
  243.           <DisabledInput
  244.             formClassName={this.props.classes.root}
  245.             source="address1"
  246.           />
  247.           <DisabledInput
  248.             formClassName={this.props.classes.root}
  249.             source="address2"
  250.           />
  251.           <DisabledInput
  252.             formClassName={this.props.classes.root}
  253.             source="address3"
  254.           />
  255.           <DisabledInput
  256.             formClassName={this.props.classes.root}
  257.             source="address4"
  258.           />
  259.           <DisabledInput
  260.             formClassName={this.props.classes.root}
  261.             source="start_imsi"
  262.           />
  263.           <DisabledInput
  264.             formClassName={this.props.classes.root}
  265.             source="end_imsi"
  266.           />
  267.           <DisabledInput
  268.             formClassName={this.props.classes.root}
  269.             source="start_iccid"
  270.           />
  271.           <DisabledInput
  272.             formClassName={this.props.classes.root}
  273.             source="end_iccid"
  274.           />
  275.           <TextInput
  276.             formClassName={this.props.classes.root}
  277.             source="po_ref"
  278.             validate={validateNumberInputs}
  279.           />
  280.           <DisabledInput
  281.             formClassName={this.props.classes.root}
  282.             source="tkOTA"
  283.           />
  284.           <DisabledInput
  285.             formClassName={this.props.classes.root}
  286.             source="keyindexOTA"
  287.           />
  288.  
  289.           <Button color="primary" onClick={() => this.preview()}>
  290.             Preview order
  291.           </Button>
  292.           <Button color="secondary" onClick={() => this.submit()}>
  293.             Save
  294.           </Button>
  295.         </SimpleForm>
  296.       </Create>
  297.     );
  298.   }
  299. }
  300.  
  301. const NewOrderWithConnect = connect(state => ({
  302.   values: getFormValues("NewOrderForm")(state)
  303. }))(NewOrder);
  304.  
  305. const NewOrderWithDataProvider = withDataProvider(NewOrderWithConnect);
  306.  
  307. const NewOrderWithtyles = withStyles(style)(NewOrderWithDataProvider);
  308.  
  309. export default NewOrderWithtyles;
Advertisement
Add Comment
Please, Sign In to add comment