diff options
author | Stefan Malzner <stefan@adlk.io> | 2017-10-13 12:29:40 +0200 |
---|---|---|
committer | Stefan Malzner <stefan@adlk.io> | 2017-10-13 12:29:40 +0200 |
commit | 58cda9cc7fb79ca9df6746de7f9662bc08dc156a (patch) | |
tree | 1211600c2a5d3b5f81c435c6896618111a611720 /src/components/services/content/ServiceWebview.js | |
download | ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.tar.gz ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.tar.zst ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.zip |
initial commit
Diffstat (limited to 'src/components/services/content/ServiceWebview.js')
-rw-r--r-- | src/components/services/content/ServiceWebview.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/components/services/content/ServiceWebview.js b/src/components/services/content/ServiceWebview.js new file mode 100644 index 000000000..043ff42ea --- /dev/null +++ b/src/components/services/content/ServiceWebview.js | |||
@@ -0,0 +1,73 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { autorun } from 'mobx'; | ||
4 | import { observer } from 'mobx-react'; | ||
5 | import Webview from 'react-electron-web-view'; | ||
6 | import classnames from 'classnames'; | ||
7 | |||
8 | import ServiceModel from '../../../models/Service'; | ||
9 | |||
10 | @observer | ||
11 | export default class ServiceWebview extends Component { | ||
12 | static propTypes = { | ||
13 | service: PropTypes.instanceOf(ServiceModel).isRequired, | ||
14 | setWebviewReference: PropTypes.func.isRequired, | ||
15 | }; | ||
16 | |||
17 | static defaultProps = { | ||
18 | isActive: false, | ||
19 | }; | ||
20 | |||
21 | state = { | ||
22 | forceRepaint: false, | ||
23 | }; | ||
24 | |||
25 | componentDidMount() { | ||
26 | autorun(() => { | ||
27 | if (this.props.service.isActive) { | ||
28 | this.setState({ forceRepaint: true }); | ||
29 | setTimeout(() => { | ||
30 | this.setState({ forceRepaint: false }); | ||
31 | }, 100); | ||
32 | } | ||
33 | }); | ||
34 | } | ||
35 | |||
36 | webview = null; | ||
37 | |||
38 | render() { | ||
39 | const { | ||
40 | service, | ||
41 | setWebviewReference, | ||
42 | } = this.props; | ||
43 | |||
44 | const webviewClasses = classnames({ | ||
45 | services__webview: true, | ||
46 | 'is-active': service.isActive, | ||
47 | 'services__webview--force-repaint': this.state.forceRepaint, | ||
48 | }); | ||
49 | |||
50 | return ( | ||
51 | <div className={webviewClasses}> | ||
52 | <Webview | ||
53 | ref={(element) => { this.webview = element; }} | ||
54 | |||
55 | autosize | ||
56 | src={service.url} | ||
57 | preload="./webview/plugin.js" | ||
58 | partition={`persist:service-${service.id}`} | ||
59 | |||
60 | onDidAttach={() => setWebviewReference({ | ||
61 | serviceId: service.id, | ||
62 | webview: this.webview.view, | ||
63 | })} | ||
64 | |||
65 | useragent={service.userAgent} | ||
66 | |||
67 | disablewebsecurity | ||
68 | allowpopups | ||
69 | /> | ||
70 | </div> | ||
71 | ); | ||
72 | } | ||
73 | } | ||