diff --git a/package-lock.json b/package-lock.json index b8a1e4e..23d9ba7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,7 +93,7 @@ "winston-daily-rotate-file": "^5.0.0", "workbox-webpack-plugin": "^7.1.0", "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.1/xlsx-0.19.1.tgz", - "xlsx-style": "^0.8.13", + "xlsx-js-style": "^1.2.0", "xml-js": "^1.6.11", "xml2js": "^0.6.2" }, @@ -7668,6 +7668,14 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "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==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -7826,6 +7834,11 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, + "node_modules/fflate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", + "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + }, "node_modules/file-stream-rotator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", @@ -15075,6 +15088,17 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" }, + "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==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/prisma": { "version": "5.19.1", "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.19.1.tgz", @@ -18591,6 +18615,22 @@ "node": ">= 12.0.0" } }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -19081,6 +19121,88 @@ "node": ">=0.8" } }, + "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==", + "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", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx-js-style/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==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "adler32": "bin/adler32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx-js-style/node_modules/codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==", + "dependencies": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "bin": { + "codepage": "bin/codepage.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx-js-style/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==" + }, + "node_modules/xlsx-js-style/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==" + }, + "node_modules/xlsx-js-style/node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx-js-style/node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/xlsx-style": { "version": "0.8.13", "resolved": "https://registry.npmjs.org/xlsx-style/-/xlsx-style-0.8.13.tgz", diff --git a/package.json b/package.json index 927aa93..2118700 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "winston-daily-rotate-file": "^5.0.0", "workbox-webpack-plugin": "^7.1.0", "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.1/xlsx-0.19.1.tgz", - "xlsx-style": "^0.8.13", + "xlsx-js-style": "^1.2.0", "xml-js": "^1.6.11", "xml2js": "^0.6.2" }, diff --git a/pages/api/index.ts b/pages/api/index.ts index 9b7a855..63468af 100644 --- a/pages/api/index.ts +++ b/pages/api/index.ts @@ -12,6 +12,7 @@ import fs from 'fs'; import path from 'path'; import { all } from "axios"; import { logger } from "src/helpers/common"; +import { excel } from "src/helpers/excel"; /** * @@ -432,7 +433,13 @@ export default async function handler(req, res) { case "getAllPublishersWithStatistics": let noEndDate = common.parseBool(req.query.noEndDate); res.status(200).json(await dataHelper.getAllPublishersWithStatisticsMonth(day, noEndDate)); - + case "exportPublishersExcel": + try { + await excel.ExportPublishersToExcel(req, res); + } catch (error) { + console.error(JSON.stringify(error)); + } + break; default: res.status(200).json({ "message": "no action '" + action + "' found" diff --git a/pages/cart/publishers/index.tsx b/pages/cart/publishers/index.tsx index 3a78e2d..8e8b55d 100644 --- a/pages/cart/publishers/index.tsx +++ b/pages/cart/publishers/index.tsx @@ -16,8 +16,6 @@ import ProtectedRoute from '../../../components/protectedRoute'; import ConfirmationModal from '../../../components/ConfirmationModal'; import { relative } from "path"; import { set } from "lodash"; -import { excel } from "../../../src/helpers/excel"; - interface IProps { initialItems: Publisher[]; @@ -174,10 +172,18 @@ function PublishersPage({ publishers = [] }: IProps) { const exportPublishers = async () => { try { - await excel.ExportPublishersToExcel(); + const response = await axiosInstance.get('/api/?action=exportPublishersExcel'); + const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'publishers.xlsx'; + a.click(); } catch (error) { - console.error(JSON.stringify(error)); + console.error(JSON.stringify(error)); // Log the error + toast.error("Грешка при експорт на данни"); } + } return ( diff --git a/src/helpers/excel.js b/src/helpers/excel.js index cd45aa0..13f057a 100644 --- a/src/helpers/excel.js +++ b/src/helpers/excel.js @@ -14,6 +14,10 @@ const data = require("./data"); // for nodejs //const api = require("./pages/api/index"); +// import dynamic from 'next/dynamic'; + +// const XLSX = dynamic(() => import('xlsx-style'), { ssr: false }); + exports.ScheduleGenerateExcel = async function (req, res) { @@ -162,7 +166,7 @@ exports.ScheduleGenerateExcel = async function (req, res) { const ws = XLSX.utils.aoa_to_sheet(ws_data); wb.Sheets["График КОЛИЧКИ"] = ws; - const xlsxstyle = require("xlsx-style"); + const xlsxstyle = require("xlsx-js-style"); try { const workbook = xlsxstyle.readFile(filePath); const sheetNames = workbook.SheetNames;