diff --git a/package-lock.json b/package-lock.json index e453599..16c5883 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,9 @@ "react": "^19.1.1", "react-dom": "^19.1.1", "react-redux": "^9.2.0", - "react-router-dom": "^6.30.1", - "xlsx-js-style": "^1.2.0" + "react-router-dom": "^7.9.5", + "stream-browserify": "^3.0.0", + "xlsx": "^0.18.5" }, "devDependencies": { "@eslint/js": "^9.36.0", @@ -913,15 +914,6 @@ } } }, - "node_modules/@remix-run/router": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", - "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.43", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz", @@ -1790,17 +1782,10 @@ } }, "node_modules/adler-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", - "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", "license": "Apache-2.0", - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, - "bin": { - "adler32": "bin/adler32.njs" - }, "engines": { "node": ">=0.8" } @@ -1916,15 +1901,6 @@ "node": ">=0.8" } }, - "node_modules/cfb/node_modules/adler-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", - "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1943,27 +1919,14 @@ } }, "node_modules/codepage": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", - "integrity": "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", "license": "Apache-2.0", - "dependencies": { - "commander": "~2.14.1", - "exit-on-epipe": "~1.0.1" - }, - "bin": { - "codepage": "bin/codepage.njs" - }, "engines": { "node": ">=0.8" } }, - "node_modules/codepage/node_modules/commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", - "license": "MIT" - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1996,12 +1959,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "license": "MIT" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2009,6 +1966,15 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -2389,15 +2355,6 @@ "node": ">=0.10.0" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2436,12 +2393,6 @@ } } }, - "node_modules/fflate": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", - "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==", - "license": "MIT" - }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -2738,6 +2689,12 @@ "node": ">=0.8.19" } }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3351,18 +3308,6 @@ "node": ">= 0.8.0" } }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "license": "Apache-2.0", - "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -3424,35 +3369,55 @@ } }, "node_modules/react-router": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", - "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.5.tgz", + "integrity": "sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.0" + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8" + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, "node_modules/react-router-dom": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", - "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.5.tgz", + "integrity": "sha512-mkEmq/K8tKN63Ae2M7Xgz3c9l9YNbY+NHH6NNeUmLA3kDkhKXRsNb/ZpxaEunvGo2/3YXdk5EJU3Hxp3ocaBPw==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.0", - "react-router": "6.30.1" + "react-router": "7.9.5" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/redux": { @@ -3527,12 +3492,38 @@ "fsevents": "~2.3.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3577,6 +3568,25 @@ "node": ">=0.8" } }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3670,6 +3680,12 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/vite": { "version": "7.1.12", "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", @@ -3788,19 +3804,16 @@ "node": ">=0.10.0" } }, - "node_modules/xlsx-js-style": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/xlsx-js-style/-/xlsx-js-style-1.2.0.tgz", - "integrity": "sha512-DDT4FXFSWfT4DXMSok/m3TvmP1gvO3dn0Eu/c+eXHW5Kzmp7IczNkxg/iEPnImbG9X0Vb8QhROda5eatSR/97Q==", + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "license": "Apache-2.0", "dependencies": { - "adler-32": "~1.2.0", - "cfb": "^1.1.4", - "codepage": "~1.14.0", - "commander": "~2.17.1", - "crc-32": "~1.2.0", - "exit-on-epipe": "~1.0.1", - "fflate": "^0.3.8", + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", "ssf": "~0.11.2", "wmf": "~1.0.1", "word": "~0.3.0" diff --git a/package.json b/package.json index bbe0d91..9249dfa 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,9 @@ "react": "^19.1.1", "react-dom": "^19.1.1", "react-redux": "^9.2.0", - "react-router-dom": "^6.30.1", - "xlsx-js-style": "^1.2.0" + "react-router-dom": "^7.9.5", + "stream-browserify": "^3.0.0", + "xlsx": "^0.18.5" }, "devDependencies": { "@eslint/js": "^9.36.0", diff --git a/src/pages/admin/upload/controller_admin_upload.jsx b/src/pages/admin/upload/controller_admin_upload.jsx index aff20e1..f5b3126 100644 --- a/src/pages/admin/upload/controller_admin_upload.jsx +++ b/src/pages/admin/upload/controller_admin_upload.jsx @@ -9,7 +9,7 @@ pdfjsLib.GlobalWorkerOptions.workerSrc = new URL( import.meta.url ).toString(); -import * as XLSX from 'xlsx-js-style'; +import * as XLSX from 'xlsx'; // pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker; @@ -47,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; @@ -66,7 +69,6 @@ export function useUploadController() { try { const res = await uploadFile(file, selectedPages, selectedSheet); dispatch(setResult(res)); - console.log('gtw',res); if (res.file_type !== ".pdf" || (res.file_type === ".pdf" && !res.tables)) { navigate("/admin/upload/validate"); diff --git a/src/routes/AppRouter.jsx b/src/routes/AppRouter.jsx index aaf2db5..589f87d 100644 --- a/src/routes/AppRouter.jsx +++ b/src/routes/AppRouter.jsx @@ -1,31 +1,79 @@ +// // import { BrowserRouter, Routes, Route } from "react-router-dom"; +// // import GuestRoute from "./GuestRoute"; +// // import ProtectedRoute from "./ProtectedRoute"; + +// // import ViewsLanding from "../pages/landing/views_landing"; +// // import ViewsAuthLogin from "../pages/auth/views_auth_login"; +// // import ViewsAdminHome from "../pages/admin/home/views_admin_home"; +// // import ViewsAdminUpload from "../pages/admin/upload/views_admin_upload"; +// // import ViewsAdminUploadValidate from "../pages/admin/upload/views_admin_upload_validate"; +// // import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_upload_success"; +// // import ViewsAdminPublikasi from "../pages/admin/publikasi/views_admin_publikasi"; + +// // export default function AppRouter() { +// // return ( +// // +// // +// // {/* Guest Routes */} +// // } /> +// // } /> + +// // {/* Protected (Admin) Routes */} +// // } /> +// // } /> + +// // } /> +// // } /> +// // } /> + +// // +// // +// // ); +// // } + + + + + // import { BrowserRouter, Routes, Route } from "react-router-dom"; // import GuestRoute from "./GuestRoute"; // import ProtectedRoute from "./ProtectedRoute"; // import ViewsLanding from "../pages/landing/views_landing"; // import ViewsAuthLogin from "../pages/auth/views_auth_login"; +// import AdminLayout from "../layouts/AdminLayout"; + // import ViewsAdminHome from "../pages/admin/home/views_admin_home"; -// import ViewsAdminUpload from "../pages/admin/upload/views_admin_upload"; -// import ViewsAdminUploadValidate from "../pages/admin/upload/views_admin_upload_validate"; -// import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_upload_success"; +// import ViewsAdminUploadStep1 from "../pages/admin/upload/views_admin_upload"; +// import ViewsAdminUploadValidate from "../pages/admin/upload/views_admin_validate_upload"; +// import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_success_upload"; // import ViewsAdminPublikasi from "../pages/admin/publikasi/views_admin_publikasi"; +// import ViewsAdminUploadRules from "../pages/admin/upload/rules/views_admin_rules_upload"; // export default function AppRouter() { // return ( // // -// {/* Guest Routes */} +// {/* Guest */} // } /> // } /> -// {/* Protected (Admin) Routes */} -// } /> -// } /> - -// } /> -// } /> -// } /> - +// {/* Protected Admin Layout */} +// +// +// +// } +// > +// } /> +// } /> +// } /> +// } /> +// } /> +// } /> +// // // // ); @@ -35,7 +83,15 @@ -import { BrowserRouter, Routes, Route } from "react-router-dom"; + + +// src/routes/AppRouter.jsx +import { + createBrowserRouter, + RouterProvider, + Outlet, +} from "react-router-dom"; + import GuestRoute from "./GuestRoute"; import ProtectedRoute from "./ProtectedRoute"; @@ -50,31 +106,42 @@ import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_success_u import ViewsAdminPublikasi from "../pages/admin/publikasi/views_admin_publikasi"; import ViewsAdminUploadRules from "../pages/admin/upload/rules/views_admin_rules_upload"; -export default function AppRouter() { - return ( - - - {/* Guest */} - } /> - } /> +const router = createBrowserRouter( + [ + { + path: "/", + element: , + }, + { + path: "/login", + element: , + }, + { + path: "/admin", + element: ( + + + + ), + children: [ + { path: "home", element: }, + { path: "upload", element: }, + { path: "upload/validate", element: }, + { path: "upload/success", element: }, + { path: "upload/rules", element: }, + { path: "publikasi", element: }, + ], + }, + ], + { + // 🧩 Di sinilah kamu bisa menambahkan future flags + future: { + v7_startTransition: true, + v7_relativeSplatPath: true, + }, + } +); - {/* Protected Admin Layout */} - - - - } - > - } /> - } /> - } /> - } /> - } /> - } /> - - - - ); +export default function AppRouter() { + return ; } diff --git a/vite.config.js b/vite.config.js index fc4e9bb..8bfd11d 100644 --- a/vite.config.js +++ b/vite.config.js @@ -8,4 +8,9 @@ export default defineConfig({ react(), tailwindcss(), ], + resolve: { + alias: { + stream: 'stream-browserify', + }, + }, })