Skip to content

Commit

Permalink
feat: init commit
Browse files Browse the repository at this point in the history
  • Loading branch information
borcherd committed Aug 31, 2023
1 parent 28d4d3b commit dfe8d4d
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 26 deletions.
1 change: 1 addition & 0 deletions next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const nextConfig = {
SOCKET_API_KEY: process.env.SOCKET_API_KEY,
PEANUT_API_KEY: process.env.PEANUT_API_KEY,
GA_KEY: process.env.GA_KEY,
PROMO_LIST: process.env.PROMO_LIST,
},
productionBrowserSourceMaps: true,
swcMinify: true,
Expand Down
2 changes: 2 additions & 0 deletions src/components/claim/claim.consts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ export interface IClaimScreenProps {
claimDetails: interfaces.ILinkDetails
txHash: string
setTxHash: (txHash: string) => void
claimType: 'CLAIM' | 'PROMO'
setClaimType: (claimType: 'CLAIM' | 'PROMO') => void
}

export const INIT_VIEW: IClaimScreenState = {
Expand Down
65 changes: 40 additions & 25 deletions src/components/claim/claim.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,17 @@ import * as views from './views'
import * as _consts from './claim.consts'
import * as interfaces from '@/interfaces'
import { createElement, useEffect, useState } from 'react'
import { ReadonlyURLSearchParams } from 'next/navigation'
import { getPublicClient, PublicClient } from '@wagmi/core'
import { providers } from 'ethers'
import { HttpTransport } from 'viem'
import { useAccount } from 'wagmi'
import peanut from '@squirrel-labs/peanut-sdk'

export function Claim({ link }: { link: string }) {
const { address, isConnected } = useAccount()
const [linkState, setLinkState] = useState<_consts.linkState>('LOADING')
const [claimScreen, setClaimScreen] = useState<_consts.IClaimScreenState>(_consts.INIT_VIEW)
const [claimLink, setClaimLink] = useState<string>('')
const [claimDetails, setClaimDetails] = useState<interfaces.ILinkDetails | undefined>(undefined)
const [txHash, setTxHash] = useState<string>('')
const [claimType, setClaimType] = useState<'CLAIM' | 'PROMO'>('CLAIM')

const handleOnNext = () => {
const newIdx = claimScreen.idx + 1
Expand Down Expand Up @@ -48,37 +45,53 @@ export function Claim({ link }: { link: string }) {
}

function getEthersProvider({ chainId }: { chainId?: number } = {}) {
const publicClient = getPublicClient({ chainId })
return publicClientToProvider(publicClient)
try {
const publicClient = getPublicClient({ chainId })
return publicClientToProvider(publicClient)
} catch (error) {
console.log(error)
}
}

const getLinktype = (link: string) => {
const [, fragment] = link.split('?')
const urlSearchParams = new URLSearchParams(fragment)
const linkChainId = urlSearchParams.get('promo')
const linkVersion = urlSearchParams.get('id')
if (linkChainId && linkVersion) {
setClaimType('PROMO')
return { type: 'promo' }
} else {
return { type: 'claim' }
}
}

const checkLink = async (link: string) => {
console.log(link)
const promoList: {
[key: string]: string
} = JSON.parse(process.env.PROMO_LIST ?? '')
const type = getLinktype(link)
var localLink
if (type.type === 'promo') {
localLink = promoList[link] ?? undefined
} else {
localLink = link
}
if (localLink === undefined) {
setLinkState('ALREADY_CLAIMED')
return
}

const [baseUrl, fragment] = link.split('#')
console.log('baseUrl', baseUrl)
console.log('fragment', fragment)
const [, fragment] = localLink.split('#')
const urlSearchParams = new URLSearchParams(fragment)
const linkChainId = urlSearchParams.get('c')
// const linkChainId = link.get('c')
// get the chain id from the link (params are after #)
// const urlSearchParams = new URLSearchParams(link);
// const linkChainId = urlSearchParams.get('c');
console.log('linkChainId', linkChainId)

const _link = link.toString()
// TODO: @borcherd I changed this so it includes the full link
const pageUrl = window.location.href
setClaimLink(pageUrl)
console.log('completeLink', pageUrl)

const provider = getEthersProvider({ chainId: Number(linkChainId) })
console.log('provider', provider)
console.log('linkChainId', linkChainId)
const _link = localLink.toString()
setClaimLink(_link)

try {
console.log('getting link details')
const linkDetails: interfaces.ILinkDetails = await peanut.getLinkDetails(provider, pageUrl, true)
const linkDetails: interfaces.ILinkDetails = await peanut.getLinkDetails(provider, _link, true)
console.log('linkDetails', linkDetails)

if (Number(linkDetails.tokenAmount) <= 0) {
Expand Down Expand Up @@ -133,6 +146,8 @@ export function Claim({ link }: { link: string }) {
claimDetails,
txHash,
setTxHash,
claimType,
setClaimType,
} as _consts.IClaimScreenProps)}
</global_components.CardWrapper>
)
Expand Down
7 changes: 6 additions & 1 deletion src/components/claim/views/claim.view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import * as store from '@/store'
import * as consts from '@/consts'
import dropdown_svg from '@/assets/dropdown.svg'

export function ClaimView({ onNextScreen, claimDetails, claimLink, setTxHash }: _consts.IClaimScreenProps) {
export function ClaimView({ onNextScreen, claimDetails, claimLink, setTxHash, claimType }: _consts.IClaimScreenProps) {
const { isConnected, address } = useAccount()
const { open } = useWeb3Modal()
const [isDropdownOpen, setIsDropdownOpen] = useState(false)
Expand Down Expand Up @@ -117,6 +117,11 @@ export function ClaimView({ onNextScreen, claimDetails, claimLink, setTxHash }:

return (
<>
{claimType == 'PROMO' && (
<h2 className="my-2 mb-4 text-center text-base font-black ">
Oh, you found a promo code! Enjoy your free money!
</h2>
)}
<h2 className="my-2 mb-0 text-center text-3xl font-black lg:text-6xl ">
Claim {utils.formatTokenAmount(Number(claimDetails.tokenAmount))} {claimDetails.tokenSymbol}
</h2>
Expand Down

0 comments on commit dfe8d4d

Please sign in to comment.