Compare commits

..

No commits in common. "023578555ec17d3d6f9844991cb518068ed42433" and "6dadfb71ed4d097de0ad1fc952dba0dd01f5d8e3" have entirely different histories.

4 changed files with 16 additions and 30 deletions

View File

@ -1,6 +1,6 @@
import { useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { setFile, setResult, setValidatedData, setPdfPageCount, setSelectedPages } from "../../../store/slices/uploadSlice";
import { setFile, setResult, setValidatedData } from "../../../store/slices/uploadSlice";
import { uploadFile, uploadPdf, saveToDatabase } from "./service_admin_upload";
import { useNavigate } from "react-router-dom";
import * as pdfjsLib from "pdfjs-dist";
@ -11,16 +11,18 @@ pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
import * as XLSX from 'xlsx';
// pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker;
export function useUploadController() {
const dispatch = useDispatch();
const navigate = useNavigate();
const { file, result, pdfPageCount, selectedPages } = useSelector((state) => state.upload);
const { file, result } = useSelector((state) => state.upload);
const [loading, setLoading] = useState(false);
const [selectedTable, setSelectedTable] = useState(null);
// const [selectedPages, setSelectedPages] = useState("");
const [selectedPages, setSelectedPages] = useState("");
const [tableTitle, setTableTitle] = useState("");
// const [pdfPageCount, setPdfPageCount] = useState(null);
const [pdfPageCount, setPdfPageCount] = useState(null);
const [selectedSheet, setSelectedSheet] = useState(null);
const [sheetCount, setSheetCount] = useState(null);
const [sheetNames, setSheetNames] = useState([]);
@ -36,8 +38,7 @@ export function useUploadController() {
reader.onload = async (e) => {
const typedArray = new Uint8Array(e.target.result);
const pdf = await pdfjsLib.getDocument({ data: typedArray }).promise;
// setPdfPageCount(pdf.numPages);
dispatch(setPdfPageCount(pdf.numPages));
setPdfPageCount(pdf.numPages);
console.log(`📄 PDF terdeteksi dengan ${pdf.numPages} halaman`);
};
reader.readAsArrayBuffer(f);
@ -46,6 +47,9 @@ export function useUploadController() {
}
}
else if (ext === "xlsx" || ext === "xls") {
// const data = await f.arrayBuffer();
// const workbook = XLSX.read(data, { type: 'array' });
// const sheetNames = workbook.SheetNames;
const data = await f.arrayBuffer();
const workbook = XLSX.read(data, { type: 'array' });
const sheetNames = workbook.SheetNames;
@ -54,8 +58,7 @@ export function useUploadController() {
setSheetNames(sheetNames);
}
else {
// setPdfPageCount(null);
dispatch(setPdfPageCount(null));
setPdfPageCount(null);
}
};
@ -64,7 +67,6 @@ export function useUploadController() {
if (!file) return;
setLoading(true);
try {
console.log(selectedPages);
const res = await uploadFile(file, selectedPages, selectedSheet);
dispatch(setResult(res));

View File

@ -30,9 +30,7 @@ export async function uploadFile(file, page = null, sheet = null) {
const formData = new FormData();
formData.append("file", file);
formData.append("page", page);
if (sheet != null) {
formData.append("sheet", sheet);
}
formData.append("sheet", sheet);
try {
const response = await api.post("/upload", formData, {

View File

@ -1,11 +1,9 @@
import { useUploadController } from "./controller_admin_upload";
import { useDispatch } from "react-redux";
import FileDropzone from "../../../components/FileDropzone";
import PdfPageSelector from "../../../components/PdfPageSelector";
import { Link } from "react-router-dom";
export default function ViewsAdminUploadStep1() {
const dispatch = useDispatch();
const {
loading,
file,
@ -26,8 +24,7 @@ export default function ViewsAdminUploadStep1() {
const handlePageSelection = (pages) => {
console.log("Halaman PDF yang dipilih:", pages);
// setSelectedPages(pages);
dispatch(setSelectedPages(pages));
setSelectedPages(pages);
};
const ext = file ? file.name.split(".").pop().toLowerCase() : "";
@ -109,13 +106,10 @@ export default function ViewsAdminUploadStep1() {
<div className={`mt-6 flex justify-center ${(result && result.file_type === ".pdf" && result.tables?.length > 1) ? 'hidden' : 'block' }`}>
<button
onClick={handleUpload}
disabled={
loading ||
(result && result.file_type === ".pdf" && result.tables?.length > 1) ||
(ext === "pdf" && pdfPageCount > 3 && (selectedPages === "" || selectedPages == null))}
disabled={loading || (result && result.file_type === ".pdf" && result.tables?.length > 1) || (ext === "pdf" && pdfPageCount > 3 && selectedPages === "")}
className="w-full px-6 py-2 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:bg-gray-400 disabled:cursor-not-allowed transition"
>
{loading ? "Mengunggah..." : "Process"}
{loading ? "Mengunggah..." : "Upload"}
</button>
</div>
</div>

View File

@ -4,8 +4,6 @@ const initialState = {
file: null,
result: null,
validatedData: null,
pdfPageCount: null,
selectedPages: null
};
const uploadSlice = createSlice({
@ -21,12 +19,6 @@ const uploadSlice = createSlice({
setValidatedData: (state, action) => {
state.validatedData = action.payload;
},
setPdfPageCount: (state, action) => {
state.pdfPageCount = action.payload;
},
setSelectedPages: (state, action) => {
state.selectedPages = action.payload;
},
reset: (state) => {
state.file = null;
state.result = null;
@ -35,5 +27,5 @@ const uploadSlice = createSlice({
},
});
export const { setFile, setResult, setValidatedData, reset, setPdfPageCount, setSelectedPages } = uploadSlice.actions;
export const { setFile, setResult, setValidatedData, reset } = uploadSlice.actions;
export default uploadSlice.reducer;