@@ -14,21 +14,24 @@ const initialState: CounterState = {
1414 loading : false ,
1515} ;
1616
17- interface LoginParam {
18- bech32 : string ;
19- }
20-
21- export const loggedIn = createAsyncThunk < User , LoginParam , ThunkExtra > ( "account/loggedIn" , async ( param , thunkAPI ) => {
17+ export const loggedIn = createAsyncThunk < User , void , ThunkExtra > ( "account/loggedIn" , async ( param , thunkAPI ) => {
2218 console . log ( "Logging in" , param ) ;
23- const { bech32 } = param ;
2419
20+ const { bech32AddressSelected : bech32 , chainId, remoteURL } = ( thunkAPI . getState ( ) as RootState ) . linking ;
21+
22+ if ( ! bech32 || ! chainId || ! remoteURL ) {
23+ throw new Error ( "No bech32 address, chainId or remoteURL found for login" ) ;
24+ }
2525 const gnonative = thunkAPI . extra . gnonative as GnoNativeApi ;
2626
27+ await gnonative . setChainID ( chainId ) ;
28+ await gnonative . setRemote ( remoteURL ) ;
29+
2730 const user : User = {
28- name : await getAccountName ( bech32 , gnonative ) || ' Unknown' ,
31+ name : ( await getAccountName ( bech32 , gnonative ) ) || " Unknown" ,
2932 address : await gnonative . addressFromBech32 ( bech32 ) ,
3033 bech32,
31- avatar : await loadBech32AvatarFromChain ( bech32 , thunkAPI )
34+ avatar : await loadBech32AvatarFromChain ( bech32 , thunkAPI ) ,
3235 } ;
3336
3437 return user ;
@@ -41,9 +44,9 @@ async function getAccountName(bech32: string, gnonative: GnoNativeApi) {
4144 console . log ( "GetUserByAddress result:" , accountNameStr ) ;
4245 const accountName = accountNameStr . match ( / \( " ( \w + ) " / ) ?. [ 1 ] ;
4346 console . log ( "GetUserByAddress after regex" , accountName ) ;
44- return accountName
47+ return accountName ;
4548 } catch ( error ) {
46- console . error ( "Error getting account name" , error ) ;
49+ console . error ( "Error getting account name" , error ) ;
4750 }
4851 return undefined ;
4952}
@@ -55,44 +58,64 @@ interface AvatarCallTxParams {
5558 callbackPath : string ;
5659}
5760
58- export const avatarTxAndRedirectToSign = createAsyncThunk < void , AvatarCallTxParams , ThunkExtra > ( "account/avatarTxAndRedirectToSign" , async ( props , thunkAPI ) => {
59- const { mimeType, base64, callerAddressBech32, callbackPath } = props ;
60-
61- const gnonative = thunkAPI . extra . gnonative ;
62-
63- const gasFee = "1000000ugnot" ;
64- const gasWanted = BigInt ( 10000000 ) ;
65- const args : Array < string > = [ "Avatar" , String ( `data:${ mimeType } ;base64,` + base64 ) ] ;
66- const reason = "Upload a new avatar" ;
67- // const session = (thunkAPI.getState() as RootState).linking.session;
68-
69- await makeCallTx ( { packagePath : "gno.land/r/demo/profile" , fnc : "SetStringField" , args, gasFee, gasWanted, callerAddressBech32, reason, callbackPath } , gnonative ) ;
70- } ) ;
71-
72- export const reloadAvatar = createAsyncThunk < string | undefined , void , ThunkExtra > ( "account/reloadAvatar" , async ( param , thunkAPI ) => {
73-
74- const state = await thunkAPI . getState ( ) as CounterState ;
75- // @ts -ignore
76- const bech32 = state . account ?. account ?. bech32 ;
77- if ( bech32 ) {
78- return await loadBech32AvatarFromChain ( bech32 , thunkAPI ) ;
61+ export const avatarTxAndRedirectToSign = createAsyncThunk < void , AvatarCallTxParams , ThunkExtra > (
62+ "account/avatarTxAndRedirectToSign" ,
63+ async ( props , thunkAPI ) => {
64+ const { mimeType, base64, callerAddressBech32, callbackPath } = props ;
65+
66+ const gnonative = thunkAPI . extra . gnonative ;
67+
68+ const gasFee = "1000000ugnot" ;
69+ const gasWanted = BigInt ( 10000000 ) ;
70+ const args : Array < string > = [ "Avatar" , String ( `data:${ mimeType } ;base64,` + base64 ) ] ;
71+ const reason = "Upload a new avatar" ;
72+ // const session = (thunkAPI.getState() as RootState).linking.session;
73+
74+ await makeCallTx (
75+ {
76+ packagePath : "gno.land/r/demo/profile" ,
77+ fnc : "SetStringField" ,
78+ args,
79+ gasFee,
80+ gasWanted,
81+ callerAddressBech32,
82+ reason,
83+ callbackPath,
84+ } ,
85+ gnonative
86+ ) ;
7987 }
80- return undefined ;
81- } ) ;
88+ ) ;
89+
90+ export const reloadAvatar = createAsyncThunk < string | undefined , void , ThunkExtra > (
91+ "account/reloadAvatar" ,
92+ async ( param , thunkAPI ) => {
93+ const state = ( await thunkAPI . getState ( ) ) as CounterState ;
94+ // @ts -ignore
95+ const bech32 = state . account ?. account ?. bech32 ;
96+ if ( bech32 ) {
97+ return await loadBech32AvatarFromChain ( bech32 , thunkAPI ) ;
98+ }
99+ return undefined ;
100+ }
101+ ) ;
82102
83103const loadBech32AvatarFromChain = async ( bech32 : string , thunkAPI : ThunkExtra ) => {
84104 const gnonative = thunkAPI . extra . gnonative as GnoNativeApi ;
85- const DEFAULT_AVATAR = "https://www.gravatar.com/avatar/tmp"
105+ const DEFAULT_AVATAR = "https://www.gravatar.com/avatar/tmp" ;
86106
87107 try {
88108 console . log ( "Loading avatar for" , bech32 ) ;
89- const response = await gnonative . qEval ( "gno.land/r/demo/profile" , `GetStringField("${ bech32 } ","Avatar", "${ DEFAULT_AVATAR } ")` ) ;
90- return response . substring ( 2 , response . length - "\" string)" . length ) ;
109+ const response = await gnonative . qEval (
110+ "gno.land/r/demo/profile" ,
111+ `GetStringField("${ bech32 } ","Avatar", "${ DEFAULT_AVATAR } ")`
112+ ) ;
113+ return response . substring ( 2 , response . length - '" string)' . length ) ;
91114 } catch ( error ) {
92115 console . error ( "Error loading avatar" , error ) ;
93116 }
94117 return DEFAULT_AVATAR ;
95- }
118+ } ;
96119
97120export const accountSlice = createSlice ( {
98121 name : "account" ,
0 commit comments