Advertisement
danine1

Toggle for form sections example

Mar 9th, 2018
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* eslint-disable camelcase */
  2. import React from "react";
  3. import PropTypes from "prop-types";
  4. import { translate } from "react-i18next";
  5. import { Input, Checkbox } from "@ematix/tesseract-component-library";
  6.  
  7. import cls from "./bank.scss";
  8. // eslint-disable-next-line
  9. import TwoColumnWrapper from "../../_modules/people/pages/EmployeeDetails/pages/Payroll/TwoColumnWrapper";
  10. @translate("InputSetBank")
  11. export default class InputSetBank extends React.PureComponent {
  12.   static propTypes = {
  13.     name: PropTypes.string,
  14.     defaultValues: PropTypes.instanceOf(Object),
  15.     t: PropTypes.func.isRequired,
  16.   };
  17.   static defaultProps = {
  18.     name: "bank_account",
  19.     defaultValues: {},
  20.   };
  21.  
  22.   constructor(props, ...args) {
  23.     super(props, ...args);
  24.  
  25.     const {
  26.       defaultValues: {
  27.         account_name, IBAN, bank_name, swift_code,
  28.       },
  29.     } = props;
  30.  
  31.     let isIban = false;
  32.     if (account_name || IBAN || bank_name || swift_code) {
  33.       isIban = true;
  34.     }
  35.  
  36.     this.state = {
  37.       isIban,
  38.     };
  39.   }
  40.  
  41.   handleToggleIban = () => {
  42.     const { isIban } = this.state;
  43.  
  44.     this.setState({
  45.       isIban: !isIban,
  46.     });
  47.   };
  48.  
  49.   render() {
  50.     const { name, defaultValues, t } = this.props;
  51.     const { isIban } = this.state;
  52.  
  53.     const getName = inputName => `${name || "bank_account"}[${inputName}]`;
  54.     return (
  55.       <TwoColumnWrapper>
  56.         <div className={cls.leftCol}>
  57.           <Input
  58.             name={getName("number_prefix")}
  59.             defaultValue={defaultValues.no_prefix}
  60.             label={t("Prefix")}
  61.           />
  62.           <Input
  63.             className={cls.accountNumber}
  64.             name={getName("number")}
  65.             defaultValue={defaultValues.account_number}
  66.             label={t("Account No.")}
  67.           />
  68.           <Input
  69.             name={getName("bank_code")}
  70.             defaultValue={defaultValues.bank_code}
  71.             label={t("Bank Code")}
  72.           />
  73.         </div>
  74.         <div className={cls.rightCol}>
  75.           <Checkbox
  76.             id="iban"
  77.             label={t("IBAN")}
  78.             onChange={this.handleToggleIban}
  79.             defaultChecked={isIban}
  80.           />
  81.           {isIban && (
  82.             <React.Fragment>
  83.               <div className={cls.ibanPart}>
  84.                 <div className={cls.ibanSwiftPart}>
  85.                   <Input
  86.                     name={getName("IBAN")}
  87.                     defaultValue={defaultValues.IBAN}
  88.                     label={t("IBAN")}
  89.                     className={cls.iban}
  90.                   />
  91.                   <Input
  92.                     name={getName("swift")}
  93.                     defaultValue={defaultValues.swift_code}
  94.                     label={t("Swift Code")}
  95.                     className={cls.swift}
  96.                   />
  97.                 </div>
  98.                 <Input
  99.                   name={getName("holder_name")}
  100.                   defaultValue={defaultValues.account_name}
  101.                   label={t("Holder Name")}
  102.                   className={cls.name}
  103.                 />
  104.                 <Input
  105.                   name={getName("bank_name")}
  106.                   defaultValue={defaultValues.bank_name}
  107.                   label={t("Bank Name")}
  108.                   className={cls.bankName}
  109.                 />
  110.               </div>
  111.             </React.Fragment>
  112.           )}
  113.         </div>
  114.       </TwoColumnWrapper>
  115.     );
  116.   }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement