-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* balance field support props.disabled * stash * use post state * confirmed the state must be `CuratorProposed` * fix, only curator can see this button * move [skip ci] * safe tx func return * remove redundant prop.isLoading [skip ci] * fix: get curator data from subscribed data * fix username * fix: if not the curator, disabled and show tooltip * fix status * refactor: read curator value syntax * add result.isNone [skip ci] * rename showpopup fn
- Loading branch information
Showing
5 changed files
with
162 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
64 changes: 64 additions & 0 deletions
64
packages/next-common/components/treasury/childBounty/acceptCurator/index.jsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import { useOnchainData } from "next-common/context/post"; | ||
import useSubStorage from "next-common/hooks/common/useSubStorage"; | ||
import PrimaryButton from "next-common/lib/button/primary"; | ||
import useRealAddress from "next-common/utils/hooks/useRealAddress"; | ||
import { useAcceptCuratorPopup } from "./useAcceptCuratorPopup"; | ||
import Tooltip from "next-common/components/tooltip"; | ||
import { isSameAddress } from "next-common/utils"; | ||
import AddressUser from "next-common/components/user/addressUser"; | ||
|
||
export default function ChildBountyAcceptCurator() { | ||
const address = useRealAddress(); | ||
const onchainData = useOnchainData(); | ||
const { parentBountyId, index: childBountyId } = onchainData; | ||
const { showPopupFn, component } = useAcceptCuratorPopup(); | ||
|
||
const { result, loading } = useSubStorage("childBounties", "childBounties", [ | ||
parentBountyId, | ||
childBountyId, | ||
]); | ||
|
||
if (loading || result.isNone) { | ||
return null; | ||
} | ||
|
||
const { status } = result.unwrap(); | ||
|
||
if (!status.isCuratorProposed) { | ||
return null; | ||
} | ||
|
||
const curator = status.asCuratorProposed.curator.toString(); | ||
|
||
const disabled = !isSameAddress(curator, address); | ||
|
||
return ( | ||
<Tooltip | ||
content={ | ||
disabled ? ( | ||
<div className="flex items-center gap-x-2"> | ||
Only{" "} | ||
<AddressUser | ||
addressClassName="!text-textPrimaryContrast" | ||
add={curator} | ||
noEvent | ||
/> | ||
can accept curator | ||
</div> | ||
) : null | ||
} | ||
> | ||
<PrimaryButton | ||
disabled={disabled} | ||
className="w-full" | ||
onClick={() => { | ||
showPopupFn(); | ||
}} | ||
> | ||
Accept Curator | ||
</PrimaryButton> | ||
|
||
{component} | ||
</Tooltip> | ||
); | ||
} |
81 changes: 81 additions & 0 deletions
81
packages/next-common/components/treasury/childBounty/acceptCurator/useAcceptCuratorPopup.jsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
import TxSubmissionButton from "next-common/components/common/tx/txSubmissionButton"; | ||
import BalanceField from "next-common/components/popup/fields/balanceField"; | ||
import Signer from "next-common/components/popup/fields/signerField"; | ||
import PopupWithSigner from "next-common/components/popupWithSigner"; | ||
import { usePopupParams } from "next-common/components/popupWithSigner/context"; | ||
import { useContextApi } from "next-common/context/api"; | ||
import { useChainSettings } from "next-common/context/chain"; | ||
import { useOnchainData } from "next-common/context/post"; | ||
import { useSubBalanceInfo } from "next-common/hooks/balance/useSubBalanceInfo"; | ||
import { toPrecision } from "next-common/utils"; | ||
import useRealAddress from "next-common/utils/hooks/useRealAddress"; | ||
import { useCallback, useState } from "react"; | ||
|
||
export function useAcceptCuratorPopup() { | ||
const [isOpen, setIsOpen] = useState(false); | ||
|
||
const component = isOpen && ( | ||
<AcceptCuratorPopup | ||
onClose={() => { | ||
setIsOpen(false); | ||
}} | ||
/> | ||
); | ||
|
||
return { | ||
component, | ||
showPopupFn() { | ||
setIsOpen(true); | ||
}, | ||
}; | ||
} | ||
|
||
function PopupContent() { | ||
const onchainData = useOnchainData(); | ||
const { symbol, decimals } = useChainSettings(); | ||
const { parentBountyId, index: childBountyId, meta } = onchainData; | ||
const { curatorDeposit } = meta || {}; | ||
const { onClose } = usePopupParams(); | ||
const api = useContextApi(); | ||
const address = useRealAddress(); | ||
const { value: balance, loading } = useSubBalanceInfo(address); | ||
|
||
const getTxFunc = useCallback(() => { | ||
if (!api?.tx?.childBounties) { | ||
return null; | ||
} | ||
|
||
return api.tx.childBounties.acceptCurator(parentBountyId, childBountyId); | ||
}, [api, childBountyId, parentBountyId]); | ||
|
||
return ( | ||
<> | ||
<Signer | ||
balanceName="Available" | ||
signerBalance={balance?.balance} | ||
isSignerBalanceLoading={loading} | ||
/> | ||
<BalanceField | ||
title="Curator Deposit" | ||
disabled | ||
inputBalance={toPrecision(curatorDeposit, decimals)} | ||
symbol={symbol} | ||
/> | ||
<div className="flex justify-end"> | ||
<TxSubmissionButton | ||
title="Confirm" | ||
getTxFunc={getTxFunc} | ||
onClose={onClose} | ||
/> | ||
</div> | ||
</> | ||
); | ||
} | ||
|
||
function AcceptCuratorPopup(props) { | ||
return ( | ||
<PopupWithSigner title="Accept Curator" className="!w-[640px]" {...props}> | ||
<PopupContent /> | ||
</PopupWithSigner> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters