Skip to content

Commit 81bc44e

Browse files
committed
Add pdf slideshow partial
1 parent 493184a commit 81bc44e

File tree

6 files changed

+138
-0
lines changed

6 files changed

+138
-0
lines changed

package-lock.json

+71
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"interactjs": "^1.3.4",
3434
"jquery": "^3.3.1",
3535
"moment": "^2.23.0",
36+
"pdf-slideshow": "^0.1.2",
3637
"prismjs": "^1.15.0",
3738
"react": "^16.6.3",
3839
"react-dom": "^16.6.3",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import React from 'react'
2+
import PdfSlideshow, { setPdfJsWorkerPath } from 'pdf-slideshow'
3+
import { withPrefix } from 'gatsby'
4+
5+
setPdfJsWorkerPath(withPrefix('/pdf.worker.min.js'))
6+
7+
export default props => <PdfSlideshow {...props} />

src/partials/PdfSlideshow/index.js

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import React, { Fragment, lazy, Suspense } from 'react'
2+
import { Paper } from '@material-ui/core'
3+
import styled from 'styled-components'
4+
import withSimpleErrorBoundary from '../../util/withSimpleErrorBoundary'
5+
import Loading from '../../components/Loading'
6+
const PdfSlideshow = lazy(() => import('./PdfSlideshowLoader'))
7+
8+
const HiddenLinkWrapper = styled.div`
9+
display: none;
10+
`
11+
12+
const StyledPaper = styled(Paper)`
13+
@media only screen and (max-width: 800px) {
14+
overflow-y: scroll;
15+
}
16+
`
17+
18+
class PdfSlideshowWrapper extends React.Component {
19+
state = {
20+
render: false,
21+
path: undefined,
22+
}
23+
24+
constructor(props) {
25+
super(props)
26+
this.linkContainer = React.createRef()
27+
}
28+
29+
componentDidMount() {
30+
const links = this.linkContainer.current
31+
const path = links.querySelector('a').href
32+
this.setState({ render: true, path })
33+
}
34+
35+
render() {
36+
if (!this.state.render) {
37+
return (
38+
<Fragment>
39+
<Loading loading={true} heightHint="540px" />
40+
<HiddenLinkWrapper ref={this.linkContainer}>
41+
{this.props.children}
42+
</HiddenLinkWrapper>
43+
</Fragment>
44+
)
45+
}
46+
return (
47+
<Suspense fallback={<div style={{ height: '540px' }}>Loading...</div>}>
48+
<StyledPaper>
49+
<PdfSlideshow slideWidth={800} pdfLocation={this.state.path} />
50+
</StyledPaper>
51+
</Suspense>
52+
)
53+
}
54+
}
55+
56+
export default withSimpleErrorBoundary(PdfSlideshowWrapper)

src/partials/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import Quiznator from './Quiznator'
3232
import PleaseLogin from './PleaseLogin'
3333
import FloatImageRight from './FloatImageRight'
3434
import CodeStatesVisualizer from './CodeStatesVisualizer'
35+
import PdfSlideshow from './PdfSlideshow'
3536

3637
import {
3738
Table,
@@ -52,6 +53,7 @@ const mapping = {
5253
'please-login': PleaseLogin,
5354
'float-image-right': FloatImageRight,
5455
'code-states-visualizer': CodeStatesVisualizer,
56+
'pdf-slideshow': PdfSlideshow,
5557
youtube: Youtube,
5658
quiznator: Quiznator,
5759
table: Table,

static/pdf.worker.min.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)