diff --git a/README.md b/README.md index 1fcf3684a3..8b0dffcdff 100644 --- a/README.md +++ b/README.md @@ -34,4 +34,3 @@ storyteller-frontend Documentation [lives here](./_develop). - diff --git a/package.json b/package.json index c4281daeb9..5a22ba0fd6 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,9 @@ }, "dependencies": { "@react-spring/types": "^9.7.3", + "@typeform/embed": "^4.8.1", + "@typeform/embed-react": "^3.15.0", + "local-storage": "^2.0.0", "moment": "^2.29.4", "universal-cookie": "^6.1.1", "yarn": "^1.22.19" diff --git a/packages/components/src/api/session/GetSessionInfo.ts b/packages/components/src/api/session/GetSessionInfo.ts index f9bade4f3c..ecabec16ee 100644 --- a/packages/components/src/api/session/GetSessionInfo.ts +++ b/packages/components/src/api/session/GetSessionInfo.ts @@ -20,6 +20,7 @@ export interface UserInfo { // Rollout feature flags can_access_studio: boolean, + maybe_feature_flags: string[], // Usage can_use_tts: boolean, diff --git a/packages/components/src/session/SessionWrapper.ts b/packages/components/src/session/SessionWrapper.ts index 4df52de6d4..f8726475e0 100644 --- a/packages/components/src/session/SessionWrapper.ts +++ b/packages/components/src/session/SessionWrapper.ts @@ -56,10 +56,17 @@ export class SessionWrapper { public canAccessStudio(): boolean { const hostnameAllowed = StudioRolloutHostnameAllowed(); const userAllowed = - this.sessionStateResponse?.user?.can_access_studio || false; + this.sessionStateResponse?.user?.can_access_studio || + this.sessionStateResponse?.user?.maybe_feature_flags.includes("studio") || + false; return hostnameAllowed && userAllowed; } + // Feature flag rollout for Video Style Transfer + public canAccessVideoStyleTransfer(): boolean { + return this.sessionStateResponse?.user?.maybe_feature_flags.includes("video_style_transfer") || false; + } + // Username is all lowercase public getUsername(): string | undefined { return this.sessionStateResponse?.user?.username; diff --git a/packages/fakeyou.com/package.json b/packages/fakeyou.com/package.json index 4346e671a5..51c3f24fdf 100644 --- a/packages/fakeyou.com/package.json +++ b/packages/fakeyou.com/package.json @@ -75,6 +75,7 @@ "react-select": "^5.7.0", "react-share": "^4.4.1", "react-twitch-embed": "^3.0.1", + "react-typeform-embed": "^1.0.8", "react-wavesurfer.js": "^0.0.8", "sass": "^1.57.1", "swiper": "^11.0.5", diff --git a/packages/fakeyou.com/public/fakeyou/Storyteller-Logo-1.png b/packages/fakeyou.com/public/fakeyou/Storyteller-Logo-1.png new file mode 100644 index 0000000000..1ab61d2833 Binary files /dev/null and b/packages/fakeyou.com/public/fakeyou/Storyteller-Logo-1.png differ diff --git a/packages/fakeyou.com/public/videos/landing-reel.mp4 b/packages/fakeyou.com/public/videos/landing-reel.mp4 new file mode 100644 index 0000000000..16c9b414b4 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing-reel.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/1-2d_flat_anime.mp4 b/packages/fakeyou.com/public/videos/landing/vst/1-2d_flat_anime.mp4 new file mode 100644 index 0000000000..5d9c6692f9 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/1-2d_flat_anime.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/1-3d_cartoon.mp4 b/packages/fakeyou.com/public/videos/landing/vst/1-3d_cartoon.mp4 new file mode 100644 index 0000000000..b109982340 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/1-3d_cartoon.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/1-ink_bw.mp4 b/packages/fakeyou.com/public/videos/landing/vst/1-ink_bw.mp4 new file mode 100644 index 0000000000..8a12b67007 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/1-ink_bw.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/1-origami.mp4 b/packages/fakeyou.com/public/videos/landing/vst/1-origami.mp4 new file mode 100644 index 0000000000..a57c01619a Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/1-origami.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/1-original.mp4 b/packages/fakeyou.com/public/videos/landing/vst/1-original.mp4 new file mode 100644 index 0000000000..0e85908393 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/1-original.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/2-2d_flat_anime.mp4 b/packages/fakeyou.com/public/videos/landing/vst/2-2d_flat_anime.mp4 new file mode 100644 index 0000000000..d5d8a3290f Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/2-2d_flat_anime.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/2-ink_splash.mp4 b/packages/fakeyou.com/public/videos/landing/vst/2-ink_splash.mp4 new file mode 100644 index 0000000000..504117fcc0 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/2-ink_splash.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/2-origami.mp4 b/packages/fakeyou.com/public/videos/landing/vst/2-origami.mp4 new file mode 100644 index 0000000000..336e7b0c7e Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/2-origami.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/2-original.mp4 b/packages/fakeyou.com/public/videos/landing/vst/2-original.mp4 new file mode 100644 index 0000000000..e8313e3268 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/2-original.mp4 differ diff --git a/packages/fakeyou.com/public/videos/landing/vst/2-pop_art.mp4 b/packages/fakeyou.com/public/videos/landing/vst/2-pop_art.mp4 new file mode 100644 index 0000000000..f6e3788c94 Binary files /dev/null and b/packages/fakeyou.com/public/videos/landing/vst/2-pop_art.mp4 differ diff --git a/packages/fakeyou.com/src/components/common/DropdownMenu/DropdownMenu.tsx b/packages/fakeyou.com/src/components/common/DropdownMenu/DropdownMenu.tsx index d3ae668014..606d3b92ed 100644 --- a/packages/fakeyou.com/src/components/common/DropdownMenu/DropdownMenu.tsx +++ b/packages/fakeyou.com/src/components/common/DropdownMenu/DropdownMenu.tsx @@ -32,9 +32,9 @@ export default function DropdownMenu({ return ( - {items.map(item => ( - <> - {item.onClick ? ( + {items.map(item => { + if(item.onClick){ + return(
{ @@ -53,27 +53,26 @@ export default function DropdownMenu({ {item.name}
- ) : ( - <> - {item.link && ( - onClose()} - > - - {item.icon && ( - - )} - {item.name} - - + ); + } else if (item.link) { + return( + onClose()} + > + + {item.icon && ( + )} - - )} - - ))} + {item.name} + + + ); + }//end if + return null; + })} {/*end items map */}
); } diff --git a/packages/fakeyou.com/src/components/common/Scene3D/Scene3D.tsx b/packages/fakeyou.com/src/components/common/Scene3D/Scene3D.tsx index 92708195c1..5f0bd88f63 100644 --- a/packages/fakeyou.com/src/components/common/Scene3D/Scene3D.tsx +++ b/packages/fakeyou.com/src/components/common/Scene3D/Scene3D.tsx @@ -1,5 +1,5 @@ -import React from "react"; -import IframeResizer from "iframe-resizer-react"; +import React, { useCallback, useEffect, useRef } from "react"; +//import IframeResizer from "iframe-resizer-react"; import "./Scene3D.scss"; // See the following page for Storyteller Engine's query param documentation: @@ -23,7 +23,70 @@ export default function Scene3D({ urlParams, className, }: Scene3DProps) { - let engineUrl = `https://engine.fakeyou.com?mode=${mode}`; + const engineBaseUrl = "https://engine.fakeyou.com"; + + const iframeRef = useRef(null); + + const onMessage = useCallback((event: MessageEvent) => { + console.log("engine message received", event.data, event); + + if (event.origin !== engineBaseUrl) + return; + + if (event.data === "studio-ready") { + console.log("studio-ready message (1)"); + + const studio = iframeRef.current?.contentWindow; + if (!studio) return; + + console.log("studio-ready message (2)"); + + studio.postMessage("save-scene", engineBaseUrl); + } else if ( + typeof event.data === "string" + && event.data.startsWith("scene-saved:") + ) { + const mediaToken = event.data.match(/scene-saved:(.+)/)?.[1]; + console.log("saved scene media token:", mediaToken); + + } else if (event.data === "scene-save-failed") { + console.error("Failed to save the scene!"); + } + }, []); + + + useEffect(() => { + /* + if (iframeRef && iframeRef.current) { + console.log("installing event listener for messages"); + + // NB: Compiler complains about ref going out of scope before destructor is called. + let ref = iframeRef.current; + + // TODO(bt,2024-03-08): Fix typescript 'any' hack + (ref as any).addEventListener("message", onMessage); + + return () => { + console.log("uninstalling event listener for messages"); + + // TODO(bt,2024-03-08): Fix typescript 'any' hack + (ref as any).removeEventListener("message", onMessage); + } + } + */ + + console.log("installing event listener for messages"); + window.addEventListener("message", onMessage); + + return () => { + console.log("uninstalling event listener for messages"); + window.removeEventListener("message", onMessage); + } + }, [onMessage]); + //}, [onMessage, iframeRef]); + + + let engineUrl = `${engineBaseUrl}/?mode=${mode}`; if (sceneMediaFileToken) { const sceneUrlRef = `remote://${sceneMediaFileToken}.scn.ron`; @@ -32,13 +95,22 @@ export default function Scene3D({ engineUrl += `&objectId=${objectId}`; } + console.log('installing iframe engine and callbacks'); + return (
- + {/**/} +