import { ActionIcon, Button, Flex, Group, Input, Stack, Text, TextInput } from "@mantine/core"
import { useEffect, useState } from "react"
import createReport, { listCommands } from 'docx-templates'
import { Dropzone, DropzoneProps, IMAGE_MIME_TYPE, MS_WORD_MIME_TYPE } from '@mantine/dropzone'
import { IconFile, IconFileTypeDocx, IconPhoto, IconPlus, IconUpload, IconX } from "@tabler/icons-react"
import { CommandSummary } from "docx-templates/lib/types"
import { Control, Controller, FieldValues, SubmitHandler, useFieldArray, useForm, UseFormRegister } from "react-hook-form"
import { TemplateHandler } from 'easy-template-x'
const xslTemplate = `
progid="Excel.Sheet"
Регион
Нас. пункт
Котельная
Адрес
Кол-во домов
Этаж.
Общая пл.
Кол-во прожив.
Отопление
ГВС
ХВС
Канализация
Сальдо исход.
Объем
Сумма
Объем
Сумма
Объем
Сумма
Объем
Сумма
222
Регион
Нас. пункт
Котельная
Наименование
Кол-во объектов
Объем здания
Отопление
Подогрев
ГВС
ХВС
Канализация
Итого
Объем
Сумма
Объем
Сумма
Объем
Сумма
Объем
Сумма
Объем
Сумма
`
const handleGenerateExcel = () => {
// Define the example XML data
const xmlData = `
1Region 1City 11010005002001000300150040020005002500300
`
// Parse the XSL template and XML data
const parser = new DOMParser()
const xslDoc = parser.parseFromString(xslTemplate, "application/xml")
const xmlDoc = parser.parseFromString(xmlData, "application/xml")
// Apply the transformation
const xsltProcessor = new XSLTProcessor()
xsltProcessor.importStylesheet(xslDoc)
const resultDocument = xsltProcessor.transformToDocument(xmlDoc)
// Serialize the result to a string
const serializer = new XMLSerializer()
const resultXml = serializer.serializeToString(resultDocument)
// Add missing Excel-specific headers if needed
const correctedXml = `\n` + resultXml
// Convert to Blob and trigger download
const blob = new Blob([correctedXml], { type: "application/vnd.ms-excel" })
const url = URL.createObjectURL(blob)
const link = document.createElement("a")
link.href = url
link.download = "template.xls"
link.click()
URL.revokeObjectURL(url)
}
const TemplateFormET = ({
templateUrl
}: {
templateUrl: string
}) => {
const [templateUint8Array, setTemplateUint8Array] = useState(null)
const [loading, setLoading] = useState(false)
const loadTemplate = async (templateUrl: string) => {
setLoading(true)
try {
const response = await fetch(templateUrl)
const templateArrayBuffer = await response.arrayBuffer()
setTemplateUint8Array(new Uint8Array(templateArrayBuffer))
} catch (error) {
console.error("Error generating DOCX:", error)
} finally {
setLoading(false)
}
}
const loadTags = async (templateUint8Array: Uint8Array) => {
const handler = new TemplateHandler()
const tags = await handler.parseTags(templateUint8Array)
console.log(tags)
}
useEffect(() => {
if (templateUint8Array) {
loadTags(templateUint8Array)
}
}, [templateUint8Array])
useEffect(() => {
if (templateUrl) {
loadTemplate(templateUrl)
}
}, [templateUrl])
return (