0 vulnerability
This commit is contained in:
parent
c9ebec3c2f
commit
7afc865a3f
File diff suppressed because it is too large
Load Diff
|
|
@ -25,7 +25,7 @@
|
||||||
"docker:backup": "docker compose exec db pg_dump -U postgres qrmaster > backup_$(date +%Y%m%d).sql"
|
"docker:backup": "docker compose exec db pg_dump -U postgres qrmaster > backup_$(date +%Y%m%d).sql"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@auth/prisma-adapter": "^1.0.12",
|
"@auth/prisma-adapter": "^2.11.1",
|
||||||
"@edge-runtime/cookies": "^6.0.0",
|
"@edge-runtime/cookies": "^6.0.0",
|
||||||
"@prisma/client": "^5.7.0",
|
"@prisma/client": "^5.7.0",
|
||||||
"@stripe/stripe-js": "^8.0.0",
|
"@stripe/stripe-js": "^8.0.0",
|
||||||
|
|
@ -33,6 +33,7 @@
|
||||||
"chart.js": "^4.4.0",
|
"chart.js": "^4.4.0",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
"dayjs": "^1.11.10",
|
"dayjs": "^1.11.10",
|
||||||
|
"exceljs": "^4.4.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"i18next": "^23.7.6",
|
"i18next": "^23.7.6",
|
||||||
"ioredis": "^5.3.2",
|
"ioredis": "^5.3.2",
|
||||||
|
|
@ -55,7 +56,6 @@
|
||||||
"stripe": "^19.1.0",
|
"stripe": "^19.1.0",
|
||||||
"tailwind-merge": "^2.2.0",
|
"tailwind-merge": "^2.2.0",
|
||||||
"uuid": "^13.0.0",
|
"uuid": "^13.0.0",
|
||||||
"xlsx": "^0.18.5",
|
|
||||||
"zod": "^3.25.76"
|
"zod": "^3.25.76"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
"@types/react-dom": "^18.2.18",
|
"@types/react-dom": "^18.2.18",
|
||||||
"autoprefixer": "^10.4.16",
|
"autoprefixer": "^10.4.16",
|
||||||
"eslint": "^8.56.0",
|
"eslint": "^8.56.0",
|
||||||
"eslint-config-next": "^14.2.35",
|
"eslint-config-next": "^16.1.1",
|
||||||
"next-sitemap": "^4.2.3",
|
"next-sitemap": "^4.2.3",
|
||||||
"postcss": "^8.4.32",
|
"postcss": "^8.4.32",
|
||||||
"prettier": "^3.1.1",
|
"prettier": "^3.1.1",
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
import React, { useState, useCallback } from 'react';
|
import React, { useState, useCallback } from 'react';
|
||||||
import { useDropzone } from 'react-dropzone';
|
import { useDropzone } from 'react-dropzone';
|
||||||
import Papa from 'papaparse';
|
import Papa from 'papaparse';
|
||||||
import * as XLSX from 'xlsx';
|
import ExcelJS from 'exceljs';
|
||||||
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';
|
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';
|
||||||
import { Button } from '@/components/ui/Button';
|
import { Button } from '@/components/ui/Button';
|
||||||
import { Badge } from '@/components/ui/Badge';
|
import { Badge } from '@/components/ui/Badge';
|
||||||
|
|
@ -66,12 +66,33 @@ export default function BulkCreationPage() {
|
||||||
};
|
};
|
||||||
reader.readAsText(file);
|
reader.readAsText(file);
|
||||||
} else if (file.name.endsWith('.xlsx') || file.name.endsWith('.xls')) {
|
} else if (file.name.endsWith('.xlsx') || file.name.endsWith('.xls')) {
|
||||||
reader.onload = (e) => {
|
reader.onload = async (e) => {
|
||||||
const data = new Uint8Array(e.target?.result as ArrayBuffer);
|
const buffer = e.target?.result as ArrayBuffer;
|
||||||
const workbook = XLSX.read(data, { type: 'array' });
|
const workbook = new ExcelJS.Workbook();
|
||||||
const sheetName = workbook.SheetNames[0];
|
await workbook.xlsx.load(buffer);
|
||||||
const worksheet = workbook.Sheets[sheetName];
|
const worksheet = workbook.worksheets[0];
|
||||||
const jsonData = XLSX.utils.sheet_to_json(worksheet);
|
const jsonData: any[] = [];
|
||||||
|
|
||||||
|
// Get headers from first row
|
||||||
|
const headers: string[] = [];
|
||||||
|
const firstRow = worksheet.getRow(1);
|
||||||
|
firstRow.eachCell((cell, colNumber) => {
|
||||||
|
headers[colNumber - 1] = cell.value?.toString() || '';
|
||||||
|
});
|
||||||
|
|
||||||
|
// Convert rows to objects
|
||||||
|
worksheet.eachRow((row, rowNumber) => {
|
||||||
|
if (rowNumber === 1) return; // Skip header row
|
||||||
|
const rowData: any = {};
|
||||||
|
row.eachCell((cell, colNumber) => {
|
||||||
|
const header = headers[colNumber - 1];
|
||||||
|
if (header) {
|
||||||
|
rowData[header] = cell.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jsonData.push(rowData);
|
||||||
|
});
|
||||||
|
|
||||||
processData(jsonData);
|
processData(jsonData);
|
||||||
};
|
};
|
||||||
reader.readAsArrayBuffer(file);
|
reader.readAsArrayBuffer(file);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue