summaryrefslogtreecommitdiff
path: root/lib/tech-vendor-candidates/table/excel-template-download.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tech-vendor-candidates/table/excel-template-download.tsx')
-rw-r--r--lib/tech-vendor-candidates/table/excel-template-download.tsx128
1 files changed, 0 insertions, 128 deletions
diff --git a/lib/tech-vendor-candidates/table/excel-template-download.tsx b/lib/tech-vendor-candidates/table/excel-template-download.tsx
deleted file mode 100644
index 673680db..00000000
--- a/lib/tech-vendor-candidates/table/excel-template-download.tsx
+++ /dev/null
@@ -1,128 +0,0 @@
-"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: "Tax ID", key: "taxId", width: 20 },
- { header: "Contact Email", key: "contactEmail", width: 30 },
- { header: "Contact Phone", key: "contactPhone", width: 20 },
- { header: "Address", key: "address", width: 40 },
- { header: "Country", key: "country", width: 20 },
- { header: "Source", key: "source", width: 20 },
- { header: "Items", key: "items", width: 40 },
- { header: "Remark", key: "remark", width: 40 },
- { header: "Status", key: "status", width: 15 },
- ]
-
- // Add columns to the worksheet
- worksheet.columns = columns
-
- // Style the header row
- const headerRow = worksheet.getRow(2)
- headerRow.font = { bold: true }
- headerRow.alignment = { horizontal: "center" }
- headerRow.eachCell((cell) => {
- cell.fill = {
- type: "pattern",
- pattern: "solid",
- fgColor: { argb: "FFCCCCCC" },
- }
-
- // Mark required fields with a red asterisk
- const requiredFields = ["Company Name", "Source", "Items"]
- if (requiredFields.includes(cell.value as string)) {
- cell.value = `${cell.value} *`
- cell.font = { bold: true, color: { argb: "FFFF0000" } }
- }
- })
-
- // Add example data rows
- const exampleData = [
- {
- companyName: "ABC Corporation",
- taxId: "123-45-6789",
- contactEmail: "contact@abc.com",
- contactPhone: "+1-123-456-7890",
- address: "123 Business Ave, Suite 100, New York, NY 10001",
- country: "US",
- source: "Website",
- items: "Electronic components, Circuit boards, Sensors",
- remark: "Potential supplier for Project X",
- status: "COLLECTED",
- },
- {
- companyName: "XYZ Ltd.",
- taxId: "GB987654321",
- contactEmail: "info@xyz.com",
- contactPhone: "+44-987-654-3210",
- address: "45 Industrial Park, London, EC2A 4PX",
- country: "GB",
- source: "Referral",
- items: "Steel components, Metal frames, Industrial hardware",
- remark: "Met at trade show in March",
- 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"]
- const statusColumn = columns.findIndex(col => col.key === "status") + 1
- const statusColLetter = String.fromCharCode(64 + statusColumn)
-
- for (let i = 4; i <= 100; i++) { // Apply to rows 4-100 (after example data)
- worksheet.getCell(`${statusColLetter}${i}`).dataValidation = {
- type: 'list',
- allowBlank: true,
- formulae: [`"${statusValues.join(',')}"`]
- }
- }
-
- // Add instructions row
- worksheet.insertRow(1, ["Please fill in the data below. Required fields are marked with an asterisk (*): Company Name, Source, Items"])
- worksheet.mergeCells(`A1:${String.fromCharCode(64 + columns.length)}1`)
- const instructionRow = worksheet.getRow(1)
- instructionRow.font = { bold: true, color: { argb: "FF0000FF" } }
- instructionRow.alignment = { horizontal: "center" }
- instructionRow.height = 30
-
- // Auto-width columns based on content
- worksheet.columns.forEach(column => {
- if (column.key) { // Check that column.key is defined
- const dataMax = Math.max(...worksheet.getColumn(column.key).values
- .filter(value => value !== null && value !== undefined)
- .map(value => String(value).length)
- )
- column.width = Math.max(column.width || 10, dataMax + 2)
- }
- })
-
- // 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)
-} \ No newline at end of file