diff --git a/src/hooks/useSearchEns.ts b/src/hooks/useSearchEns.ts new file mode 100644 index 00000000..36de070f --- /dev/null +++ b/src/hooks/useSearchEns.ts @@ -0,0 +1,9 @@ +import {useMemo} from "react"; +import {ethers} from "ethers"; +import {networks} from "../redux/networks"; +import {useAppSelector} from "../redux/hooks"; +import {ensApi} from "../redux/slices/ensResolver.slice"; + +const ensQuery = ensApi.useResolveNameQuery( + searchTermDebounced ? searchTermDebounced : skipToken +); diff --git a/src/redux/slices/ensResolver.slice.ts b/src/redux/slices/ensResolver.slice.ts index ebbc14fd..aa82ba29 100644 --- a/src/redux/slices/ensResolver.slice.ts +++ b/src/redux/slices/ensResolver.slice.ts @@ -9,6 +9,12 @@ export interface NameInfo { address: string } +export interface ProfileInfo { + avatar: string[] + bio: string + name: string +} + export const getNameById = async (id: string ) => { if (!id) return '' @@ -24,33 +30,14 @@ export const getAddressByName = async (id: string) => { return rsp.address } -// export const createEntryNameId = (ensName: string | null, address: string) => (`${ensName}_${address.toLowerCase()}`); - -// export const getEntryNameId = (nameInfo: NameInfo) => { - -// return `${nameInfo.ensName}_${nameInfo.address.toLowerCase()}`; -// } - -// export const ensAdapter = createEntityAdapter({ -// selectId: (entry: NameInfo) => getEntryNameId(entry), -// }) -// const sliceName = 'ensAddress'; +export const getUserAvatar = async (address: string) => { + if (!address) return '' + const url = urlcat('https://hub.pass3.me/:address', { address }) + const userInfo = (await (await fetch(url)).json()) as ProfileInfo + return userInfo.avatar -// export const ensResolverSlice = createSlice({ -// name: sliceName, -// initialState: ensAdapter.getInitialState(), -// reducers: { -// entryUpserted: ensAdapter.upsertOne, -// entryRemoved: ensAdapter.removeOne -// }, -// extraReducers: { -// [REHYDRATE]: (state, {payload}) => ({ -// ...state, -// ...(payload ? payload[sliceName] : {}), -// }), -// }, -// }) +} export const ensApi = createApi({ @@ -94,9 +81,21 @@ export const ensApi = createApi({ }; }, }), + lookupAvatar: builder.query< + { address: string; avatar: string } | null, + string>({ + queryFn: async (address) => { + const avatar = await getUserAvatar(address); + return { + data: avatar ? { + address, + avatar: avatar[0] + } + : null, + } + } + }) }; }, }); -// export const ensResolveApi = ensAdapter.getSelectors((state: RootState) => state.ensAdapter) -