From 1839eff4fcad186871672499b6c3cc68e9539ce2 Mon Sep 17 00:00:00 2001 From: Stefan Malzner Date: Thu, 9 Nov 2017 12:11:16 +0100 Subject: feat(Service): Add option to display disabled services in tabs --- src/components/services/content/ServiceDisabled.js | 48 +++++++++++++++++++ src/components/services/content/ServiceWebview.js | 56 ++++++++++++++-------- src/components/services/content/Services.js | 9 ++++ .../services/content/WebviewCrashHandler.js | 2 +- 4 files changed, 93 insertions(+), 22 deletions(-) create mode 100644 src/components/services/content/ServiceDisabled.js (limited to 'src/components/services/content') diff --git a/src/components/services/content/ServiceDisabled.js b/src/components/services/content/ServiceDisabled.js new file mode 100644 index 000000000..732b6c003 --- /dev/null +++ b/src/components/services/content/ServiceDisabled.js @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { observer } from 'mobx-react'; +import { defineMessages, intlShape } from 'react-intl'; + +import Button from '../../ui/Button'; + +const messages = defineMessages({ + headline: { + id: 'service.disabledHandler.headline', + defaultMessage: '!!!{name} is disabled', + }, + action: { + id: 'service.disabledHandler.action', + defaultMessage: '!!!Enable {name}', + }, +}); + +@observer +export default class ServiceDisabled extends Component { + static propTypes = { + name: PropTypes.string.isRequired, + enable: PropTypes.func.isRequired, + }; + + static contextTypes = { + intl: intlShape, + }; + + countdownInterval = null; + countdownIntervalTimeout = 1000; + + render() { + const { name, enable } = this.props; + const { intl } = this.context; + + return ( +
+

{intl.formatMessage(messages.headline, { name })}

+
+ ); + } +} diff --git a/src/components/services/content/ServiceWebview.js b/src/components/services/content/ServiceWebview.js index cd59e0a8a..a71017a6e 100644 --- a/src/components/services/content/ServiceWebview.js +++ b/src/components/services/content/ServiceWebview.js @@ -8,6 +8,7 @@ import classnames from 'classnames'; import ServiceModel from '../../../models/Service'; import StatusBarTargetUrl from '../../ui/StatusBarTargetUrl'; import WebviewCrashHandler from './WebviewCrashHandler'; +import ServiceDisabled from './ServiceDisabled'; @observer export default class ServiceWebview extends Component { @@ -15,6 +16,7 @@ export default class ServiceWebview extends Component { service: PropTypes.instanceOf(ServiceModel).isRequired, setWebviewReference: PropTypes.func.isRequired, reload: PropTypes.func.isRequired, + enable: PropTypes.func.isRequired, }; static defaultProps = { @@ -56,6 +58,7 @@ export default class ServiceWebview extends Component { service, setWebviewReference, reload, + enable, } = this.props; const webviewClasses = classnames({ @@ -80,27 +83,38 @@ export default class ServiceWebview extends Component { reload={reload} /> )} - { this.webview = element; }} - - autosize - src={service.url} - preload="./webview/plugin.js" - partition={`persist:service-${service.id}`} - - onDidAttach={() => setWebviewReference({ - serviceId: service.id, - webview: this.webview.view, - })} - - onUpdateTargetUrl={this.updateTargetUrl} - - useragent={service.userAgent} - - disablewebsecurity - allowpopups - /> - {statusBar} + {!service.isEnabled && ( + + )} + {service.isEnabled && ( +
+ { this.webview = element; }} + + autosize + src={service.url} + preload="./webview/plugin.js" + partition={`persist:service-${service.id}`} + + onDidAttach={() => setWebviewReference({ + serviceId: service.id, + webview: this.webview.view, + })} + + onUpdateTargetUrl={this.updateTargetUrl} + + useragent={service.userAgent} + + disablewebsecurity + allowpopups + /> + {statusBar} +
+ )} ); } diff --git a/src/components/services/content/Services.js b/src/components/services/content/Services.js index bad525d22..5230508f7 100644 --- a/src/components/services/content/Services.js +++ b/src/components/services/content/Services.js @@ -26,6 +26,7 @@ export default class Services extends Component { handleIPCMessage: PropTypes.func.isRequired, openWindow: PropTypes.func.isRequired, reload: PropTypes.func.isRequired, + update: PropTypes.func.isRequired, }; static defaultProps = { @@ -44,6 +45,7 @@ export default class Services extends Component { setWebviewReference, openWindow, reload, + update, } = this.props; const { intl } = this.context; @@ -76,6 +78,13 @@ export default class Services extends Component { setWebviewReference={setWebviewReference} openWindow={openWindow} reload={() => reload({ serviceId: service.id })} + enable={() => update({ + serviceId: service.id, + serviceData: { + isEnabled: true, + }, + redirect: false, + })} /> ))} diff --git a/src/components/services/content/WebviewCrashHandler.js b/src/components/services/content/WebviewCrashHandler.js index 24903f3c5..d48152c18 100644 --- a/src/components/services/content/WebviewCrashHandler.js +++ b/src/components/services/content/WebviewCrashHandler.js @@ -25,7 +25,7 @@ const messages = defineMessages({ }); @observer -export default class ServiceWebview extends Component { +export default class WebviewCrashHandler extends Component { static propTypes = { name: PropTypes.string.isRequired, reload: PropTypes.func.isRequired, -- cgit v1.2.3-70-g09d2