@@ -4,6 +4,7 @@ import { CopyIcon, DropDownArrow } from "src/icons/shared-icons";
4
4
import { Windows , Mac , Ubuntu , OSProps } from "src/icons/os-icons" ;
5
5
import { useEffect } from "react" ;
6
6
import { motion } from "framer-motion" ;
7
+ import { useOSContext } from "theme/fetch-ai-docs/contexts/os-provider" ;
7
8
8
9
interface CodeGroupProps {
9
10
children : ReactNode ;
@@ -14,6 +15,8 @@ interface CodeGroupProps {
14
15
codeBlocks : ReactNode ;
15
16
dynamic ?: boolean ;
16
17
digest ?: string ;
18
+ selectedOs : string ;
19
+ handleOSChange : ( newOs : string ) => void ;
17
20
}
18
21
19
22
interface CodeBlockProps {
@@ -35,6 +38,8 @@ type CodeBoxProps = {
35
38
isLocalHostedFile ?: boolean ;
36
39
osBlocks : ReactNode ;
37
40
codeBlocks : ReactNode ;
41
+ selectedOs : string ;
42
+ handleOSChange : ( newOs : string ) => void ;
38
43
} ;
39
44
40
45
type CodeBlock = {
@@ -77,9 +82,6 @@ export const OsDropDown: React.FC<OsDropDownProps> = ({
77
82
const handleOptionSelect = ( option : string ) => {
78
83
onOptionSelect ( option ) ;
79
84
setIsOpen ( false ) ;
80
- if ( typeof window !== "undefined" ) {
81
- localStorage . setItem ( "storedOsOption" , JSON . stringify ( option ) ) ;
82
- }
83
85
} ;
84
86
85
87
const selectedOptionData = options . find ( ( opt ) => opt . name === selectedOption ) ;
@@ -274,24 +276,14 @@ const agentType = [
274
276
{ name : "Agentverse" , label : "hosted" } ,
275
277
] ;
276
278
277
- const safeParse = ( key : string ) => {
278
- if ( typeof window === "undefined" ) return null ;
279
-
280
- try {
281
- const storedData = localStorage . getItem ( key ) ;
282
- return storedData ? JSON . parse ( storedData ) : null ;
283
- } catch ( error ) {
284
- console . error ( `Error parsing value for key "${ key } ":` , error ) ;
285
- return null ;
286
- }
287
- } ;
288
-
289
279
export const CustomPre : React . FC < CodeBoxProps > = ( {
290
280
hasCopyCode,
291
281
isLocalHostedFile,
292
282
isOSFile,
293
283
codeBlocks,
294
284
osBlocks,
285
+ selectedOs,
286
+ handleOSChange,
295
287
} ) => {
296
288
const [ isCopied , setIsCopied ] = useState ( false ) ;
297
289
const codeRef = useRef < HTMLDivElement > ( null ) ;
@@ -312,11 +304,6 @@ export const CustomPre: React.FC<CodeBoxProps> = ({
312
304
: agentType [ 0 ] . name ;
313
305
314
306
const [ selectedType , setSelectedType ] = useState ( localHostdType ) ;
315
- const [ selectedOS , setSelectedOS ] = useState < string > ( "windows" ) ;
316
- useEffect ( ( ) => {
317
- const osFromStorage = safeParse ( "storedOsOption" ) ;
318
- setSelectedOS ( osFromStorage || "windows" ) ;
319
- } , [ ] ) ;
320
307
321
308
const filteredAgentType =
322
309
child ?. length === 2
@@ -343,11 +330,11 @@ export const CustomPre: React.FC<CodeBoxProps> = ({
343
330
const renderOsBlock = ( ) => {
344
331
return React . Children . map ( osBlocks , ( child ) => {
345
332
if ( React . isValidElement < CodeBlockProps > ( child ) ) {
346
- if ( selectedOS === "windows" && child ?. props ?. windows ) {
333
+ if ( selectedOs === "windows" && child ?. props ?. windows ) {
347
334
return codeBlocks && child ?. props ?. children ;
348
- } else if ( selectedOS === "mac" && child ?. props ?. mac ) {
335
+ } else if ( selectedOs === "mac" && child ?. props ?. mac ) {
349
336
return codeBlocks && child ?. props ?. children ;
350
- } else if ( selectedOS === "ubuntu" && child ?. props ?. ubuntu ) {
337
+ } else if ( selectedOs === "ubuntu" && child ?. props ?. ubuntu ) {
351
338
return codeBlocks && child ?. props ?. children ;
352
339
}
353
340
}
@@ -369,7 +356,7 @@ export const CustomPre: React.FC<CodeBoxProps> = ({
369
356
}
370
357
}
371
358
}
372
- } , [ isLocalHostedFile , selectedType , codeBlocks , isOSFile , selectedOS ] ) ;
359
+ } , [ isLocalHostedFile , selectedType , codeBlocks , isOSFile , selectedOs ] ) ;
373
360
374
361
const handleCopy = ( ) => {
375
362
const codeElements = codeRef . current ?. querySelectorAll ( "code" ) ;
@@ -408,8 +395,8 @@ export const CustomPre: React.FC<CodeBoxProps> = ({
408
395
) }
409
396
{ isOSFile && (
410
397
< OsDropDown
411
- selectedOption = { selectedOS }
412
- onOptionSelect = { setSelectedOS }
398
+ selectedOption = { selectedOs }
399
+ onOptionSelect = { handleOSChange }
413
400
placeholder = "Select Language"
414
401
options = { osmenu as [ ] }
415
402
/>
@@ -540,6 +527,13 @@ export const CodeGroup: React.FC<CodeGroupProps> = ({
540
527
} ,
541
528
) ;
542
529
530
+ const { selectedOS, setSelectedOS } = useOSContext ( ) ;
531
+
532
+ const handleOSChange = ( newOS : string ) => {
533
+ setSelectedOS ( newOS ) ;
534
+ localStorage . setItem ( "storedOsOption" , newOS ) ;
535
+ } ;
536
+
543
537
const osBlocks = React . Children . toArray ( children ) . filter (
544
538
( child ) : child is React . ReactElement < CodeBlockProps > => {
545
539
if ( ! React . isValidElement ( child ) ) return false ;
@@ -559,6 +553,8 @@ export const CodeGroup: React.FC<CodeGroupProps> = ({
559
553
hasCopy,
560
554
codeBlocks,
561
555
osBlocks,
556
+ selectedOs : selectedOS ,
557
+ handleOSChange,
562
558
} ,
563
559
) ;
564
560
@@ -574,11 +570,15 @@ export const DocsCode: React.FC<CodeGroupProps> = ({
574
570
isOSFile,
575
571
hasCopy,
576
572
osBlocks,
573
+ selectedOs,
574
+ handleOSChange,
577
575
} ) => {
578
576
return (
579
577
< div className = "nx-mt-3" >
580
578
< CustomPre
581
579
isLocalHostedFile = { isLocalHostedFile }
580
+ handleOSChange = { handleOSChange }
581
+ selectedOs = { selectedOs }
582
582
isOSFile = { isOSFile }
583
583
hasCopyCode = { hasCopy }
584
584
codeBlocks = { codeBlocks }
0 commit comments