page.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use client"
  2. import { useState } from "react"
  3. import { FirmarHeader } from "@/components/firmar/FirmarHeader"
  4. import { FileUploadSection } from "@/components/firmar/FileUploadSection"
  5. import { SignActions } from "@/components/firmar/SignActions"
  6. import { XmlGenerationDialog } from "@/components/factura/XmlGenerationDialog"
  7. import { useXmlSigning } from "@/hooks/firmar/useXmlSigning"
  8. export default function FirmarPage() {
  9. const [dialogOpen, setDialogOpen] = useState(false)
  10. const {
  11. xmlFile,
  12. p12File,
  13. password,
  14. isLoading,
  15. signedXml,
  16. setXmlFile,
  17. setP12File,
  18. setPassword,
  19. handleSign,
  20. handleDownload,
  21. handleReset,
  22. } = useXmlSigning()
  23. const handleSignClick = async () => {
  24. const success = await handleSign()
  25. if (success) {
  26. setDialogOpen(true)
  27. }
  28. }
  29. return (
  30. <div className="container mx-auto max-w-4xl py-8 space-y-8">
  31. <FirmarHeader />
  32. <FileUploadSection
  33. xmlFile={xmlFile}
  34. p12File={p12File}
  35. password={password}
  36. isLoading={isLoading}
  37. onXmlFileChange={setXmlFile}
  38. onP12FileChange={setP12File}
  39. onPasswordChange={setPassword}
  40. />
  41. <SignActions
  42. xmlFile={xmlFile}
  43. p12File={p12File}
  44. password={password}
  45. isLoading={isLoading}
  46. onSign={handleSignClick}
  47. />
  48. {/* Modal de XML Firmado */}
  49. <XmlGenerationDialog
  50. open={dialogOpen}
  51. onOpenChange={setDialogOpen}
  52. xmlGenerado={signedXml || ""}
  53. onDescargarXml={handleDownload}
  54. />
  55. </div>
  56. )
  57. }