feat: add file upload in content image

This commit is contained in:
hanif salafi 2025-01-02 10:32:38 +07:00
parent 99ea4f86d2
commit 7de49ebb08
1 changed files with 44 additions and 25 deletions

View File

@ -10,7 +10,7 @@ import * as z from "zod";
import { Upload } from 'tus-js-client';
import Swal from "sweetalert2";
import withReactContent from "sweetalert2-react-content";
import { useRouter } from "next/navigation";
import { redirect, useRouter } from "next/navigation";
import {
Select,
SelectContent,
@ -52,7 +52,7 @@ import { useDropzone } from "react-dropzone";
import { Icon } from "@iconify/react";
import { CloudUpload } from "lucide-react";
import Image from "next/image";
import { error } from "@/config/swal";
import { error, loading } from "@/config/swal";
import { Item } from "@radix-ui/react-dropdown-menu";
interface FileWithPreview extends File {
@ -111,7 +111,8 @@ export default function FormImage() {
});
let fileTypeId = "1";
let progressInfo = [];
let progressInfo: any = [];
let counterUpdateProgress = 0;
const [progressList, setProgressList] = useState<any>([]);
let uploadPersen = 0;
const [isStartUpload, setIsStartUpload] = useState(false);
@ -344,6 +345,7 @@ export default function FormImage() {
};
const save = async (data: ImageSchema) => {
loading();
const finalTitle = isSwitchOn ? title : data.title;
const requestData = {
...data,
@ -413,17 +415,7 @@ export default function FormImage() {
Cookies.remove('idCreate');
MySwal.fire("Sukses", "Data berhasil disimpan.", "success");
MySwal.fire({
title: "Sukses",
text: "Data berhasil disimpan.",
icon: "success",
confirmButtonColor: "#3085d6",
confirmButtonText: "OK",
}).then(() => {
// router.push("/en/contributor/content/image");
});
// MySwal.fire("Sukses", "Data berhasil disimpan.", "success");
};
// function showProgress() {
@ -465,32 +457,59 @@ export default function FormImage() {
filename: file.name,
filetype: file.type,
duration,
isWatermark: true, // hardcode
isWatermark: 'true', // hardcode
},
onError: async (e: any) => {
console.log('Error upload :', e);
error(e);
},
onChunkComplete: (chunkSize: any, bytesAccepted: any, bytesTotal: any) => {
// const uploadPersen = Math.floor((bytesAccepted / bytesTotal) * 100);
// progressInfo[idx].percentage = uploadPersen;
// counterUpdateProgress++;
// // console.log(counterUpdateProgress);
// setProgressList(progressInfo);
// setCounterProgress(counterUpdateProgress);
const uploadPersen = Math.floor((bytesAccepted / bytesTotal) * 100);
progressInfo[idx].percentage = uploadPersen;
counterUpdateProgress++;
console.log(counterUpdateProgress);
setProgressList(progressInfo);
setCounterProgress(counterUpdateProgress);
},
onSuccess: async () => {
uploadPersen = 100;
// progressInfo[idx].percentage = 100;
// counterUpdateProgress++;
// setCounterProgress(counterUpdateProgress);
// successTodo();
progressInfo[idx].percentage = 100;
counterUpdateProgress++;
setCounterProgress(counterUpdateProgress);
successTodo();
},
});
upload.start();
}
const successSubmit = (redirect: string) => {
MySwal.fire({
title: "Sukses",
text: "Data berhasil disimpan.",
icon: "success",
confirmButtonColor: "#3085d6",
confirmButtonText: "OK",
}).then(() => {
router.push(redirect);
});
}
function successTodo() {
let counter = 0;
for (const element of progressInfo) {
if (element.percentage == 100) {
counter++;
}
}
if (counter == progressInfo.length) {
setIsStartUpload(false);
// hideProgress();
Cookies.remove('idCreate');
successSubmit("/in/contributor/content/image/");
}
}
const handleImageChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
if (file) {