/ common / features / ens / selectors.ts
selectors.ts
 1  import { IOwnedDomainRequest, IBaseDomainRequest } from 'libs/ens';
 2  import { isCreationAddress } from 'libs/validators';
 3  import { AppState } from 'features/reducers';
 4  import { ensDomainRequestsTypes, ensDomainRequestsSelectors } from './domainRequests';
 5  import { ensDomainSelectorSelectors } from './domainSelector';
 6  
 7  const isOwned = (data: IBaseDomainRequest): data is IOwnedDomainRequest => {
 8    return !!(data as IOwnedDomainRequest).ownerAddress;
 9  };
10  
11  export const getEns = (state: AppState) => state.ens;
12  
13  export const getCurrentDomainData = (state: AppState) => {
14    const currentDomain = ensDomainSelectorSelectors.getCurrentDomainName(state);
15    const domainRequests = ensDomainRequestsSelectors.getDomainRequests(state);
16  
17    if (!currentDomain || !domainRequests[currentDomain] || domainRequests[currentDomain].error) {
18      return null;
19    }
20  
21    const domainData = domainRequests[currentDomain].data || null;
22  
23    return domainData;
24  };
25  
26  export const getResolvedAddress = (state: AppState, noGenesisAddress: boolean = false) => {
27    const data = getCurrentDomainData(state);
28    if (!data) {
29      return null;
30    }
31  
32    if (isOwned(data)) {
33      const { resolvedAddress } = data;
34      if (noGenesisAddress) {
35        return !isCreationAddress(resolvedAddress) ? resolvedAddress : null;
36      }
37      return data.resolvedAddress;
38    }
39    return null;
40  };
41  
42  export const getResolvingDomain = (state: AppState) => {
43    const currentDomain = ensDomainSelectorSelectors.getCurrentDomainName(state);
44    const domainRequests = ensDomainRequestsSelectors.getDomainRequests(state);
45  
46    if (!currentDomain || !domainRequests[currentDomain]) {
47      return null;
48    }
49  
50    return domainRequests[currentDomain].state === ensDomainRequestsTypes.RequestStates.pending;
51  };