import React, { Component } from 'react' import MaterialTable from 'material-table' import withObservables from '@nozbe/with-observables' import { withDatabase } from '@nozbe/watermelondb/DatabaseProvider' import { toEther } from '../utils/conversions' import { getTokenLabel } from '../utils/currencies' import TransferCard from './table/TransferCard' import WithdrawCard from './table/WithdrawCard' const convertToHours = seconds => seconds / 60 / 60 const projectText = project => project === '0' ? 'N/A' : project const pledgeStateMap = { 0: 'Pledged', 1: 'Paying', 2: 'Paid' } const convertToDatetime = async field => { const { commitTime } = field const profile = await field.profile.fetch() if (!profile || Number(commitTime) === 0) return 0 const time = Number(commitTime) + Number(profile.commitTime) const date = new Date(time * 1000) return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}` } const formatField = async field => ({ ...field.getFields(), commitTime: await convertToDatetime(field), amount: toEther(field.amount), token: getTokenLabel(field.token), intendedProject: projectText(field.intendedProject), pledgeState: pledgeStateMap[field.pledgeState], transferTo: field.transferTo, pledge: field }) class PledgesTable extends Component { state = { data: [], row: false, } componentDidMount() { this.setData() } componentDidUpdate() { const { pledges } = this.props const { data } = this.state if (data.length) { pledges.some((pledge, idx) => { const current = data[idx] if (current) { if (toEther(pledge.amount) != current.amount || pledgeStateMap[pledge.pledgeState] != current.pledgeState) this.setData() } }) } if (pledges.length && !data.length) this.setData() } setData = async () => { const { pledges } = this.props const data = await Promise.all(pledges.map(formatField)) this.setState({ data }) } handleClickOpen = row => { this.setState({ row }) } handleClose = () => { this.setState({ rowData: null }) } render() { const { data, rowData } = this.state return (