polkadot-js/apps

View on GitHub
packages/page-referenda/src/Referenda/Deposits/index.tsx

Summary

Maintainability
A
2 hrs
Test Coverage
// Copyright 2017-2024 @polkadot/app-referenda authors & contributors
// SPDX-License-Identifier: Apache-2.0

import type { PalletReferendaDeposit, PalletReferendaTrackInfo } from '@polkadot/types/lookup';
import type { BN } from '@polkadot/util';
import type { PalletReferenda } from '../../types.js';

import React from 'react';

import { AddressMini, styled } from '@polkadot/react-components';

import Place from './Place.js';
import Refund from './Refund.js';

interface Props {
  canDeposit?: boolean;
  canRefund?: boolean;
  className?: string;
  decision: PalletReferendaDeposit | null;
  id: BN;
  noMedia?: boolean;
  palletReferenda: PalletReferenda;
  submit: PalletReferendaDeposit | null;
  track?: PalletReferendaTrackInfo;
}

function Deposits ({ canDeposit, canRefund, className = '', decision, id, noMedia, palletReferenda, submit, track }: Props): React.ReactElement<Props> {
  return (
    <StyledTd className={`${className} address ${noMedia ? '' : 'media--1000-noPad'}`}>
      {submit && (
        <AddressMini
          balance={submit.amount}
          className={noMedia ? '' : 'media--1000'}
          value={submit.who}
          withBalance
        />
      )}
      {decision
        ? (
          <>
            <AddressMini
              balance={decision.amount}
              className={noMedia ? '' : 'media--1000'}
              value={decision.who}
              withBalance
            />
            {canRefund && (
              <div className={noMedia ? '' : 'media--1000'}>
                <Refund
                  id={id}
                  palletReferenda={palletReferenda}
                />
              </div>
            )}
          </>
        )
        : canDeposit && track && (
          <div className={noMedia ? '' : 'media--1000'}>
            <Place
              id={id}
              palletReferenda={palletReferenda}
              track={track}
            />
          </div>
        )
      }
    </StyledTd>
  );
}

const StyledTd = styled.td`
  .ui--AddressMini+.ui--Button {
    margin-top: 0.25rem;
  }
`;

export default React.memo(Deposits);