index.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright 2017-2020 @polkadot/app-treasury authors & contributors
  2. // This software may be modified and distributed under the terms
  3. // of the Apache-2.0 license. See the LICENSE file for details.
  4. import { DeriveTreasuryProposals } from '@polkadot/api-derive/types';
  5. import { BareProps as Props } from '@polkadot/react-components/types';
  6. import React, { useEffect, useState } from 'react';
  7. import { Button } from '@polkadot/react-components';
  8. import { useApi, useCall, useIncrement, useMembers, useIsMountedRef } from '@polkadot/react-hooks';
  9. import ProposalCreate from './ProposalCreate';
  10. import Proposals from './Proposals';
  11. import Summary from './Summary';
  12. import TipCreate from './TipCreate';
  13. import Tips from './Tips';
  14. function Overview ({ className }: Props): React.ReactElement<Props> {
  15. const { api } = useApi();
  16. const info = useCall<DeriveTreasuryProposals>(api.derive.treasury.proposals, []);
  17. const { isMember, members } = useMembers();
  18. const mountedRef = useIsMountedRef();
  19. const [tipHashTrigger, triggerTipHashes] = useIncrement();
  20. const [tipHashes, setTipHashes] = useState<string[] | null>(null);
  21. useEffect((): void => {
  22. if (tipHashTrigger && mountedRef.current) {
  23. api.query.treasury.tips.keys().then((keys) =>
  24. mountedRef.current && setTipHashes(
  25. keys.map((key) => key.args[0].toHex())
  26. )
  27. ).catch(console.error);
  28. }
  29. }, [api, tipHashTrigger, mountedRef]);
  30. return (
  31. <div className={className}>
  32. <Summary
  33. approvalCount={info?.approvals.length}
  34. proposalCount={info?.proposals.length}
  35. />
  36. <Button.Group>
  37. <TipCreate
  38. members={members}
  39. refresh={triggerTipHashes}
  40. />
  41. <ProposalCreate />
  42. </Button.Group>
  43. <Proposals
  44. isMember={isMember}
  45. members={members}
  46. proposals={info?.proposals}
  47. />
  48. <Proposals
  49. isApprovals
  50. isMember={isMember}
  51. members={members}
  52. proposals={info?.approvals}
  53. />
  54. <Tips
  55. hashes={tipHashes}
  56. isMember={isMember}
  57. members={members}
  58. />
  59. </div>
  60. );
  61. }
  62. export default React.memo(Overview);