+
+
+ {pageState.mediaFileToken &&
+
+ }
+
+ {pageState.status === states.FILE_SELECTED &&
+
+
+
+
+
+ }
+
+ );
+}
diff --git a/packages/fakeyou.com/src/v2/view/pages/video_styletransfer/components/tabContentUpload.tsx b/packages/fakeyou.com/src/v2/view/pages/video_styletransfer/components/tabContentUpload.tsx
new file mode 100644
index 0000000000..73f19c477b
--- /dev/null
+++ b/packages/fakeyou.com/src/v2/view/pages/video_styletransfer/components/tabContentUpload.tsx
@@ -0,0 +1,98 @@
+import React from "react";
+import { Redirect } from "react-router-dom";
+import { v4 as uuidv4 } from "uuid";
+
+import { UploadMedia } from "@storyteller/components/src/api/media_files/UploadMedia";
+import { useFile } from "hooks";
+import { ErrorMessage, VideoInput, Spinner } from "components/common";
+import { states, Action, State } from "../reducer";
+
+export default function TabContentUpload({
+ debug=false, t, pageState, dispatchPageState
+}: {
+ debug?: boolean;
+ t: Function;
+ pageState: State;
+ dispatchPageState: (action: Action) => void;
+}) {
+ const videoProps = useFile({});
+ const {NO_FILE, FILE_STAGED, FILE_SELECTED, FILE_UPLOADING, FILE_UPLOADED} = states;
+
+ const makeVideoUploadRequest = () => ({
+ uuid_idempotency_token: uuidv4(),
+ file: videoProps.file,
+ source: "file",
+ type: "video",
+ });
+
+ const handleUploadVideo = () => {
+ dispatchPageState({type: 'uploadFile'});
+ UploadMedia(makeVideoUploadRequest()).then(res => {
+ if (res.success && res.media_file_token) {
+ dispatchPageState({
+ type: 'uploadFileSuccess',
+ payload:{
+ mediaFileToken :res.media_file_token
+ }
+ })
+ }
+ });
+ };
+
+ // contains upload inout state and controls, see docs
+ if (pageState.status === NO_FILE
+ || pageState.status === FILE_STAGED
+ || pageState.status === FILE_SELECTED
+ ) {
+ return (
+ <>
+