From c9cf8dcdffb7f3f33d5dcc2389047a9d18e60bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20FAMIBELLE-PRONZOLA?= Date: Thu, 24 Jul 2025 08:08:15 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20ajout=C3=A9=20impression=20optimis?= =?UTF-8?q?=C3=A9e=20pour=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Composant PrintButton avec fenêtre popup dédiée - Styles CSS print-optimized pour A4 avec media queries - Support markdown complet avec rendu approprié - Interface print avec boutons Imprimer/Fermer - Feedback snackbar cohérent avec autres composants - Intégré dans VersionPage, ListVersions et VersionTimeline --- components/versions/list-versions.js | 6 + components/versions/print-button.js | 395 ++++++++++++++++++++++++ components/versions/version-page.js | 2 + components/versions/version-timeline.js | 6 + 4 files changed, 409 insertions(+) create mode 100644 components/versions/print-button.js diff --git a/components/versions/list-versions.js b/components/versions/list-versions.js index 145b6de..d7c53f1 100644 --- a/components/versions/list-versions.js +++ b/components/versions/list-versions.js @@ -22,6 +22,7 @@ import VersionFilters from './version-filters.js' import CopyButton from './copy-button.js' import ShareButton from './share-button.js' import ExportPdfButton from './export-pdf-button.js' +import PrintButton from './print-button.js' import {formatDate} from '@/lib/format.js' import {compareVersion} from '@/lib/directus.js' import {filterVersions, getFilterStats} from '@/lib/version-utils.js' @@ -128,6 +129,11 @@ function rowContent({ size='small' variant='text' /> + + + + +
+

${versionData.name}

+ + + +
+ +
+

Contenu

+
+ ${renderedContent} +
+
+ + + + + ` + + printWindow.document.write(printHtml) + printWindow.document.close() + + // Auto-focus the print window + printWindow.focus() + + setSnackbar({ + open: true, + message: 'Fenêtre d\'impression ouverte', + severity: 'success' + }) + } catch (error) { + console.error('Erreur lors de l\'impression:', error) + setSnackbar({ + open: true, + message: error.message || 'Une erreur est survenue lors de l\'impression', + severity: 'error' + }) + } finally { + setIsPrinting(false) + } + } + + const handleCloseSnackbar = () => { + setSnackbar(prev => ({...prev, open: false})) + } + + return ( + <> + + + + + {snackbar.message} + + + + ) +} + +PrintButton.propTypes = { + versionData: PropTypes.object.isRequired, + size: PropTypes.oneOf(['small', 'medium', 'large']), + variant: PropTypes.oneOf(['text', 'outlined', 'contained']) +} diff --git a/components/versions/version-page.js b/components/versions/version-page.js index dc05981..9872951 100644 --- a/components/versions/version-page.js +++ b/components/versions/version-page.js @@ -22,6 +22,7 @@ import Footer from '../footer.js' import VoteButtons from './vote-buttons.js' import CopyButton from './copy-button.js' import ExportPdfButton from './export-pdf-button.js' +import PrintButton from './print-button.js' import VersionComparison from './version-comparison.js' import {getVersion, compareVersion} from '@/lib/directus.js' import {formatDate} from '@/lib/format.js' @@ -224,6 +225,7 @@ export default function VersionPage({session, versionId, viewMode}) { + diff --git a/components/versions/version-timeline.js b/components/versions/version-timeline.js index 7c272a9..d290215 100644 --- a/components/versions/version-timeline.js +++ b/components/versions/version-timeline.js @@ -28,6 +28,7 @@ import VoteButtons from './vote-buttons.js' import CopyButton from './copy-button.js' import ShareButton from './share-button.js' import ExportPdfButton from './export-pdf-button.js' +import PrintButton from './print-button.js' import {formatDate} from '@/lib/format.js' import {compareVersion} from '@/lib/directus.js' @@ -219,6 +220,11 @@ function VersionCard({ size='small' variant='text' /> +