Skip to content

Commit

Permalink
Adding callback and wrapping up general interaction
Browse files Browse the repository at this point in the history
  • Loading branch information
hide-on-bush-x committed Nov 8, 2022
1 parent a5d9623 commit 3f4d3b6
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 75 deletions.
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -28,7 +28,7 @@
"dependencies": {
"@auth0/auth0-react": "^1.12.0",
"@masa-finance/masa-contracts-identity": "0.3.0",
"@masa-finance/masa-sdk": "^0.2.3",
"@masa-finance/masa-sdk": "^0.2.4",
"ethers": "^5.7.0",
"react": "^18.2.0",
"react-query": "^3.39.1",
Expand Down
2 changes: 2 additions & 0 deletions src/common/components/masa-interface/index.tsx
Expand Up @@ -22,6 +22,7 @@ export const MasaInterface = () => {
loading,
identity,
loggedIn,
closeModal
} = useMasa();

const page = useMemo(() => {
Expand Down Expand Up @@ -52,6 +53,7 @@ export const MasaInterface = () => {
<>
<ModalComponent
open={isModalOpen as boolean}
close={closeModal}
setOpen={setModalOpen as (val: boolean) => void}
>
{pages[page]}
Expand Down
Expand Up @@ -4,7 +4,7 @@ import { useMasa } from '../../../../helpers/provider/masa-provider';
import { MasaLoading } from '../../../masa-loading';

export const InterfaceConnected = () => {
const { masa, handleLogout } = useMasa();
const { masa, handleLogout, closeModal } = useMasa();
const [loading, setLoading] = useState(false);

const [soulnames, setSoulnames] = useState<any[] | undefined | null>(null);
Expand All @@ -24,10 +24,6 @@ export const InterfaceConnected = () => {
})();
}, [masa, setSoulnames, setLoading]);

console.log({ soulnames });



const name = useMemo(() => {
if (soulnames?.length) {
return soulnames[0].tokenDetails.sbtName;
Expand All @@ -45,6 +41,9 @@ export const InterfaceConnected = () => {
web3 soulbound identity!
</p>

<Button className="masa-button" onClick={() => closeModal?.()}>
Continue with Teller
</Button>
<div className="dont-have-a-wallet" onClick={handleLogout}>
<a>
<p>I don't want to use this wallet</p>
Expand Down
23 changes: 13 additions & 10 deletions src/common/components/masa-interface/pages/createIdentity/index.tsx
Expand Up @@ -5,29 +5,32 @@ import {
useMasa,
useMetamask,
} from '../../../../helpers/provider/masa-provider';
import { MasaLoading } from '../../../masa-loading';

import './styles.css';

export const InterfaceCreateIdentity = () => {
const { masa, setLoading } = useMasa();
const { masa, handlePurchaseSoulname } = useMasa();
const [loading, setLoading] = useState(false);
const [soulName, setSoulName] = useState('');

const purchaseSoulname = useCallback(async () => {
const a = await masa?.identity.create(soulName, 1, 'eth');
console.log(a);
return 0;
}, [masa]);

const [price, setPrice] = useState<any>(0);

const purchaseName = useCallback(async () => {
setLoading(true);
await handlePurchaseSoulname?.(soulName, 1, 'eth');
setLoading(false);
}, [handlePurchaseSoulname, soulName, setLoading]);

useEffect(() => {
(async () => {
setLoading?.(true)
const p = await masa?.soulNames.getRegistrationPrice(soulName, 1, 'eth');
setPrice(p);
setLoading?.(false)
})();
}, [masa, soulName]);

if (loading) return <MasaLoading />;

return (
<div className="masa-soulname-picker-container">
<div className="masa-soulname-picker-title">
Expand Down Expand Up @@ -56,7 +59,7 @@ export const InterfaceCreateIdentity = () => {
/>
</div>
</div>
<Button className="masa-button" onClick={purchaseSoulname}>
<Button className="masa-button" onClick={purchaseName}>
Claim your soul
</Button>
</div>
Expand Down
5 changes: 3 additions & 2 deletions src/common/components/modal/index.tsx
Expand Up @@ -8,11 +8,12 @@ export interface ModalProps {
children: React.ReactNode;
open: boolean;
setOpen: (val: boolean) => void;
close: Function;
}

export const ModalComponent = ({ children, open, setOpen }: ModalProps) => {
export const ModalComponent = ({ children, open, close }: ModalProps) => {
return (
<Modal footer={false} open={open} onCancel={() => setOpen(false)}>
<Modal footer={false} open={open} onCancel={close}>
<div className="masa-modal">
<img src={Logo} className="logo" alt="logo" />

Expand Down
70 changes: 57 additions & 13 deletions src/common/helpers/provider/masa-context.tsx
Expand Up @@ -6,7 +6,6 @@ import React, {
useMemo,
useState,
} from 'react';
import { useDebounce, useDebounceIfValue } from '../hooks/useDebounce';
import { createNewMasa } from '../masa';

export const MASA_CONTEXT = createContext<MasaShape>({});
Expand All @@ -28,6 +27,13 @@ export interface MasaShape {
loggedIn?: boolean;
handleLogin?: () => void;
handleLogout?: () => void;
handlePurchaseSoulname?: (
soulname: string,
duration: number,
paymentMethod: string
) => void;
connect?: (callback?: Function) => void;
closeModal: Function;
}

export const MasaContextProvider = ({ children }: MasaContextProviderProps) => {
Expand All @@ -43,6 +49,17 @@ export const MasaContextProvider = ({ children }: MasaContextProviderProps) => {
const [identity, setIdentity] = useState<any>(null);

const [loggedIn, setLoggedIn] = useState<boolean>(false);
const [modalCallback, setModalCallback] = useState<any>(null);

const connect = useCallback(
(callback?: () => void) => {
setModalOpen(true);
if (typeof callback === 'function') {
setModalCallback(() => callback);
}
},
[setModalOpen, setModalCallback]
);

useEffect(() => {
(async () => {
Expand Down Expand Up @@ -102,6 +119,13 @@ export const MasaContextProvider = ({ children }: MasaContextProviderProps) => {
return !!walletAddress;
}, [walletAddress]);

const closeModal = useCallback(() => {
setModalOpen(false);
if (modalCallback && loggedIn && isConnected) {
modalCallback();
}
}, [modalCallback, setModalOpen, loggedIn, isConnected]);

useEffect(() => {
(async () => {
setLoading(true);
Expand All @@ -116,21 +140,38 @@ export const MasaContextProvider = ({ children }: MasaContextProviderProps) => {
})();
}, [masaInstance]);

useEffect(() => {
(async () => {
setLoading(true);
const loadIdentity = useCallback(async () => {
setLoading(true);

if (masaInstance && walletAddress) {
//@ts-ignore
const identityResult = await masaInstance.identity.load(walletAddress);
setIdentity(identityResult);
} else {
setIdentity(null);
}
setLoading(false);
})();
console.log('Loading identity...');
if (masaInstance && walletAddress) {
//@ts-ignore
const identityResult = await masaInstance.identity.load(walletAddress);
console.log('Setting identity', identityResult);
setIdentity(identityResult);
} else {
setIdentity(null);
}
setLoading(false);
}, [masaInstance, walletAddress, setIdentity]);

const handlePurchaseSoulname = useCallback(
async (soulname, duration, paymentMethod) => {
const tx = await masaInstance?.identity.create(
soulname,
duration,
paymentMethod
);

await loadIdentity();
},
[masaInstance, loadIdentity]
);

useEffect(() => {
loadIdentity();
}, [loadIdentity]);

useEffect(() => {
if (provider) {
setMasaInstance(createNewMasa(provider));
Expand All @@ -152,6 +193,9 @@ export const MasaContextProvider = ({ children }: MasaContextProviderProps) => {
loggedIn,
handleLogin,
handleLogout,
handlePurchaseSoulname,
connect,
closeModal,
};

return (
Expand Down
3 changes: 2 additions & 1 deletion src/common/helpers/provider/masa-provider.tsx
Expand Up @@ -51,8 +51,9 @@ export const useMetamask = () => {
});
}, []);



const connect = () => {
console.log('CONNECT');
//@ts-ignore
if (window.ethereum) {
provider.send('eth_requestAccounts', []).then(async () => {
Expand Down
46 changes: 7 additions & 39 deletions stories/masa.stories.tsx
Expand Up @@ -25,51 +25,19 @@ const meta: Meta = {
export default meta;

const Component = () => {
const { masa, setModalOpen } = useMasa();
const { masa, connect } = useMasa();

const handleLogin = useCallback(async () => {
const result = await masa?.session.login();
console.log({ result });
}, [masa]);
const handleConect = useCallback(() => {
connect?.(function() {
alert("hello hello connected")
});
}, [connect]);

const handleLogout = useCallback(async () => {
const result = await masa?.session.logout();
console.log({ result });
}, [masa]);

const test = useCallback(async () => {
const address = await masa?.config.wallet.getAddress();

const balance = await masa?.account.getBalances(address as string);
console.log({ balance });

// identity id
const identityId = await masa?.identity.load(address);
console.log(`Identity ID: '${identityId}'`);

console.log('ACC', await masa?.soulNames.list(address));
}, [masa]);

const handleCreateIdentity = useCallback(async () => {
console.log('IDENTITY', masa?.identity);
const result = await masa?.soulNames.create(
'NewTestForSDK2.soul',
1,
'eth'
);
console.log({ result });
}, [masa]);
return (
<>
<h1>SDK Tester!</h1>

<Button onClick={() => setModalOpen?.(true)}>Use Masa!</Button>
<br />
<Button onClick={handleLogin}>Login</Button>
<Button onClick={handleLogout}>Logout</Button>

<Button onClick={test}>test</Button>
<Button onClick={handleCreateIdentity}>createIdentity</Button>
<Button onClick={handleConect}>Use Masa!</Button>
</>
);
};
Expand Down
8 changes: 4 additions & 4 deletions yarn.lock
Expand Up @@ -1999,10 +1999,10 @@
dependencies:
ethers "^5.6.9"

"@masa-finance/masa-sdk@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@masa-finance/masa-sdk/-/masa-sdk-0.2.3.tgz#44ee5273ab9f9a5551cea6f99c2f210966176963"
integrity sha512-33bfVSFIK/tr04WyIGxTeazJvE8xZI1TsCg05qZBJyS5yjQ5DVu8nVMRlNX5/Ee7odJyBFP+rM/DZRVXneX15Q==
"@masa-finance/masa-sdk@^0.2.4":
version "0.2.4"
resolved "https://registry.yarnpkg.com/@masa-finance/masa-sdk/-/masa-sdk-0.2.4.tgz#6d05d5dab812a66245852eb155a3cf8e608acbc7"
integrity sha512-OGBbKGa5bJIQHQ/0fXQlYuZtdPSXEhHhmRyxGWlFUkuy2kwnx4xGU+A/AHK3zjNoJHEldPUqzSMewgLUufXQdw==
dependencies:
"@masa-finance/masa-contracts-identity" "^0.4.1"
arweave "^1.11.6"
Expand Down

0 comments on commit 3f4d3b6

Please sign in to comment.