docs: integrate reo.dev (#13192)

This commit is contained in:
Shahed Nasser authored and GitHub committed 2025-08-13 11:53:01 +03:00
1 parent f1da73cb58
commit 96f4ed90ad
15 files changed
+68 -13

No files matched your search

+1
View File
@@ -17,3 +17,4 @@ ALGOLIA_WRITE_API_KEY=
ANALYZE_BUNDLE= ANALYZE_BUNDLE=
NEXT_PUBLIC_INTEGRATION_ID= NEXT_PUBLIC_INTEGRATION_ID=
NEXT_PUBLIC_GA_ID= NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_REO_DEV_CLIENT_ID=
+4 -1
View File
@@ -16,7 +16,10 @@ type ProvidersProps = {
const Providers = ({ children }: ProvidersProps) => { const Providers = ({ children }: ProvidersProps) => {
return ( return (
<AnalyticsProvider writeKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}> <AnalyticsProvider
segmentWriteKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}
reoDevKey={process.env.NEXT_PUBLIC_REO_DEV_CLIENT_ID}
>
<SiteConfigProvider config={config}> <SiteConfigProvider config={config}>
<PageLoadingProvider> <PageLoadingProvider>
<ScrollControllerProvider scrollableSelector="#main"> <ScrollControllerProvider scrollableSelector="#main">
+1
View File
@@ -19,3 +19,4 @@ NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_PROD_BASE_URL= NEXT_PUBLIC_PROD_BASE_URL=
NEXT_PUBLIC_INTEGRATION_ID= NEXT_PUBLIC_INTEGRATION_ID=
NEXT_MCP_SERVER_URL= NEXT_MCP_SERVER_URL=
NEXT_PUBLIC_REO_DEV_CLIENT_ID=
+4 -1
View File
@@ -23,7 +23,10 @@ type ProvidersProps = {
const Providers = ({ children, aiAssistantProps = {} }: ProvidersProps) => { const Providers = ({ children, aiAssistantProps = {} }: ProvidersProps) => {
return ( return (
<AnalyticsProvider writeKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}> <AnalyticsProvider
segmentWriteKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}
reoDevKey={process.env.NEXT_PUBLIC_REO_DEV_CLIENT_ID}
>
<SiteConfigProvider config={config}> <SiteConfigProvider config={config}>
<LearningPathProvider> <LearningPathProvider>
<NotificationProvider> <NotificationProvider>
+1
View File
@@ -16,3 +16,4 @@ ANALYZE_BUNDLE=
CLOUDINARY_CLOUD_NAME= CLOUDINARY_CLOUD_NAME=
NEXT_PUBLIC_GA_ID= NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_INTEGRATION_ID= NEXT_PUBLIC_INTEGRATION_ID=
NEXT_PUBLIC_REO_DEV_CLIENT_ID=
+4 -1
View File
@@ -24,7 +24,10 @@ type ProvidersProps = {
const Providers = ({ children }: ProvidersProps) => { const Providers = ({ children }: ProvidersProps) => {
return ( return (
<AnalyticsProvider writeKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}> <AnalyticsProvider
segmentWriteKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}
reoDevKey={process.env.NEXT_PUBLIC_REO_DEV_CLIENT_ID}
>
<SiteConfigProvider config={config}> <SiteConfigProvider config={config}>
<MobileProvider> <MobileProvider>
<ColorModeProvider> <ColorModeProvider>
+1
View File
@@ -20,3 +20,4 @@ NEXT_PUBLIC_AI_API_ASSISTANT_RECAPTCHA_SITE_KEY=
CLOUDINARY_CLOUD_NAME= CLOUDINARY_CLOUD_NAME=
NEXT_PUBLIC_GA_ID= NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_INTEGRATION_ID= NEXT_PUBLIC_INTEGRATION_ID=
NEXT_PUBLIC_REO_DEV_CLIENT_ID=
+4 -1
View File
@@ -21,7 +21,10 @@ type ProvidersProps = {
const Providers = ({ children }: ProvidersProps) => { const Providers = ({ children }: ProvidersProps) => {
return ( return (
<AnalyticsProvider writeKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}> <AnalyticsProvider
segmentWriteKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}
reoDevKey={process.env.NEXT_PUBLIC_REO_DEV_CLIENT_ID}
>
<SiteConfigProvider config={config}> <SiteConfigProvider config={config}>
<LearningPathProvider <LearningPathProvider
baseUrl={process.env.NEXT_PUBLIC_BASE_PATH || "/resources"} baseUrl={process.env.NEXT_PUBLIC_BASE_PATH || "/resources"}
+1
View File
@@ -8,3 +8,4 @@ NEXT_PUBLIC_ALGOLIA_APP_ID=
NEXT_PUBLIC_SEGMENT_API_KEY= NEXT_PUBLIC_SEGMENT_API_KEY=
NEXT_PUBLIC_GA_ID= NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_INTEGRATION_ID= NEXT_PUBLIC_INTEGRATION_ID=
NEXT_PUBLIC_REO_DEV_CLIENT_ID=
+4 -1
View File
@@ -18,7 +18,10 @@ type ProvidersProps = {
const Providers = ({ children }: ProvidersProps) => { const Providers = ({ children }: ProvidersProps) => {
return ( return (
<AnalyticsProvider writeKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}> <AnalyticsProvider
segmentWriteKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}
reoDevKey={process.env.NEXT_PUBLIC_REO_DEV_CLIENT_ID}
>
<SiteConfigProvider config={siteConfig}> <SiteConfigProvider config={siteConfig}>
<ScrollControllerProvider scrollableSelector="#main"> <ScrollControllerProvider scrollableSelector="#main">
<SidebarProvider> <SidebarProvider>
+1
View File
@@ -16,3 +16,4 @@ ANALYZE_BUNDLE=
CLOUDINARY_CLOUD_NAME= CLOUDINARY_CLOUD_NAME=
NEXT_PUBLIC_GA_ID= NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_INTEGRATION_ID= NEXT_PUBLIC_INTEGRATION_ID=
NEXT_PUBLIC_REO_DEV_CLIENT_ID=
+4 -1
View File
@@ -24,7 +24,10 @@ type ProvidersProps = {
const Providers = ({ children }: ProvidersProps) => { const Providers = ({ children }: ProvidersProps) => {
return ( return (
<AnalyticsProvider writeKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}> <AnalyticsProvider
segmentWriteKey={process.env.NEXT_PUBLIC_SEGMENT_API_KEY}
reoDevKey={process.env.NEXT_PUBLIC_REO_DEV_CLIENT_ID}
>
<SiteConfigProvider config={config}> <SiteConfigProvider config={config}>
<MobileProvider> <MobileProvider>
<ColorModeProvider> <ColorModeProvider>
+1
View File
@@ -79,6 +79,7 @@
"react-tooltip": "^5.28.0", "react-tooltip": "^5.28.0",
"react-transition-group": "^4.4.5", "react-transition-group": "^4.4.5",
"react-uuid": "^2.0.0", "react-uuid": "^2.0.0",
"reodotdev": "^1.0.0",
"slugify": "^1.6.6" "slugify": "^1.6.6"
}, },
"overrides": { "overrides": {
@@ -8,6 +8,8 @@ import React, {
useState, useState,
} from "react" } from "react"
import { Analytics, AnalyticsBrowser } from "@segment/analytics-next" import { Analytics, AnalyticsBrowser } from "@segment/analytics-next"
// @ts-expect-error Doesn't have a types package
import { loadReoScript } from "reodotdev"
export type ExtraData = { export type ExtraData = {
section?: string section?: string
@@ -32,14 +34,16 @@ export type TrackedEvent = {
const AnalyticsContext = createContext<AnalyticsContextType | null>(null) const AnalyticsContext = createContext<AnalyticsContextType | null>(null)
export type AnalyticsProviderProps = { export type AnalyticsProviderProps = {
writeKey?: string segmentWriteKey?: string
reoDevKey?: string
children?: React.ReactNode children?: React.ReactNode
} }
const LOCAL_STORAGE_KEY = "ajs_anonymous_id" const LOCAL_STORAGE_KEY = "ajs_anonymous_id"
export const AnalyticsProvider = ({ export const AnalyticsProvider = ({
writeKey = "temp", segmentWriteKey = "temp",
reoDevKey,
children, children,
}: AnalyticsProviderProps) => { }: AnalyticsProviderProps) => {
// loaded is used to ensure that a connection has been made to segment // loaded is used to ensure that a connection has been made to segment
@@ -50,11 +54,11 @@ export const AnalyticsProvider = ({
const analyticsBrowser = new AnalyticsBrowser() const analyticsBrowser = new AnalyticsBrowser()
const [queue, setQueue] = useState<TrackedEvent[]>([]) const [queue, setQueue] = useState<TrackedEvent[]>([])
const init = useCallback(() => { const initSegment = useCallback(() => {
if (!loaded) { if (!loaded) {
analyticsBrowser analyticsBrowser
.load( .load(
{ writeKey }, { writeKey: segmentWriteKey },
{ {
initialPageview: true, initialPageview: true,
user: { user: {
@@ -72,7 +76,7 @@ export const AnalyticsProvider = ({
) )
.finally(() => setLoaded(true)) .finally(() => setLoaded(true))
} }
}, [loaded, writeKey]) }, [loaded, segmentWriteKey])
const track = useCallback( const track = useCallback(
async ( async (
@@ -110,8 +114,8 @@ export const AnalyticsProvider = ({
) )
useEffect(() => { useEffect(() => {
init() initSegment()
}, [init]) }, [initSegment])
useEffect(() => { useEffect(() => {
if (analytics && queue.length) { if (analytics && queue.length) {
@@ -123,6 +127,24 @@ export const AnalyticsProvider = ({
} }
}, [analytics, queue]) }, [analytics, queue])
useEffect(() => {
if (!reoDevKey) {
return
}
loadReoScript({
clientID: reoDevKey,
})
.then((Reo: any) => {
Reo.init({
clientID: reoDevKey,
})
})
.catch((e: any) => {
console.error(`Could not connect to Reodotdev. Error: ${e}`)
})
}, [reoDevKey])
return ( return (
<AnalyticsContext.Provider <AnalyticsContext.Provider
value={{ value={{
+8
View File
@@ -7858,6 +7858,7 @@ __metadata:
react-tooltip: ^5.28.0 react-tooltip: ^5.28.0
react-transition-group: ^4.4.5 react-transition-group: ^4.4.5
react-uuid: ^2.0.0 react-uuid: ^2.0.0
reodotdev: ^1.0.0
rimraf: ^5.0.1 rimraf: ^5.0.1
slugify: ^1.6.6 slugify: ^1.6.6
tailwind: "*" tailwind: "*"
@@ -14722,6 +14723,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"reodotdev@npm:^1.0.0":
version: 1.0.1
resolution: "reodotdev@npm:1.0.1"
checksum: 7a509431f0d27ab76e5cdee460d4ced86246057722c578c2cf16765e77e7c4cff1bd46a2cb3de2a568a4fba223e61ab99031b5b03069e3c7a40f5660c2c6fc70
languageName: node
linkType: hard
"repeat-string@npm:^1.6.1": "repeat-string@npm:^1.6.1":
version: 1.6.1 version: 1.6.1
resolution: "repeat-string@npm:1.6.1" resolution: "repeat-string@npm:1.6.1"