Newer
Older
CrypticOreWallet / src / layouts / my-transactions / MyTransactionsPage.tsx
@Drew Lemmy Drew Lemmy on 2 Oct 2020 1 KB chore: tidy up some lint
import React, { Component, ReactNode } from "react";

import { withTranslation, WithTranslation } from "react-i18next";

import { ColumnKey, ColumnSpec, QueryStateBase } from "@components/list-view/DataProvider";
import { formatKristValue, formatDateTime } from "@components/list-view/Formatters";
import { ListView } from "@components/list-view/ListView";

import { SearchTextbox } from "@components/list-view/SearchTextbox";
import { DateString } from "@krist/types/KristTypes";

import { MyTransactionsMobileItem } from "./MyTransactionsMobileItem";

// TODO: Temporary
export interface Transaction {
  id: number;
  from?: string;
  to?: string;
  value: number;
  time: DateString;
  name?: string;
  metadata?: string;
}

const COLUMNS = new Map<ColumnKey<Transaction>, ColumnSpec<Transaction>>()
  .set("from", { nameKey: "myTransactions.columnFrom" })
  .set("to", { nameKey: "myTransactions.columnTo" })
  .set("value", { 
    nameKey: "myTransactions.columnValue",
    formatValue: formatKristValue("value")
  })
  .set("time", { 
    nameKey: "myTransactions.columnTime",
    formatValue: formatDateTime("time")
  });

class MyTransactionsPageComponent extends Component<WithTranslation> {
  render(): ReactNode {
    const { t } = this.props;

    return <ListView<Transaction>
      title={t("myTransactions.title")}
      filters={<>
        {/* Search filter textbox */}
        <SearchTextbox placeholder={t("myTransactions.searchPlaceholder")} />
      </>}
      columns={COLUMNS}
      renderMobileItem={(item: Transaction) => <MyTransactionsMobileItem item={item} />}
      dataProvider={async (query: QueryStateBase<Transaction>) => {
        // Provide the data to the list view
        // TODO: temporary
        return {
          total: 30,
          data: []
        };
      }}
    />;
  }
}

export const MyTransactionsPage = withTranslation()(MyTransactionsPageComponent);