MyCrypto/common/features/ens/selectors.ts

52 lines
1.7 KiB
TypeScript

import { IOwnedDomainRequest, IBaseDomainRequest } from 'libs/ens';
import { isCreationAddress } from 'libs/validators';
import { AppState } from 'features/reducers';
import { ensDomainRequestsTypes, ensDomainRequestsSelectors } from './domainRequests';
import { ensDomainSelectorSelectors } from './domainSelector';
const isOwned = (data: IBaseDomainRequest): data is IOwnedDomainRequest => {
return !!(data as IOwnedDomainRequest).ownerAddress;
};
export const getEns = (state: AppState) => state.ens;
export const getCurrentDomainData = (state: AppState) => {
const currentDomain = ensDomainSelectorSelectors.getCurrentDomainName(state);
const domainRequests = ensDomainRequestsSelectors.getDomainRequests(state);
if (!currentDomain || !domainRequests[currentDomain] || domainRequests[currentDomain].error) {
return null;
}
const domainData = domainRequests[currentDomain].data || null;
return domainData;
};
export const getResolvedAddress = (state: AppState, noGenesisAddress: boolean = false) => {
const data = getCurrentDomainData(state);
if (!data) {
return null;
}
if (isOwned(data)) {
const { resolvedAddress } = data;
if (noGenesisAddress) {
return !isCreationAddress(resolvedAddress) ? resolvedAddress : null;
}
return data.resolvedAddress;
}
return null;
};
export const getResolvingDomain = (state: AppState) => {
const currentDomain = ensDomainSelectorSelectors.getCurrentDomainName(state);
const domainRequests = ensDomainRequestsSelectors.getDomainRequests(state);
if (!currentDomain || !domainRequests[currentDomain]) {
return null;
}
return domainRequests[currentDomain].state === ensDomainRequestsTypes.RequestStates.pending;
};