From 023578555ec17d3d6f9844991cb518068ed42433 Mon Sep 17 00:00:00 2001 From: dmsanhrProject Date: Wed, 5 Nov 2025 09:34:59 +0700 Subject: [PATCH] update state store --- .../admin/upload/controller_admin_upload.jsx | 20 +++++++++---------- .../admin/upload/service_admin_upload.jsx | 4 +++- src/pages/admin/upload/views_admin_upload.jsx | 12 ++++++++--- src/services/api.js | 3 ++- src/store/slices/uploadSlice.js | 10 +++++++++- 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/pages/admin/upload/controller_admin_upload.jsx b/src/pages/admin/upload/controller_admin_upload.jsx index f5b3126..f6bfee2 100644 --- a/src/pages/admin/upload/controller_admin_upload.jsx +++ b/src/pages/admin/upload/controller_admin_upload.jsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { setFile, setResult, setValidatedData } from "../../../store/slices/uploadSlice"; +import { setFile, setResult, setValidatedData, setPdfPageCount, setSelectedPages } 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,18 +11,16 @@ 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 } = useSelector((state) => state.upload); + const { file, result, pdfPageCount, selectedPages } = 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([]); @@ -38,7 +36,8 @@ 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); + // setPdfPageCount(pdf.numPages); + dispatch(setPdfPageCount(pdf.numPages)); console.log(`📄 PDF terdeteksi dengan ${pdf.numPages} halaman`); }; reader.readAsArrayBuffer(f); @@ -47,9 +46,6 @@ 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; @@ -58,7 +54,8 @@ export function useUploadController() { setSheetNames(sheetNames); } else { - setPdfPageCount(null); + // setPdfPageCount(null); + dispatch(setPdfPageCount(null)); } }; @@ -67,6 +64,7 @@ export function useUploadController() { if (!file) return; setLoading(true); try { + console.log(selectedPages); const res = await uploadFile(file, selectedPages, selectedSheet); dispatch(setResult(res)); diff --git a/src/pages/admin/upload/service_admin_upload.jsx b/src/pages/admin/upload/service_admin_upload.jsx index 708f28e..73f8392 100644 --- a/src/pages/admin/upload/service_admin_upload.jsx +++ b/src/pages/admin/upload/service_admin_upload.jsx @@ -30,7 +30,9 @@ export async function uploadFile(file, page = null, sheet = null) { const formData = new FormData(); formData.append("file", file); formData.append("page", page); - formData.append("sheet", sheet); + if (sheet != null) { + formData.append("sheet", sheet); + } try { const response = await api.post("/upload", formData, { diff --git a/src/pages/admin/upload/views_admin_upload.jsx b/src/pages/admin/upload/views_admin_upload.jsx index 3120aac..0be7452 100644 --- a/src/pages/admin/upload/views_admin_upload.jsx +++ b/src/pages/admin/upload/views_admin_upload.jsx @@ -1,9 +1,11 @@ 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, @@ -24,7 +26,8 @@ export default function ViewsAdminUploadStep1() { const handlePageSelection = (pages) => { console.log("Halaman PDF yang dipilih:", pages); - setSelectedPages(pages); + // setSelectedPages(pages); + dispatch(setSelectedPages(pages)); }; const ext = file ? file.name.split(".").pop().toLowerCase() : ""; @@ -106,10 +109,13 @@ export default function ViewsAdminUploadStep1() {
1) ? 'hidden' : 'block' }`}>
diff --git a/src/services/api.js b/src/services/api.js index 483d12e..8e04e02 100644 --- a/src/services/api.js +++ b/src/services/api.js @@ -2,7 +2,8 @@ import axios from "axios"; import { getToken } from "../utils/auth"; const api = axios.create({ - baseURL: "http://labai.polinema.ac.id:808", + // baseURL: "http://labai.polinema.ac.id:808", + baseURL: "http://localhost:8000", }); api.interceptors.request.use((config) => { diff --git a/src/store/slices/uploadSlice.js b/src/store/slices/uploadSlice.js index c20e446..03063a4 100644 --- a/src/store/slices/uploadSlice.js +++ b/src/store/slices/uploadSlice.js @@ -4,6 +4,8 @@ const initialState = { file: null, result: null, validatedData: null, + pdfPageCount: null, + selectedPages: null }; const uploadSlice = createSlice({ @@ -19,6 +21,12 @@ 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; @@ -27,5 +35,5 @@ const uploadSlice = createSlice({ }, }); -export const { setFile, setResult, setValidatedData, reset } = uploadSlice.actions; +export const { setFile, setResult, setValidatedData, reset, setPdfPageCount, setSelectedPages } = uploadSlice.actions; export default uploadSlice.reducer;