Skip to content

Commit

Permalink
make transfer state a context
Browse files Browse the repository at this point in the history
  • Loading branch information
Szegoo committed Aug 14, 2024
1 parent 845a345 commit fce4e41
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 78 deletions.
116 changes: 116 additions & 0 deletions src/components/Transfer/contexts/transferState.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import { createContext, useContext, useState, useEffect, ReactNode } from 'react';
import { ChainType, AssetType, RegionMetadata, RegionLocation } from '@/models';
import { useRegions } from '@/contexts/regions';
import { useCoretimeApi, useRelayApi, useRegionXApi } from '@/contexts/apis';
import { ApiPromise } from '@polkadot/api';
import { ApiState } from '@/contexts/apis/types';

interface TransferState {
originChain: ChainType;
setOriginChain: (chain: ChainType) => void;
destinationChain: ChainType;
setDestinationChain: (chain: ChainType) => void;
selectedRegion: RegionMetadata | null;
setSelectedRegion: (region: RegionMetadata | null) => void;
filteredRegions: RegionMetadata[];
asset: AssetType;
setAsset: (asset: AssetType) => void;
symbol: string;
coretimeApi: ApiPromise | null;
coretimeApiState: ApiState;
regionXApi: ApiPromise | null;
regionxApiState: ApiState;
relayApi: ApiPromise | null;
relayApiState: ApiState;
fetchRegions: () => void;
}

const defaultTasksData: TransferState = {
originChain: ChainType.NONE,
setOriginChain: () => { },
destinationChain: ChainType.NONE,
setDestinationChain: () => { },
selectedRegion: null,
setSelectedRegion: () => { },
filteredRegions: [],
asset: AssetType.TOKEN,
setAsset: () => { },
symbol: '',
coretimeApi: null,
coretimeApiState: ApiState.DISCONNECTED,
regionXApi: null,
regionxApiState: ApiState.DISCONNECTED,
relayApi: null,
relayApiState: ApiState.DISCONNECTED,
fetchRegions: () => { },
};

const TransferStateContext = createContext<TransferState>(defaultTasksData);

export const TransferStateProvider = ({ children }: { children: ReactNode }) => {
const { regions, fetchRegions } = useRegions();

const {
state: { api: coretimeApi, apiState: coretimeApiState, symbol },
} = useCoretimeApi();
const {
state: { api: regionXApi, apiState: regionxApiState },
} = useRegionXApi();
const {
state: { api: relayApi, apiState: relayApiState },
} = useRelayApi();

const [originChain, setOriginChain] = useState<ChainType>(ChainType.RELAY);
const [destinationChain, setDestinationChain] = useState<ChainType>(
ChainType.CORETIME
);
const [selectedRegion, setSelectedRegion] = useState<RegionMetadata | null>(
null
);
const [filteredRegions, setFilteredRegions] = useState<Array<RegionMetadata>>(
[]
);
const [asset, setAsset] = useState<AssetType>(AssetType.TOKEN);

useEffect(() => {
if (originChain === ChainType.CORETIME) {
setFilteredRegions(
regions.filter((r) => r.location === RegionLocation.CORETIME_CHAIN)
);
} else if (originChain === ChainType.RELAY) {
setFilteredRegions(
regions.filter((r) => r.location === RegionLocation.REGIONX_CHAIN)
);
} else {
setFilteredRegions([]);
}
}, [originChain, regions]);

return (
<TransferStateContext.Provider
value={{
originChain,
setOriginChain,
destinationChain,
setDestinationChain,
selectedRegion,
setSelectedRegion,
filteredRegions,
asset,
setAsset,
symbol,
coretimeApi,
coretimeApiState,
regionXApi,
regionxApiState,
relayApi,
relayApiState,
fetchRegions,
}}
>
{children}
</TransferStateContext.Provider>
);
};

export const useTransferState = () => useContext(TransferStateContext);
11 changes: 2 additions & 9 deletions src/components/Transfer/hooks/useTransferHandlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useState } from 'react';
import { ApiPromise, Keyring } from '@polkadot/api';
import { ChainType, AssetType, CORETIME_DECIMALS } from '@/models';
import { useToast } from '@/contexts/toast';
import { useTransferState } from './useTransferState';
import { useTransferState } from '../contexts/transferState';
import {
coretimeFromRegionXTransfer,
coretimeToRegionXTransfer,
Expand Down Expand Up @@ -31,9 +31,8 @@ export const useTransferHandlers = () => {
coretimeApiState,
regionxApiState,
relayApiState,
setAsset,
setOriginChain,
} = useTransferState();
console.log(originChain);

const [working, setWorking] = useState(false);
const [newOwner, setNewOwner] = useState('');
Expand All @@ -60,11 +59,6 @@ export const useTransferHandlers = () => {
},
};

const handleOriginChange = (newOrigin: ChainType) => {
setOriginChain(newOrigin);
if (newOrigin === ChainType.RELAY) setAsset(AssetType.TOKEN);
};

const handleTransfer = async () => {
if (!newOwner) {
toastError('Recipient must be selected');
Expand Down Expand Up @@ -225,6 +219,5 @@ export const useTransferHandlers = () => {
transferAmount,
setTransferAmount,
handleTransfer,
handleOriginChange,
};
};
64 changes: 0 additions & 64 deletions src/components/Transfer/hooks/useTransferState.ts

This file was deleted.

3 changes: 2 additions & 1 deletion src/components/Transfer/transferActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { AddressInput } from '@/components/Elements/Inputs/AddressInput';
import { AmountInput } from '@/components/Elements/Inputs/AmountInput';
import { ProgressButton } from '@/components/Elements/Buttons/ProgressButton';
import { useTransferHandlers } from './hooks/useTransferHandlers';
import { useTransferState } from './hooks/useTransferState';
import { useTransferState } from './contexts/transferState';
import { useRouter } from 'next/router';
import theme from '@/utils/muiTheme';
import { AssetType, ChainType } from '@/models';
Expand All @@ -28,6 +28,7 @@ const TransferActions = () => {

return (
<Box width='60%' margin='0.5rem auto'>
<p>{originChain}</p>
<Stack margin='0.5rem 0' direction='column' gap={0.5} alignItems='center'>
<ArrowDownward />
</Stack>
Expand Down
2 changes: 1 addition & 1 deletion src/components/Transfer/transferForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Box, Paper, Stack, Typography } from '@mui/material';
import { ChainSelector } from '@/components/Elements/Selectors/ChainSelector';
import AssetSelector from '@/components/Elements/Selectors/AssetSelector';
import { RegionSelector } from '@/components/Elements/Selectors/RegionSelector';
import { useTransferState } from './hooks/useTransferState';
import { useTransferState } from './contexts/transferState';
import { AssetType, ChainType } from '@/models';
import theme from '@/utils/muiTheme';

Expand Down
9 changes: 6 additions & 3 deletions src/components/Transfer/transferPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ import { Box } from '@mui/material';
import TransferHeader from './transferHeader';
import TransferForm from './transferForm';
import TransferActions from './transferActions';
import { TransferStateProvider } from './contexts/transferState';

const TransferPage = () => {
return (
<Box sx={{ maxHeight: 'calc(100% - 2rem)' }}>
<TransferHeader />
<TransferForm />
<TransferActions />
<TransferStateProvider>
<TransferHeader />
<TransferForm />
<TransferActions />
</TransferStateProvider>
</Box>
);
};
Expand Down

0 comments on commit fce4e41

Please sign in to comment.