Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 1x 15x | import React, { createContext } from 'react';
import { gameEventConsumeForWebviewApi, gameEventConsumeWithTokenApi } from '@lib/apis/statistics';
import { EventConsumeRequest } from '@uniquegood/realworld-statistics-interface';
import { useIsForWebviewContext } from '@lib/providers/IsForWebview';
type EventProps = Pick<EventConsumeRequest, 'eventType' | 'metadata'>;
const ContentAnalyticsContext = createContext<{
consumeEvent: (props: EventProps) => Promise<unknown>;
}>({
consumeEvent: async () => {
// pass
}
});
export const useContentAnalyticsContext = () => React.useContext(ContentAnalyticsContext);
export function ContentAnalyticsProvider({
children,
gameId,
isTest = false
}: {
children: React.ReactNode;
gameId: string;
isTest?: boolean;
}) {
const { isWebview } = useIsForWebviewContext();
const gameEventApi = React.useMemo(
() => (isWebview ? gameEventConsumeForWebviewApi : gameEventConsumeWithTokenApi),
[isWebview]
);
const consumeEvent = React.useCallback(
async (props: EventProps) => {
try {
if (isTest) return;
await gameEventApi.consumeEvent({
gameId,
createdAt: new Date().toISOString(),
...props
});
} catch (e) {
console.warn(e);
}
},
[gameEventApi]
);
const contextValue = React.useMemo(() => ({ consumeEvent }), [consumeEvent]);
return (
<ContentAnalyticsContext.Provider value={contextValue}>
{children}
</ContentAnalyticsContext.Provider>
);
}
|