menteithUpdate.ts
Thu Nov 07 2024 08:00:03 GMT+0000 (Coordinated Universal Time)
Saved by @rafal_rydz
import type {NextApiRequest, NextApiResponse} from "next";
import * as XLSX from "xlsx";
// Handle file upload and parse Excel data
export const handleFileUpload = async (file: File) => {
const reader = new FileReader();
return new Promise<{
managerRecords: { imo: string; manager: string }[];
}>((resolve) => {
reader.onload = (e) => {
const data = e.target?.result;
const workbook = XLSX.read(data, { type: "binary" });
const managerWorksheet = workbook.Sheets["Recent Changes (EffControl)"];
// Extract IMO and EffectiveControl columns dynamically by header name
const managerData = XLSX.utils.sheet_to_json<any>(managerWorksheet, {
header: 1,
});
const headers = managerData[0];
const imoIndex = headers.findIndex(
(header: string) => header === "IMONumber",
);
const managerIndex = headers.findIndex(
(header: string) => header === "EffectiveControl",
);
const managerRecords = managerData
.slice(1)
.map((row: any) => ({
imo: row[imoIndex],
manager: row[managerIndex],
}))
.filter((record) => record.imo && record.manager); // Filter out empty rows
resolve({ managerRecords });
};
reader.readAsBinaryString(file);
});
};
// API handler for menteithUpdate
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
) {
switch (req.method) {
case "POST":
if (req.body.action === "previewData") {
try {
const file = req.body.file;
const { managerRecords } = await handleFileUpload(file);
return res.status(200).json({ success: true, managerRecords });
} catch (error) {
return res
.status(500)
.json({ success: false, error: (error as Error).message });
}
}
return res.status(400).json({ success: false, error: "Invalid action" });
default:
res.setHeader("Allow", ["POST"]);
return res
.status(405)
.send(`Method ${req.method ?? "Undefined"} Not Allowed`);
}
}



Comments