"use client" import { type Table } from "@tanstack/react-table" import ExcelJS from "exceljs" import { VendorCandidates } from "@/db/schema/vendors" /** * Export an empty template for vendor candidates with column headers * matching the expected import format */ export async function exportVendorCandidateTemplate() { // Create a new workbook and worksheet const workbook = new ExcelJS.Workbook() const worksheet = workbook.addWorksheet("Vendor Candidates") // Define the columns with expected headers const columns = [ { header: "Company Name", key: "companyName", width: 30 }, { header: "Contact Email", key: "contactEmail", width: 30 }, { header: "Contact Phone", key: "contactPhone", width: 20 }, { header: "Country", key: "country", width: 20 }, { header: "Source", key: "source", width: 20 }, { header: "Status", key: "status", width: 15 }, ] // Add columns to the worksheet worksheet.columns = columns // Style the header row const headerRow = worksheet.getRow(1) headerRow.font = { bold: true } headerRow.alignment = { horizontal: "center" } headerRow.eachCell((cell) => { cell.fill = { type: "pattern", pattern: "solid", fgColor: { argb: "FFCCCCCC" }, } }) // Add example data rows const exampleData = [ { companyName: "ABC Corporation", contactEmail: "contact@abc.com", contactPhone: "+1-123-456-7890", country: "US", source: "Website", status: "COLLECTED", }, { companyName: "XYZ Ltd.", contactEmail: "info@xyz.com", contactPhone: "+44-987-654-3210", country: "GB", source: "Referral", status: "COLLECTED", }, ] // Add the example rows to the worksheet exampleData.forEach((data) => { worksheet.addRow(data) }) // Add data validation for Status column const statusValues = ["COLLECTED", "INVITED", "DISCARDED"] for (let i = 2; i <= 100; i++) { // Apply to rows 2-100 worksheet.getCell(`F${i}`).dataValidation = { type: 'list', allowBlank: true, formulae: [`"${statusValues.join(',')}"`] } } // Add instructions row worksheet.insertRow(1, ["Please fill in the data below. Required fields: Company Name, Contact Email"]) worksheet.mergeCells("A1:F1") const instructionRow = worksheet.getRow(1) instructionRow.font = { bold: true, color: { argb: "FF0000FF" } } instructionRow.alignment = { horizontal: "center" } // Download the workbook const buffer = await workbook.xlsx.writeBuffer() const blob = new Blob([buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", }) const url = URL.createObjectURL(blob) const link = document.createElement("a") link.href = url link.download = "vendor-candidates-template.xlsx" link.click() URL.revokeObjectURL(url) }