import moment from "moment"; import React from "react"; import FormInput, { FormInputType } from "../../../../components/form-input/FormInput"; import { IRepoCompany } from "../../../../reducers/RepoCompanyReducer"; import "./AdminRepoCompanyRow.css"; interface IRepoCompanyRowProps { repoCompany: IRepoCompany; putRepoCompany: (repoCompany: IRepoCompany) => any; } interface IRepoCompanyRowState { editedRepoCompany?: IRepoCompany; } class AdminRepoCompanyRow extends React.Component { constructor(props: IRepoCompanyRowProps) { super(props); this.state = {}; this.applyIsActiveChange = this.applyIsActiveChange.bind(this); } componentDidUpdate(prevProps: IRepoCompanyRowProps, prevState: IRepoCompanyRowState) { if (prevState !== this.state) { return; } if (prevProps.repoCompany !== this.props.repoCompany) { this.setState({ editedRepoCompany: undefined }); } } applyChange(updater: (repoCompany: IRepoCompany) => any) { if (!this.state.editedRepoCompany) { return; } const copiedRepoCompany = {...this.state.editedRepoCompany}; updater(copiedRepoCompany); this.setState({ editedRepoCompany: copiedRepoCompany }); } applyIsActiveChange(value: string) { const isActive = !!parseInt(value); const disabledDate = isActive ? undefined : moment(); this.applyChange(repoCompany => repoCompany.disabledDate = disabledDate); } beginEditingRow() { this.setState({ editedRepoCompany: { ...this.props.repoCompany } }); } cancelEditingRow() { this.setState({ editedRepoCompany: undefined }); } hasStringFieldChanged(fieldExtraction: (repoCompany: IRepoCompany) => string | null | undefined) { const orig = fieldExtraction(this.props.repoCompany); const edited = this.state.editedRepoCompany ? fieldExtraction(this.state.editedRepoCompany) : undefined; return (orig || "") !== (edited || ""); } isRepoCompanyAltered() { if (!this.state.editedRepoCompany) { return false; } return ( this.props.repoCompany.name !== this.state.editedRepoCompany.name || this.hasStringFieldChanged(repoCompany => repoCompany.email) || this.props.repoCompany.referenceId !== this.state.editedRepoCompany.referenceId || this.hasStringFieldChanged(repoCompany => repoCompany.address_Line_1) || this.hasStringFieldChanged(repoCompany => repoCompany.address_Line_2) || this.hasStringFieldChanged(repoCompany => repoCompany.city) || this.hasStringFieldChanged(repoCompany => repoCompany.state) || this.hasStringFieldChanged(repoCompany => repoCompany.zip) || this.hasStringFieldChanged(repoCompany => repoCompany.country) || this.hasStringFieldChanged(repoCompany => repoCompany.phone) || this.hasStringFieldChanged(repoCompany => repoCompany.fax) || !!this.props.repoCompany.disabledDate !== !!this.state.editedRepoCompany.disabledDate ); } isRowDisabled(): boolean { return !!this.props.repoCompany.disabledDate; } render() { if (this.state.editedRepoCompany) { const areStringInputsDisabled = !!this.state.editedRepoCompany.disabledDate; return ( this.applyChange(repoCompany => repoCompany.name = value)} data-test="name-field" /> this.applyChange(repoCompany => repoCompany.referenceId = value)} data-test="referenceid-field" /> this.applyChange(repoCompany => repoCompany.email = value)} data-test="email-field" /> this.applyChange(repoCompany => repoCompany.address_Line_1 = value)} data-test="addr-1-field" /> this.applyChange(repoCompany => repoCompany.address_Line_2 = value)} data-test="addr-2-field" /> this.applyChange(repoCompany => repoCompany.city = value)} data-test="city-field" /> this.applyChange(repoCompany => repoCompany.state = value)} data-test="state-field" /> this.applyChange(repoCompany => repoCompany.zip = value)} data-test="zip-field" /> this.applyChange(repoCompany => repoCompany.country = value)} data-test="country-field" /> this.applyChange(repoCompany => repoCompany.phone = value)} data-test="phone-field" /> this.applyChange(repoCompany => repoCompany.fax = value)} data-test="fax-field" />