diff --git a/package.json b/package.json index 808fa55500..a6b8453f3e 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-drag-drop-files": "^2.3.10", + "react-easy-crop": "^5.0.8", "react-router-dom": "^6.26.1", "tailwind-merge": "^2.5.2", "uuid": "^10.0.0", diff --git a/src/components/features/ToolbarMain/index.tsx b/src/components/features/ToolbarMain/index.tsx index cace44f629..b7a209923a 100644 --- a/src/components/features/ToolbarMain/index.tsx +++ b/src/components/features/ToolbarMain/index.tsx @@ -102,6 +102,7 @@ export const ToolbarMain = ({ onClick={() => { setState({ ...state, isUploadSubmenuOpen: true }); }} + tooltip={state.isUploadSubmenuOpen ? undefined : "Add..."} /> {state.isUploadSubmenuOpen && (
((resolve) => { + const reader = new FileReader(); + reader.addEventListener("load", () => resolve(reader.result), false); + reader.readAsDataURL(file); + }); +} export const UploadVideo = ({ isOpen, closeCallback, @@ -16,6 +24,14 @@ export const UploadVideo = ({ closeCallback: () => void; }) => { const [assetFile, setAssetFile] = useState(null); + const [videoFile, setVideoFile] = useState(null); + + const [crop, setCrop] = useState({ x: 0, y: 0 }); + const [zoom, setZoom] = useState(1); + + const onCropComplete = (croppedArea: Area, croppedAreaPixels: Point) => { + console.log(croppedArea, croppedAreaPixels); + }; function handleClose() { setAssetFile(null); @@ -28,6 +44,7 @@ export const UploadVideo = ({ } handleClose(); } + return (
@@ -42,20 +59,37 @@ export const UploadVideo = ({ title="" fileTypes={Object.values(VIDEO_FILE_TYPE)} file={assetFile} - setFile={(file: File | null) => { + setFile={async (file: File | null) => { setAssetFile(file); + if (file) { + let videoDataUrl = await readFile(file); + setVideoFile(videoDataUrl as string); + } }} /> - {assetFile && ( -
+ {assetFile && videoFile && ( +
-
)}
diff --git a/yarn.lock b/yarn.lock index e734a8d0ee..052692b5e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3110,6 +3110,11 @@ normalize-range@^0.1.2: resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +normalize-wheel@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45" + integrity sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA== + npm-audit-report@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-5.0.0.tgz" @@ -3601,6 +3606,14 @@ react-drag-drop-files@^2.3.10: prop-types "^15.7.2" styled-components "^5.3.0" +react-easy-crop@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/react-easy-crop/-/react-easy-crop-5.0.8.tgz#6cf5be061c0ec6dc0c6ee7413974c34e35bf7475" + integrity sha512-KjulxXhR5iM7+ATN2sGCum/IyDxGw7xT0dFoGcqUP+ysaPU5Ka7gnrDa2tUHFHUoMNyPrVZ05QA+uvMgC5ym/g== + dependencies: + normalize-wheel "^1.0.1" + tslib "^2.0.1" + react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" @@ -4208,7 +4221,7 @@ tsconfck@^3.0.3: resolved "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz" integrity sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ== -tslib@^2.4.0: +tslib@^2.0.1, tslib@^2.4.0: version "2.7.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==