diff --git a/packages/fakeyou.com/src/components/common/FileDetails/FileDetails.tsx b/packages/fakeyou.com/src/components/common/FileDetails/FileDetails.tsx index 89bed9880a..c46ce691af 100644 --- a/packages/fakeyou.com/src/components/common/FileDetails/FileDetails.tsx +++ b/packages/fakeyou.com/src/components/common/FileDetails/FileDetails.tsx @@ -1,5 +1,5 @@ -import React from 'react'; -import { a, useSpring } from '@react-spring/web'; +import React from "react"; +import { a, useSpring } from "@react-spring/web"; import { FontAwesomeIcon as Icon } from "@fortawesome/react-fontawesome"; import { faTrash } from "@fortawesome/pro-solid-svg-icons"; import "./FileDetails.scss"; @@ -10,51 +10,65 @@ interface Props { file?: any; hideClearDetails?: boolean; icon?: any; - className?: string + className?: string; } -export default function FileDetails({ className, clear = () => {}, disabled, file, hideClearDetails, icon }: Props) { +export default function FileDetails({ + className, + clear = () => {}, + disabled, + file, + hideClearDetails, + icon, +}: Props) { const fileSize = file && file.size >= 1024 * 1024 ? (file.size / 1024 / 1024).toFixed(2) + " MB" : file - ? `${Math.floor(file.size / 1024)} KB` - : null; + ? `${Math.floor(file.size / 1024)} KB` + : null; const style = useSpring({ config: { mass: 1, tension: 120, friction: 14 }, - opacity: disabled ? 0 : 1 + opacity: disabled ? 0 : 1, }); - return - { icon && } -
-
- { file.name.slice(0, file.name.lastIndexOf(".")) } + return ( + + {icon && } +
+
+ {file.name.slice(0, file.name.lastIndexOf("."))} - - {`${ file.name.split(".").pop().toUpperCase() } file size: ${ fileSize }`} - + + {`${file.name + .split(".") + .pop() + .toUpperCase()} file size: ${fileSize}`} + +
- { !hideClearDetails && - - } -
- { !hideClearDetails && } - ; -}; + + + )} + + ); +} diff --git a/packages/fakeyou.com/src/components/common/SelectSearcher/SelectSearcher.tsx b/packages/fakeyou.com/src/components/common/SelectSearcher/SelectSearcher.tsx index fe035c349d..85386a1a60 100644 --- a/packages/fakeyou.com/src/components/common/SelectSearcher/SelectSearcher.tsx +++ b/packages/fakeyou.com/src/components/common/SelectSearcher/SelectSearcher.tsx @@ -9,84 +9,88 @@ import { faTrash } from "@fortawesome/free-solid-svg-icons"; interface TabConfig { label: string; - searcherKey: string; + searcherKey?: string; weightTypeFilter?: string; + mediaTypeFilter?: string; // NOT DONE } interface SelectSearcherProps { label?: string; tabs: TabConfig[]; + modalTitle?: string; } -const SelectSearcher = memo(({ label, tabs }: SelectSearcherProps) => { - const [isModalOpen, setIsModalOpen] = useState(false); - const { weightTitle, setWeightTitle } = useToken(); +const SelectSearcher = memo( + ({ label, tabs, modalTitle = "Select" }: SelectSearcherProps) => { + const [isModalOpen, setIsModalOpen] = useState(false); + const { weightTitle, setWeightTitle } = useToken(); - const openModal = () => { - setIsModalOpen(true); - }; + const openModal = () => { + setIsModalOpen(true); + }; - const closeModal = () => { - setIsModalOpen(false); - }; + const closeModal = () => { + setIsModalOpen(false); + }; - const handleRemove = () => { - setWeightTitle && setWeightTitle(""); - }; + const handleRemove = () => { + setWeightTitle && setWeightTitle(""); + }; - const searchTabs = tabs.map(tab => ({ - label: tab.label, - content: ( - - ), - padding: true, - })); + const searchTabs = tabs.map(tab => ({ + label: tab.label, + content: tab.searcherKey ? ( + + ) : null, + padding: true, + })); - return ( - <> -
- {label && } + return ( + <> +
+ {label && } -
- -
-
- } - showButtons={false} - padding={false} - large={true} - position="top" - mobileFullscreen={true} - /> - - ); -}); + } + showButtons={false} + padding={false} + large={true} + position="top" + mobileFullscreen={true} + /> + + ); + } +); export default SelectSearcher; diff --git a/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx b/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx index 02da615b0d..1af03e7fac 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx @@ -2,90 +2,122 @@ import React, { useState } from "react"; import { useLocalize } from "hooks"; import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper"; -import { FrontendInferenceJobType, InferenceJob } from "@storyteller/components/src/jobs/InferenceJob"; +import { + FrontendInferenceJobType, + InferenceJob, +} from "@storyteller/components/src/jobs/InferenceJob"; -import { PageVideoProvision } from "./components/pageVideoProvision"; +// import { PageVideoProvision } from "./components/pageVideoProvision"; import { PageInferenceStatuses } from "./components/pageInferenceStatuses"; -import { BasicVideo } from "components/common"; +import { BasicVideo, Container, Panel } from "components/common"; +import PageHeader from "components/layout/PageHeader"; +import Tabs from "components/common/Tabs"; +import { Redirect, useLocation } from "react-router-dom"; +import TabContentUpload from "./components/tabContentUpload"; +import TabContentLibrary from "./components/tabContentLibrary"; export default function VideoMotionCapture(props: { - sessionSubscriptionsWrapper: SessionSubscriptionsWrapper, + sessionSubscriptionsWrapper: SessionSubscriptionsWrapper; enqueueInferenceJob: ( jobToken: string, frontendInferenceJobType: FrontendInferenceJobType - ) => void, - inferenceJobs: Array, - inferenceJobsByCategory: Map>, -}){ - + ) => void; + inferenceJobs: Array; + inferenceJobsByCategory: Map>; +}) { const { enqueueInferenceJob } = props; const { t } = useLocalize("VideoMotionCapture"); - enum pageStates { VIDEO_PROVISION, SHOW_JOB_STATUS } - const { VIDEO_PROVISION, SHOW_JOB_STATUS} = pageStates; + enum pageStates { + VIDEO_PROVISION, + SHOW_JOB_STATUS, + } + const { VIDEO_PROVISION, SHOW_JOB_STATUS } = pageStates; const [pageState, setPageState] = useState<{ - index:number, - inputMediaToken: string, - jobToken: string, - resultMediaToken: string - }>({ index: VIDEO_PROVISION, inputMediaToken: "", jobToken: "", resultMediaToken: ""}); - - const handlePageState = ( - {tokenType, token }:{tokenType:string, token:string | undefined} - ) => { - if(token && tokenType === "jobToken"){ + index: number; + inputMediaToken: string; + jobToken: string; + resultMediaToken: string; + }>({ + index: VIDEO_PROVISION, + inputMediaToken: "", + jobToken: "", + resultMediaToken: "", + }); + + const handlePageState = ({ + tokenType, + token, + }: { + tokenType: string; + token: string | undefined; + }) => { + if (token && tokenType === "jobToken") { setPageState({ ...pageState, index: SHOW_JOB_STATUS, - jobToken: token - }) + jobToken: token, + }); } + }; + + const { pathname } = useLocation(); + + if (pathname === `/video-mocap` || pathname === `/video-mocap/`) { + return ; } + const tabs = [ + { + label: t("tabTitle.upload"), + content: , + to: "/video-mocap/upload", + padding: true, + }, + { + label: t("tabTitle.library"), + content: , + to: "/video-mocap/select-media", + padding: true, + }, + ]; + return ( -
-
- - {/*Header section*/} -
-

