diff options
Diffstat (limited to 'bs5/server/pages/ServerOnlyRSC.re')
-rw-r--r-- | bs5/server/pages/ServerOnlyRSC.re | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/bs5/server/pages/ServerOnlyRSC.re b/bs5/server/pages/ServerOnlyRSC.re new file mode 100644 index 0000000..8e166aa --- /dev/null +++ b/bs5/server/pages/ServerOnlyRSC.re @@ -0,0 +1,46 @@ +let handler = request => { + let isRSCheader = + Dream.header(request, "Accept") == Some("application/react.component"); + + let app = + <DemoLayout background=Theme.Color.Gray2> + <div className="flex flex-col items-center justify-center h-full gap-4"> + <span className="text-gray-400 text-center"> + {React.string( + "The client will fetch the server component from the server and run createFromFetch", + )} + <br /> + {React.string("asking for the current time (in seconds) since")} + <br /> + {React.string("00:00:00 GMT, Jan. 1, 1970")} + </span> + <h1 + className={Cx.make([ + "font-bold text-4xl", + Theme.text(Theme.Color.Gray11), + ])}> + {React.string(string_of_float(Unix.gettimeofday()))} + </h1> + </div> + </DemoLayout>; + + if (isRSCheader) { + Dream.stream(response_stream => { + let%lwt () = + ReactServerDOM.render_model( + ~debug=true, + ~subscribe=data => Dream.write(response_stream, data), + app, + ); + Lwt.return(); + }); + } else { + Dream.html( + ReactDOM.renderToString( + <Document script="/static/demo/ServerOnlyRSC.re.js"> + React.null + </Document>, + ), + ); + }; +}; |