import { useState } from 'react';
import { AmountDenom } from 'src/components';
import ActionBar from 'src/components/actionBar';
import { useAdviser } from 'src/features/adviser/context';
import useAdviserTexts from 'src/features/adviser/useAdviserTexts';
import { ContractTypes } from 'src/features/cybernet/types';
import { selectCurrentAddress } from 'src/redux/features/pocket';
import { useAppSelector } from 'src/redux/hooks';
import { useCurrentContract } from '../../../cybernet.context';
import useCybernetTexts from '../../../useCybernetTexts';
import useExecuteCybernetContract from '../../../useExecuteCybernetContract';
import { useCurrentSubnet } from '../subnet.context';
import styles from './SubnetActionBar.module.scss';
type Props = {};
enum Steps {
INITIAL,
REGISTER_CONFIRM,
}
function SubnetActionBar({}: Props) {
const [step, setStep] = useState(Steps.INITIAL);
const { netuid, subnetQuery, subnetRegistrationQuery, neuronsQuery } = useCurrentSubnet();
const address = useAppSelector(selectCurrentAddress);
const { setAdviser } = useAdviser();
const { getText } = useCybernetTexts();
const notRegistered = subnetRegistrationQuery.data === null;
const burn = subnetQuery.data?.burn;
function handleSuccess() {
setAdviser('Registered', 'green');
setStep(Steps.INITIAL);
subnetRegistrationQuery.refetch();
neuronsQuery.refetch();
// think if need
subnetQuery.refetch();
}
const subnetRegisterExecution = useExecuteCybernetContract({
query: {
burned_register: {
netuid,
hotkey: address,
},
},
funds: [
{
denom: 'pussy',
amount: String(burn),
},
],
onSuccess: handleSuccess,
});
const rootSubnetRegisterExecution = useExecuteCybernetContract({
query: {
root_register: {
hotkey: address,
},
},
onSuccess: handleSuccess,
});
let button;
let content;
let onClickBack: undefined | (() => void);
const { type } = useCurrentContract();
const isMlVerse = type === ContractTypes.ML;
let text;
// refactor ifs
if (notRegistered && !isMlVerse) {
text = `join ${getText('subnetwork')}`;
} else if (isMlVerse) {
text = 'use cli to register in ML verse subnets';
}
useAdviserTexts({
defaultText: text,
});
const isRoot = netuid === 0;
if (notRegistered && netuid === 0) {
return (
<ActionBar
button={{
text: `Register to ${getText('root')}`,
onClick: rootSubnetRegisterExecution.mutate,
disabled: rootSubnetRegisterExecution.isLoading,
}}
/>
);
}
switch (step) {
case Steps.INITIAL:
if (!notRegistered) {
break;
}
if (!isRoot && isMlVerse) {
button = {
text: <span className={styles.installBtn}>install</span>,
link: 'https://github.com/cybercongress/cybertensor',
};
break;
}
button = {
text: `Register to ${getText('subnetwork')}`,
onClick: () => setStep(Steps.REGISTER_CONFIRM),
};
break;
case Steps.REGISTER_CONFIRM:
button = {
text: 'Confirm registration',
onClick: subnetRegisterExecution.mutate,
disabled: subnetRegisterExecution.isLoading,
};
onClickBack = () => setStep(Steps.INITIAL);
content = (
<>
fee is
<AmountDenom amountValue={burn} denom="pussy" />
</>
);
break;
default:
break;
}
return (
<ActionBar onClickBack={onClickBack} button={button}>
{content}
</ActionBar>
);
}
export default SubnetActionBar;