{t("headings.title")}

-

{t("headings.subtitle")}

-
- - -
- + + + +
{/*Video Provision Tabs & Job Statuses*/}
- { pageState.index === VIDEO_PROVISION && - - } - { pageState.index === SHOW_JOB_STATUS && + {pageState.index === VIDEO_PROVISION && } + {pageState.index === SHOW_JOB_STATUS && ( - } + )}
{/*ENDS Video Chooser Tabs*/} - +
- + + +
- -
{/*2nd row*/} - -
{/*panel*/} -
- ) +
+ {/*2nd row*/} + + {/*panel*/} + + ); } diff --git a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/VideoInput/VideoInput.tsx b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/VideoInput/VideoInput.tsx index 6b8a0b308f..3f23c82050 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/VideoInput/VideoInput.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/VideoInput/VideoInput.tsx @@ -1,83 +1,89 @@ import React, { useEffect } from "react"; -import { useSpring } from '@react-spring/web'; +import { useSpring } from "@react-spring/web"; import { FileDetails, FileWrapper, FileLabel } from "components/common"; -import { faFileVideo } from "@fortawesome/pro-solid-svg-icons"; +import { faFileVideo, faVideo } from "@fortawesome/pro-solid-svg-icons"; import "./style.scss"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; interface Props { //blob, clear, file, inputProps comes from file - blob?: string, - clear?: (file?: any) => void, - file?: any, - hideActions?: boolean, - hideClearDetails?: boolean, - inputProps?: any, - onStateChange?: () => void, - success?: boolean, - submit?: () => void, - working?: boolean, - t: Function, - [x:string]: any, + blob?: string; + clear?: (file?: any) => void; + file?: any; + hideActions?: boolean; + hideClearDetails?: boolean; + inputProps?: any; + onStateChange?: () => void; + success?: boolean; + submit?: () => void; + working?: boolean; + t: Function; + [x: string]: any; } export default function UploadFieldVideo({ blob = "", - clear = ()=>{}, + clear = () => {}, file, hideActions, hideClearDetails, inputProps, - onStateChange = ()=>{}, + onStateChange = () => {}, success = false, - submit = ()=>{}, + submit = () => {}, working = false, t, - ...rest }: Props) -{ - useEffect(()=>{ + ...rest +}: Props) { + useEffect(() => { //only fire for file unload //on file load is fired in video elements if (!file) onStateChange(); - }, [file, onStateChange]) + }, [file, onStateChange]); const style = useSpring({ - config: { mass: 1, tension: 120, friction: 14 } + config: { mass: 1, tension: 120, friction: 14 }, }); - + const fileTypes = ["MP4"]; - return -
- { file ? - <> - +
+ {file ? ( + <> + +
- ; -}; \ No newline at end of file + {...{ fileTypes }} + /> +
+
+ +
+
+ + )} +
+
+ ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentLibrary.tsx b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentLibrary.tsx index af5368fb9f..6983a2262b 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentLibrary.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentLibrary.tsx @@ -1,31 +1,28 @@ +import SelectSearcher from "components/common/SelectSearcher/SelectSearcher"; import React from "react"; export default function TabContentLibrary(props: { - t: Function, - pageStateCallback: Function -}){ - const { t } = props - return( -
-
-
-
-
- -
- -
-
-
-
- -
-
-
+ t: Function; + pageStateCallback: Function; +}) { + return ( +
+
- - ) -} \ No newline at end of file + ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx index b7bdeb245a..b4f7ca820a 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx @@ -1,24 +1,30 @@ import React, { useEffect, useState } from "react"; import { v4 as uuidv4 } from "uuid"; -import { UploadMedia } from '@storyteller/components/src/api/media_files/UploadMedia' -import { - EnqueueVideoMotionCapture -} from "@storyteller/components/src/api/video_mocap"; +import { UploadMedia } from "@storyteller/components/src/api/media_files/UploadMedia"; +import { EnqueueVideoMotionCapture } from "@storyteller/components/src/api/video_mocap"; import { useFile } from "hooks"; import VideoInput from "v2/view/pages/video_mocap/components/VideoInput"; -export default function TabContentUpload(props:{ - t: Function - pageStateCallback: (data:{tokenType:string, token:string | undefined}) => void -}){ - const { t, pageStateCallback } = props - const videoProps = useFile({}) +export default function TabContentUpload(props: { + t: Function; + pageStateCallback: (data: { + tokenType: string; + token: string | undefined; + }) => void; +}) { + const { t, pageStateCallback } = props; + const videoProps = useFile({}); enum tabStates { - NO_FILE, FILE_STAGED, FILE_UPLOADING, FILE_UPLOADED, MOCAPNET + NO_FILE, + FILE_STAGED, + FILE_UPLOADING, + FILE_UPLOADED, + MOCAPNET, } - const { NO_FILE, FILE_STAGED, FILE_UPLOADING, FILE_UPLOADED, MOCAPNET } = tabStates; + const { NO_FILE, FILE_STAGED, FILE_UPLOADING, FILE_UPLOADED, MOCAPNET } = + tabStates; const [tabState, setTabState] = useState(NO_FILE); const [token, setToken] = useState(""); @@ -26,105 +32,110 @@ export default function TabContentUpload(props:{ uuid_idempotency_token: uuidv4(), file: videoProps.file, source: "file", - type:"video", + type: "video", }); - const handleUploadVideo = ()=>{ - setTabState(FILE_UPLOADING) - UploadMedia(makeRequest()).then((res=>{ - if(res.success && "media_file_token" in res){ - setToken(res.media_file_token) + const handleUploadVideo = () => { + setTabState(FILE_UPLOADING); + UploadMedia(makeRequest()).then(res => { + if (res.success && "media_file_token" in res) { + setToken(res.media_file_token); } - })); - } - useEffect(()=>{ - if (token!=="") setTabState(FILE_UPLOADED) - }, [token, FILE_UPLOADED]) + }); + }; + useEffect(() => { + if (token !== "") setTabState(FILE_UPLOADED); + }, [token, FILE_UPLOADED]); - const handleEnqueueMocapNet = ()=>{ + const handleEnqueueMocapNet = () => { const request = { video_source: token, - uuid_idempotency_token: uuidv4() - } - EnqueueVideoMotionCapture(request) - .then(res=>{ - pageStateCallback({ - tokenType: "jobToken", - token: res.inference_job_token - }) + uuid_idempotency_token: uuidv4(), + }; + EnqueueVideoMotionCapture(request).then(res => { + pageStateCallback({ + tokenType: "jobToken", + token: res.inference_job_token, }); - setTabState(MOCAPNET) - } + }); + setTabState(MOCAPNET); + }; // contains upload inout state and controls, see docs - if (tabState === NO_FILE || tabState === FILE_STAGED){ - return( -
-
-
- setTabState(videoProps.file ? FILE_STAGED : NO_FILE), - }}/> -
-
- -
-
-
- -
-
-
-
- ) - } else if (tabState === FILE_UPLOADING){ - return( -
-
-
-

{t("tab.message.fileUploading")}

-
-
-
- ) - }else if (tabState === FILE_UPLOADED){ - return( -
-
-
-

{t("tab.message.fileUploaded")}

-
-
- -
-
-
- ) - } else if (tabState === MOCAPNET){ - return( -
-
-
-

{t("tab.message.mocapNetRequesting")}

-
-
-
- ) - }else { - return( -
+ if (tabState === NO_FILE || tabState === FILE_STAGED) { + return ( +
-
-

{t("message.UnknownError")}

+
+ + setTabState(videoProps.file ? FILE_STAGED : NO_FILE), + }} + /> +
+
+ +
+
+
+
+
- ) + ); + } else if (tabState === FILE_UPLOADING) { + return ( +
+
+
+

{t("tab.message.fileUploading")}

+
+
+
+ ); + } else if (tabState === FILE_UPLOADED) { + return ( +
+
+
+

{t("tab.message.fileUploaded")}

+
+
+ +
+
+
+ ); + } else if (tabState === MOCAPNET) { + return ( +
+
+
+

{t("tab.message.mocapNetRequesting")}

+
+
+
+ ); + } else { + return ( +
+
+
+

{t("message.UnknownError")}

+
+
+
+ ); } -} \ No newline at end of file +}