ADD edit request to frontend

This commit is contained in:
2025-05-23 15:40:50 +02:00
parent 90da54a642
commit e86723496e
2 changed files with 67 additions and 2 deletions

View File

@@ -1,4 +1,25 @@
export default function ClipConfig() { type prop = {
setWidth: Function;
setHeight: Function;
setFps: Function;
setFileSize: Function;
}
export default function ClipConfig({setWidth, setHeight, setFps, setFileSize}: prop) {
const updateRes = (e: React.ChangeEvent<HTMLSelectElement>) => {
var vals = e.target.value.split(",");
setWidth(parseInt(vals[0]))
setHeight(parseInt(vals[1]))
}
const updateFps = (e: React.ChangeEvent<HTMLSelectElement>) => {
setFps(parseInt(e.target.value))
}
const updateFileSize = (e: React.ChangeEvent<HTMLInputElement>) => {
setFileSize(parseInt(e.target.value))
}
return ( return (
<div className={"flex flex-col gap-2 p-10 rounded-md"}> <div className={"flex flex-col gap-2 p-10 rounded-md"}>
<h2 className={"text-3xl font-bold text-gray-800 mb-4 underline"}>Clip Export Settings</h2> <h2 className={"text-3xl font-bold text-gray-800 mb-4 underline"}>Clip Export Settings</h2>
@@ -9,6 +30,7 @@ export default function ClipConfig() {
<select id="resolution" <select id="resolution"
name="resolution" name="resolution"
defaultValue="1280,720" defaultValue="1280,720"
onChange={updateRes}
className={"border-black bg-gray-200 p-2 rounded-md w-full"}> className={"border-black bg-gray-200 p-2 rounded-md w-full"}>
<option value="3840,2160">2160p (4K)</option> <option value="3840,2160">2160p (4K)</option>
<option value="2560,1440">1440p (QHD)</option> <option value="2560,1440">1440p (QHD)</option>
@@ -26,6 +48,7 @@ export default function ClipConfig() {
<select id="fps" <select id="fps"
name="fps" name="fps"
defaultValue="30" defaultValue="30"
onChange={updateFps}
className={"border-black bg-gray-200 p-2 rounded-md w-full"}> className={"border-black bg-gray-200 p-2 rounded-md w-full"}>
<option value="60">60</option> <option value="60">60</option>
<option value="30">30</option> <option value="30">30</option>
@@ -40,6 +63,7 @@ export default function ClipConfig() {
<input type="number" <input type="number"
min="1" min="1"
defaultValue="10" defaultValue="10"
onChange={updateFileSize}
className={"border-black bg-gray-200 p-2 rounded-md w-full"} className={"border-black bg-gray-200 p-2 rounded-md w-full"}
/> />
</div> </div>

View File

@@ -6,6 +6,32 @@ import PlaybackSlider from "./../../components/PlaybackSlider";
import ClipRangeSlider from "./../../components/ClipRangeSlider"; import ClipRangeSlider from "./../../components/ClipRangeSlider";
import ClipConfig from "./../../components/ClipConfig"; import ClipConfig from "./../../components/ClipConfig";
function exportFile(uuid: string,
startPoint: number,
endPoint: number,
width: number,
height: number,
fps: number,
fileSize: number) {
var body: string = `startPoint=${startPoint}&endPoint=${endPoint}&width=${width}&height=${height}&fps=${fps}&fileSize=${fileSize*1000}`;
fetch(`api/v1/edit/${uuid}`, {
method: "POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: body,
})
.then(res => {
console.log("RESPONSE: " + res);
return res
})
.then(data => console.log('Response:', data))
.catch(err => console.error('Error:', err));
return null;
}
export default function VideoId() { export default function VideoId() {
const { id } = useParams(); const { id } = useParams();
const videoRef = useRef<HTMLVideoElement | null>(null); const videoRef = useRef<HTMLVideoElement | null>(null);
@@ -14,6 +40,10 @@ export default function VideoId() {
const [metadata, setMetadata] = useState<VideoMetadata | null>(null); const [metadata, setMetadata] = useState<VideoMetadata | null>(null);
const [playbackValue, setPlaybackValue] = useState(0); const [playbackValue, setPlaybackValue] = useState(0);
const [clipRangeValue, setClipRangeValue] = useState([0, 1]); const [clipRangeValue, setClipRangeValue] = useState([0, 1]);
const [width, setWidth] = useState(1280);
const [height, setHeight] = useState(720);
const [fps, setFps] = useState(30);
const [fileSize, setFileSize] = useState(10);
useEffect(() => { useEffect(() => {
fetch(`api/v1/metadata/original/${id}`) fetch(`api/v1/metadata/original/${id}`)
@@ -25,6 +55,11 @@ export default function VideoId() {
.catch((err) => console.log(err.message)); .catch((err) => console.log(err.message));
}, [id]); }, [id]);
const sendData = () => {
if (!id) return
exportFile(id,clipRangeValue[0], clipRangeValue[1], width, height, fps, fileSize);
}
return ( return (
<div className={"grid grid-cols-[70%_30%]"}> <div className={"grid grid-cols-[70%_30%]"}>
<video <video
@@ -37,7 +72,12 @@ export default function VideoId() {
</video> </video>
<ClipConfig /> <ClipConfig
setWidth={setWidth}
setHeight={setHeight}
setFileSize={setFileSize}
setFps={setFps}
/>
{metadata && {metadata &&
<div> <div>
@@ -66,6 +106,7 @@ export default function VideoId() {
<button <button
className={"bg-primary text-text p-2 rounded-lg hover:bg-primary-pressed h-10 w-3/4 m-auto"} className={"bg-primary text-text p-2 rounded-lg hover:bg-primary-pressed h-10 w-3/4 m-auto"}
onClick={sendData}
>Export</button> >Export</button>
</div> </div>