1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-06-28 00:27:49 +02:00
market/src/@context/CookieConsent.tsx
mihaisc d1e21b7f03
Various fixes in the pool component (#1327)
* remove legacy check to prevent rug pull

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* various fixes

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* remove old prop

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* remove old prop

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* add expected output to remove

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* remove console.logs

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* fix max calculations

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* refactors

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* temp fixes for build

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* fixes

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* local calc for pice and liquidity

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* remove var

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* fix

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* fix

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* fix profile liquidity

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* global context, opc fee

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* comment

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* various fixes

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* refactor global context

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* remove nesting from market context

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* fix build

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* fix undefined appConfig

Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro>

* direct import of appConfig & siteContent

* this never changes on run time, so we should never have to wait for it and have it in js bundle at all times
* in utility methods, import directly
* for components, import directly in MarketMetadata context  and pass through

* remove screen CSS fixes

* put back auto-fetching indicator, move manual refresh action behind debug

Co-authored-by: Matthias Kretschmann <m@kretschmann.io>
2022-04-22 02:38:35 +02:00

138 lines
3.6 KiB
TypeScript

import React, {
useContext,
useState,
createContext,
useEffect,
ReactNode,
ReactElement
} from 'react'
import { deleteCookie, getCookieValue, setCookie } from '@utils/cookies'
import { UseGdprMetadata, useGdprMetadata } from '@hooks/useGdprMetadata'
import { useMarketMetadata } from './MarketMetadata'
export enum CookieConsentStatus {
NOT_AVAILABLE = -1,
APPROVED = 0,
REJECTED = 1
}
export interface ConsentStatus {
[name: string]: CookieConsentStatus
}
interface ConsentProviderValue {
cookies: UseGdprMetadata['optionalCookies']
cookieConsentStatus: ConsentStatus
setConsentStatus: (cookieName: string, status: CookieConsentStatus) => void
resetConsentStatus: (status?: CookieConsentStatus) => void
}
const ConsentContext = createContext({} as ConsentProviderValue)
function ConsentProvider({ children }: { children: ReactNode }): ReactElement {
const cookies = useGdprMetadata()
const { appConfig } = useMarketMetadata()
const [consentStatus, setConsentStatus] = useState({} as ConsentStatus)
function resetConsentStatus(status = CookieConsentStatus.NOT_AVAILABLE) {
const resetCookieConsent = {} as ConsentStatus
cookies.optionalCookies?.map((cookie) => {
deleteCookie(cookie.cookieName)
resetCookieConsent[cookie.cookieName] = status
})
setConsentStatus(resetCookieConsent)
}
function setCookieConsentStatus(
cookieName: string,
status: CookieConsentStatus
) {
setConsentStatus({ ...consentStatus, [cookieName]: status })
}
function handleAccept(cookieName: string) {
setCookie(cookieName, true)
switch (cookieName) {
case 'AnalyticsCookieConsent':
break
default:
break
// Add your specific logic here
// e.g.
/* function handleAnalytics() {
ReactGA.initialize(analyticsId)
ReactGA.pageview(window.location.pathname + window.location.search)
} */
}
}
function handleReject(cookieName: string) {
setCookie(cookieName, false)
switch (cookieName) {
case 'AnalyticsCookieConsent':
break
default:
break
// Add your specific logic here
}
}
useEffect(() => {
if (appConfig?.privacyPreferenceCenter !== 'true') return
const initialValues = {} as ConsentStatus
cookies.optionalCookies?.map((cookie) => {
const cookieValue = getCookieValue(cookie.cookieName)
switch (cookieValue) {
case 'true':
initialValues[cookie.cookieName] = CookieConsentStatus.APPROVED
break
case 'false':
initialValues[cookie.cookieName] = CookieConsentStatus.REJECTED
break
default:
initialValues[cookie.cookieName] = CookieConsentStatus.NOT_AVAILABLE
break
}
})
setConsentStatus(initialValues)
}, [cookies.optionalCookies, appConfig])
useEffect(() => {
Object.keys(consentStatus).map((cookieName) => {
switch (consentStatus[cookieName]) {
case CookieConsentStatus.APPROVED:
handleAccept(cookieName)
break
case CookieConsentStatus.REJECTED:
handleReject(cookieName)
break
}
})
}, [consentStatus])
return (
<ConsentContext.Provider
value={
{
cookies: cookies.optionalCookies || [],
cookieConsentStatus: consentStatus,
setConsentStatus: setCookieConsentStatus,
resetConsentStatus
} as ConsentProviderValue
}
>
{children}
</ConsentContext.Provider>
)
}
const useConsent = (): ConsentProviderValue => useContext(ConsentContext)
export { ConsentProvider, useConsent, ConsentContext }
export default ConsentProvider