Skip to content

Commit e4f34fb

Browse files
committed
fix: print dialog using react-pdf
1 parent 344e6f6 commit e4f34fb

3 files changed

Lines changed: 26 additions & 75 deletions

File tree

‎src/ReportView/PrintButton.js‎

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
import React from 'react'
33
import PrintIcon from '@material-ui/icons/Print'
44
import Button from '@material-ui/core/Button'
5-
import Dialog from '@material-ui/core/Dialog'
6-
import DialogActions from '@material-ui/core/DialogActions'
7-
import DialogContent from '@material-ui/core/DialogContent'
8-
import DialogTitle from '@material-ui/core/DialogTitle'
95
import InputLabel from '@material-ui/core/InputLabel'
106
import Input from '@material-ui/core/Input'
117
import FormControl from '@material-ui/core/FormControl'
@@ -33,15 +29,7 @@ type Props = {
3329
paperSize: PaperSize
3430
}
3531

36-
type State = {
37-
dialogOpen: boolean
38-
}
39-
4032
class PrintButton extends React.Component<Props, State> {
41-
state = {
42-
dialogOpen: false
43-
}
44-
4533
handleKeyDown = (event: SyntheticKeyboardEvent<HTMLElement>) => {
4634
if (!(event.key === 'p' && event.metaKey)) return
4735
event.preventDefault()
@@ -50,70 +38,22 @@ class PrintButton extends React.Component<Props, State> {
5038

5139
handleKeyUp = (event: SyntheticKeyboardEvent<HTMLElement>) => {
5240
window.removeEventListener('keyup', this.handleKeyUp)
53-
if (this.state.dialogOpen) {
54-
this.props.requestPrint()
55-
} else {
56-
this.openDialog()
57-
}
41+
this.props.requestPrint()
5842
}
5943

60-
openDialog = () => this.setState({ dialogOpen: true })
61-
62-
closeDialog = () => this.setState({ dialogOpen: false })
63-
6444
handleChangePaperSize = (e: SyntheticInputEvent<HTMLSelectElement>) => {
6545
// $FlowFixMe - Flow doesn't recognize value being one of options
6646
const value: PaperSize = e.currentTarget.value
6747
this.props.changePaperSize(value)
6848
}
6949

7050
render() {
71-
const { requestPrint, paperSize } = this.props
72-
const { dialogOpen } = this.state
7351
return (
7452
<React.Fragment>
7553
<ToolbarButton onClick={this.openDialog}>
7654
<PrintIcon />
7755
<FormattedMessage {...messages.print} />
7856
</ToolbarButton>
79-
<Dialog
80-
open={dialogOpen}
81-
onClose={this.closeDialog}
82-
fullWidth
83-
maxWidth="xs"
84-
className="d-print-none">
85-
<DialogTitle>
86-
<FormattedMessage {...messages.dialogTitle} />
87-
</DialogTitle>
88-
<DialogContent>
89-
<FormControl>
90-
<InputLabel htmlFor="paper-size">
91-
<FormattedMessage {...messages.paperSize} />
92-
</InputLabel>
93-
<Select
94-
native
95-
value={paperSize}
96-
onChange={this.handleChangePaperSize}
97-
input={<Input id="paper-size" />}>
98-
<option value="a4">A4 (210mm x 297mm)</option>
99-
<option value="letter">Letter (8.5&quot; x 11&quot;)</option>
100-
</Select>
101-
</FormControl>
102-
</DialogContent>
103-
<DialogActions>
104-
<Button onClick={this.closeDialog} color="primary">
105-
<FormattedMessage {...messages.close} />
106-
</Button>
107-
<Button
108-
onClick={() => {
109-
this.closeDialog()
110-
requestPrint()
111-
}}
112-
color="primary">
113-
<FormattedMessage {...messages.print} />
114-
</Button>
115-
</DialogActions>
116-
</Dialog>
11757
</React.Fragment>
11858
)
11959
}

‎src/ReportView/ReportView.js‎

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import React, { useState, useLayoutEffect, useMemo } from 'react'
33
import { makeStyles } from '@material-ui/core/styles'
44
import { PDFViewer } from '@react-pdf/renderer'
55

6+
import {
7+
PDFDownloadLink
8+
} from '@react-pdf/renderer'
9+
610
import ReportViewPDF, {
711
type ReportViewPDFProps
812
} from '../ReportViewPDF/ReportView'
@@ -101,28 +105,31 @@ const ReportView = ({
101105
)
102106
}
103107
}
108+
109+
var PDF = () => <ReportViewPDF
110+
observations={filteredObservations}
111+
getPreset={getPresetWithFilteredFields}
112+
getMedia={getMedia}
113+
paperSize={paperSize}
114+
print={print}
115+
{...otherProps}
116+
/>
117+
104118
return (
105119
<div className={cx.root}>
106120
<Toolbar>
107-
<PrintButton
108-
requestPrint={() => setPrint(true)}
109-
changePaperSize={newSize => setPaperSize(newSize)}
110-
paperSize={paperSize}
111-
/>
121+
<PDFDownloadLink
122+
document={<PDF />}
123+
filename={Date.now() + ".pdf"}>
124+
{({ blob, url, loading, error }) => !loading && <PrintButton />}
125+
</PDFDownloadLink>
112126
<HideFieldsButton
113127
fieldState={fieldState}
114128
onFieldStateUpdate={setFieldState}
115129
/>
116130
</Toolbar>
117131
<PDFViewer width="100%" height="100%">
118-
<ReportViewPDF
119-
observations={filteredObservations}
120-
getPreset={getPresetWithFilteredFields}
121-
getMedia={getMedia}
122-
paperSize={paperSize}
123-
print={print}
124-
{...otherProps}
125-
/>
132+
<PDF />
126133
</PDFViewer>
127134
</div>
128135
)

‎src/ReportViewPDF/ReportView.js‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,9 @@ export default ReportViewPDF
198198
const styles = StyleSheet.create({
199199
page: {
200200
backgroundColor: 'white',
201-
padding: '15mm',
201+
paddingTop: 65,
202+
paddingBottom: 35,
203+
paddingHorizontal: 35,
202204
flexDirection: 'row'
203205
},
204206
pageContent: {
@@ -269,5 +271,7 @@ const styles = StyleSheet.create({
269271
},
270272
fieldValue: {
271273
fontSize: 12
274+
},
275+
header: {
272276
}
273277
})

0 commit comments

Comments
 (0)