@@ -8,7 +8,11 @@ import {
88} from "@/client/components/DropdownMenu" ;
99import { ResizablePanel } from "@/client/components/Resizable" ;
1010import * as Tabs from "@/client/components/Tabs" ;
11- import { Tooltip , TooltipContent , TooltipTrigger } from "@/client/components/Tooltip" ;
11+ import {
12+ Tooltip ,
13+ TooltipContent ,
14+ TooltipTrigger ,
15+ } from "@/client/components/Tooltip" ;
1216import { useStore } from "@/client/store" ;
1317import {
1418BookIcon ,
@@ -31,6 +35,8 @@ import { highlight, languages } from "prismjs/components/prism-core";
3135import "prismjs/components/prism-hcl" ;
3236import "prismjs/themes/prism.css" ;
3337import { cn } from "@/utils/cn" ;
38+ import { rpc } from "@/utils/rpc" ;
39+ import { useParams } from "react-router" ;
3440
3541// Adds line numbers to the highlight.
3642const hightlightWithLineNumbers = ( input : string , language : unknown ) =>
@@ -43,6 +49,7 @@ const hightlightWithLineNumbers = (input: string, language: unknown) =>
4349. join ( "\n" ) ;
4450
4551export const Editor : FC = ( ) => {
52+ const params = useParams ( ) ;
4653const $code = useStore ( ( state ) => state . code ) ;
4754const $setCode = useStore ( ( state ) => state . setCode ) ;
4855
@@ -58,6 +65,28 @@ export const Editor: FC = () => {
5865setCodeCopied ( ( ) => true ) ;
5966} ;
6067
68+ useEffect ( ( ) => {
69+ const loadCode = async ( ) => {
70+ const { id } = params ;
71+ if ( ! id ) {
72+ return ;
73+ }
74+
75+ try {
76+ const res = await rpc . parameters [ ":id" ] . $get ( { param : { id } } ) ;
77+ if ( res . ok ) {
78+ const { code } = await res . json ( ) ;
79+ $setCode ( code ) ;
80+ }
81+ } catch ( e ) {
82+ console . error ( `Error loading playground: ${ e } ` ) ;
83+ return ;
84+ }
85+ } ;
86+
87+ loadCode ( ) ;
88+ } , [ params , $setCode ] ) ;
89+
6190useEffect ( ( ) => {
6291if ( ! codeCopied ) {
6392return ;
@@ -136,7 +165,12 @@ export const Editor: FC = () => {
136165tab !== "code" && "hidden" ,
137166) }
138167>
139- < Button className = "pointer-events-auto z-10" variant = "subtle" size = "sm" onClick = { onCopy } >
168+ < Button
169+ className = "pointer-events-auto z-10"
170+ variant = "subtle"
171+ size = "sm"
172+ onClick = { onCopy }
173+ >
140174{ codeCopied ? < CheckIcon /> : < CopyIcon /> } Copy
141175</ Button >
142176</ div >
0 commit comments