From 6980e1ebebe2c090440f9357d588f3cb74a6161e Mon Sep 17 00:00:00 2001 From: Jaco Date: Wed, 27 Jul 2022 07:45:50 +0200 Subject: [PATCH] Add alliance join (#7915) --- packages/apps/src/Menu/Grouping.tsx | 2 +- packages/page-alliance/src/Join.tsx | 72 +++++++++++++++++++ packages/page-alliance/src/Member.tsx | 2 +- packages/page-alliance/src/Members.tsx | 23 +++++- packages/page-alliance/src/types.ts | 2 +- packages/page-alliance/src/useMembers.ts | 60 ++++++++-------- .../src/Overview/SubmitCandidacy.tsx | 4 +- packages/page-poll/src/index.tsx | 4 +- 8 files changed, 131 insertions(+), 38 deletions(-) create mode 100644 packages/page-alliance/src/Join.tsx diff --git a/packages/apps/src/Menu/Grouping.tsx b/packages/apps/src/Menu/Grouping.tsx index eb5b6febbf..b755eee0b5 100644 --- a/packages/apps/src/Menu/Grouping.tsx +++ b/packages/apps/src/Menu/Grouping.tsx @@ -19,7 +19,7 @@ const SHA_COL = 'rgba(34, 36, 38, 0.12)'; const SHA_OFF = '5px'; function Grouping ({ className = '', isActive, name, routes }: Props): React.ReactElement { - if (routes.length === 1) { + if (routes.length === 1 && routes[0].group === 'settings') { return ( void; +} + +function Join ({ className, members, onClose }: Props): React.ReactElement { + const { t } = useTranslation(); + const { api } = useApi(); + const { allAccounts } = useAccounts(); + const [accountId, setAccountId] = useState(null); + + const available = useMemo( + (): string[] => + allAccounts.filter((a) => + !members.some(({ accountId }) => + accountId === a + ) + ), + [allAccounts, members] + ); + + return ( + ('Join alliance')} + onClose={onClose} + size='large' + > + + ('This account will be submitted to join the aliance. It will be allocated one of the alliance roles upon joining, starting with Ally.')}> + ('Select the account you wish to join with')} + label={t('alliance account')} + onChange={setAccountId} + type='account' + /> + + + ('The deposit that is reserved')} + isDisabled + label={t('alliance deposit')} + /> + + + + + + + ); +} + +export default React.memo(Join); diff --git a/packages/page-alliance/src/Member.tsx b/packages/page-alliance/src/Member.tsx index 4598b5890c..f189302363 100644 --- a/packages/page-alliance/src/Member.tsx +++ b/packages/page-alliance/src/Member.tsx @@ -20,7 +20,7 @@ function Member ({ className, info: { accountId, role } }: Props): React.ReactEl - {role.type} + {role} ); diff --git a/packages/page-alliance/src/Members.tsx b/packages/page-alliance/src/Members.tsx index 946146e252..bf496f7146 100644 --- a/packages/page-alliance/src/Members.tsx +++ b/packages/page-alliance/src/Members.tsx @@ -3,8 +3,10 @@ import React, { useRef } from 'react'; -import { Table } from '@polkadot/react-components'; +import { Button, Table } from '@polkadot/react-components'; +import { useToggle } from '@polkadot/react-hooks'; +import Join from './Join'; import Member from './Member'; import Summary from './Summary'; import { useTranslation } from './translate'; @@ -14,8 +16,9 @@ interface Props { className?: string; } -function Collators ({ className }: Props): React.ReactElement { +function Members ({ className }: Props): React.ReactElement { const { t } = useTranslation(); + const [isJoinOpen, toggleJoin] = useToggle(); const members = useMembers(); const hdrRef = useRef([ @@ -26,6 +29,20 @@ function Collators ({ className }: Props): React.ReactElement { return (
+ +