import React from "react"; import { ICollateral, IRepoAccount } from "../../../services/service-types/RepoAccountTypes"; import RepoAccountService from "../../../services/RepoAccountService"; import { Moment } from "moment"; import DateFormatting from "../../../shared/formatting/DateFormatting"; import DatePicker from 'react-datepicker'; import DateConversions from "../../../shared/conversions/DateConversions"; import "./NotableDates.css"; const cloneDeep = require('lodash.clonedeep'); interface INotableDatesProps { selectedAccount: IRepoAccount; saveRepoAccount: (repo: IRepoAccount) => any; } interface INotableDatesState { repoAccount: IRepoAccount; isOpen: boolean; } type IRepoAccountUpdater = (repoAccount: IRepoAccount, value: T) => void; class NotableDates extends React.Component { constructor(props: INotableDatesProps) { super(props); this.state = { repoAccount: cloneDeep(props.selectedAccount), isOpen: false } } private applyChange(value: T, updater: IRepoAccountUpdater) { const copiedAccount = cloneDeep(this.state.repoAccount); updater(copiedAccount, value); this.setState({ repoAccount: copiedAccount, }); } private handleDateChange(date: Date | null, updater: IRepoAccountUpdater) { const momentDate = DateConversions.dateToMoment(date); this.applyChange(momentDate, updater); } toggleOpen = () => this.setState({ isOpen: !this.state.isOpen }); private formatDate = (date: Moment | undefined = undefined): string => { return date ? DateFormatting.FormatMMDDYYYY(date) : "N/A"; }; private getRetitledDateString = (collaterals: ICollateral[]): string => { for (const collateral of collaterals) { if (collateral.retitledInLandmarkName) { return this.formatDate(collateral.retitledInLandmarkName); } } return this.formatDate(); }; private getRepoDate = (repoAccount: IRepoAccount): string => { return this.formatDate(RepoAccountService.GetLatestStatusChangeDate("REPO", repoAccount)); }; private editButton = () => { return ( ); }; render() { return (
Notable Dates:

O4R: {this.formatDate(this.props.selectedAccount.o4RDate)}

Repo: {this.getRepoDate(this.props.selectedAccount)}

Redemption Expired: {this.formatDate(this.props.selectedAccount.redemptionExpiredDate)} {this.state.isOpen ?

this.handleDateChange(date, (a, v) => a.redemptionExpiredDate = v)} data-test={"notable-dates-redem-exp-date-picker"} />
: null}

Retitled: {this.getRetitledDateString(this.props.selectedAccount.collaterals)}

); } } export default NotableDates;