Skip to content

Commit 421b4c7

Browse files
committed
feat: Manage Nervos DAO with multisig address
1 parent 0d64329 commit 421b4c7

File tree

6 files changed

+98
-2
lines changed

6 files changed

+98
-2
lines changed

packages/neuron-ui/src/components/MultisigAddress/hooks.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,12 +298,58 @@ const useApproveAction = () => {
298298
}
299299
}
300300

301+
const useDaoDepositAction = () => {
302+
const [isDialogOpen, setIsDialogOpen] = useState(false)
303+
const [sendFromMultisig, setSendFromMultisig] = useState<MultisigConfig | undefined>()
304+
const onOpenSendDialog = useCallback(
305+
(option: MultisigConfig) => {
306+
setIsDialogOpen(true)
307+
setSendFromMultisig(option)
308+
},
309+
[setIsDialogOpen, setSendFromMultisig]
310+
)
311+
const closeDialog = useCallback(() => {
312+
setIsDialogOpen(false)
313+
}, [setIsDialogOpen])
314+
315+
return {
316+
action: onOpenSendDialog,
317+
closeDialog,
318+
sendFromMultisig,
319+
isDialogOpen,
320+
}
321+
}
322+
323+
const useDaoWithdrawAction = () => {
324+
const [isDialogOpen, setIsDialogOpen] = useState(false)
325+
const [sendFromMultisig, setSendFromMultisig] = useState<MultisigConfig | undefined>()
326+
const onOpenSendDialog = useCallback(
327+
(option: MultisigConfig) => {
328+
setIsDialogOpen(true)
329+
setSendFromMultisig(option)
330+
},
331+
[setIsDialogOpen, setSendFromMultisig]
332+
)
333+
const closeDialog = useCallback(() => {
334+
setIsDialogOpen(false)
335+
}, [setIsDialogOpen])
336+
337+
return {
338+
action: onOpenSendDialog,
339+
closeDialog,
340+
sendFromMultisig,
341+
isDialogOpen,
342+
}
343+
}
344+
301345
export const useActions = ({ deleteConfigById }: { deleteConfigById: (id: number) => void }) => {
302346
return {
303347
deleteAction: useDeleteAction(deleteConfigById),
304348
infoAction: useInfoAction(),
305349
sendAction: useSendAction(),
306350
approveAction: useApproveAction(),
351+
daoDepositAction: useDaoDepositAction(),
352+
daoWithdrawAction: useDaoWithdrawAction(),
307353
}
308354
}
309355

packages/neuron-ui/src/components/MultisigAddress/index.tsx

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import {
3030
Confirming,
3131
Question,
3232
LineDownArrow,
33+
DAODeposit,
34+
DAOWithdrawal,
3335
} from 'widgets/Icons/icon'
3436
import AttentionCloseDialog from 'widgets/Icons/Attention.png'
3537
import { HIDE_BALANCE, NetworkType } from 'utils/const'
@@ -68,6 +70,14 @@ const tableActions = [
6870
key: ApproveKey,
6971
icon: <Confirm />,
7072
},
73+
{
74+
key: 'daoDeposit',
75+
icon: <DAODeposit />,
76+
},
77+
{
78+
key: 'daoWithdraw',
79+
icon: <DAOWithdrawal />,
80+
},
7181
]
7282

7383
const LearnMore = React.memo(({ t }: { t: TFunction }) => (
@@ -120,7 +130,9 @@ const MultisigAddress = () => {
120130
configs: allConfigs,
121131
isLightClient,
122132
})
123-
const { deleteAction, infoAction, sendAction, approveAction } = useActions({ deleteConfigById })
133+
const { deleteAction, infoAction, sendAction, approveAction, daoDepositAction, daoWithdrawAction } = useActions({
134+
deleteConfigById,
135+
})
124136
const [showDeleteDialog, setShowDeleteDialog] = useState(false)
125137

126138
const onClickItem = useCallback(
@@ -142,6 +154,12 @@ const MultisigAddress = () => {
142154
case 'approve':
143155
approveAction.action(multisigConfig)
144156
break
157+
case 'daoDeposit':
158+
daoDepositAction.action(multisigConfig)
159+
break
160+
case 'daoWithdraw':
161+
daoWithdrawAction.action(multisigConfig)
162+
break
145163
default:
146164
break
147165
}
@@ -522,6 +540,22 @@ const MultisigAddress = () => {
522540
onCancel={onCancel}
523541
/>
524542
) : null}
543+
544+
{daoDepositAction.sendFromMultisig && daoDepositAction.isDialogOpen ? (
545+
<SendFromMultisigDialog
546+
closeDialog={daoDepositAction.closeDialog}
547+
multisigConfig={daoDepositAction.sendFromMultisig}
548+
balance={sendTotalBalance}
549+
/>
550+
) : null}
551+
552+
{daoWithdrawAction.sendFromMultisig && daoWithdrawAction.isDialogOpen ? (
553+
<SendFromMultisigDialog
554+
closeDialog={daoWithdrawAction.closeDialog}
555+
multisigConfig={daoWithdrawAction.sendFromMultisig}
556+
balance={sendTotalBalance}
557+
/>
558+
) : null}
525559
</div>
526560
)
527561
}

packages/neuron-ui/src/locales/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1128,7 +1128,9 @@
11281128
"info": "Info",
11291129
"send": "Send",
11301130
"approve": "Approve",
1131-
"delete": "Delete"
1131+
"delete": "Delete",
1132+
"daoDeposit": "DAO Deposit",
1133+
"daoWithdraw": "DAO Withdraw"
11321134
}
11331135
},
11341136
"import-dialog": {
Lines changed: 5 additions & 0 deletions
Loading
Lines changed: 5 additions & 0 deletions
Loading

packages/neuron-ui/src/widgets/Icons/icon.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ import { ReactComponent as QuestionSvg } from './Question.svg'
6262
import { ReactComponent as DetailsSvg } from './Details.svg'
6363
import { ReactComponent as ConfirmSvg } from './Confirm.svg'
6464
import { ReactComponent as UploadSvg } from './Upload.svg'
65+
import { ReactComponent as DAODepositSvg } from './DAODeposit.svg'
66+
import { ReactComponent as DAOWithdrawalSvg } from './DAOWithdrawal.svg'
6567

6668
import styles from './icon.module.scss'
6769

@@ -140,3 +142,5 @@ export const Question = WrapSvg(QuestionSvg)
140142
export const Details = WrapSvg(DetailsSvg)
141143
export const Confirm = WrapSvg(ConfirmSvg)
142144
export const Upload = WrapSvg(UploadSvg)
145+
export const DAODeposit = WrapSvg(DAODepositSvg)
146+
export const DAOWithdrawal = WrapSvg(DAOWithdrawalSvg)

0 commit comments

Comments
 (0)