From 2fc67d1c9bc2038179771238a0cb5d58995e05c3 Mon Sep 17 00:00:00 2001 From: Stefan Malzner Date: Fri, 21 Dec 2018 11:35:00 +0100 Subject: BasicAuth first draft --- package-lock.json | 18 +++++- package.json | 1 + src/app.js | 1 + src/components/layout/AppLayout.js | 2 + src/components/ui/Modal/index.js | 59 ++++++++++++++++++ src/components/ui/Modal/styles.js | 32 ++++++++++ src/electron/ipc-api/settings.js | 1 - src/features/basicAuth/Component.js | 102 +++++++++++++++++++++++++++++++ src/features/basicAuth/Form.js | 17 ++++++ src/features/basicAuth/index.js | 68 +++++++++++++++++++++ src/features/basicAuth/mainIpcHandler.js | 9 +++ src/features/basicAuth/styles.js | 12 ++++ src/index.js | 39 ++++++++++-- src/stores/FeaturesStore.js | 2 + src/theme/dark/index.js | 3 + src/theme/default/index.js | 3 + 16 files changed, 361 insertions(+), 8 deletions(-) create mode 100644 src/components/ui/Modal/index.js create mode 100644 src/components/ui/Modal/styles.js create mode 100644 src/features/basicAuth/Component.js create mode 100644 src/features/basicAuth/Form.js create mode 100644 src/features/basicAuth/index.js create mode 100644 src/features/basicAuth/mainIpcHandler.js create mode 100644 src/features/basicAuth/styles.js diff --git a/package-lock.json b/package-lock.json index 16fe71944..117846d7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "franz", - "version": "5.0.0-beta.21", + "version": "5.0.0-beta.22", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4687,6 +4687,11 @@ } } }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -10017,6 +10022,17 @@ "spin.js": "2.x" } }, + "react-modal": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.7.1.tgz", + "integrity": "sha512-eSgotXkqOCXi0b27AwLCoJ8yqLepKnbZdMp/zfUmZPnMNoe39pDT0mbAPq9rp+TToqM5GUTv8C36Cuja+ThbhA==", + "requires": { + "exenv": "^1.2.0", + "prop-types": "^15.5.10", + "react-lifecycles-compat": "^3.0.0", + "warning": "^3.0.0" + } + }, "react-router": { "version": "3.2.1", "resolved": "http://registry.npmjs.org/react-router/-/react-router-3.2.1.tgz", diff --git a/package.json b/package.json index 05921d1a1..a7ff829fe 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "react-intl": "2.7.2", "react-jss": "8.6.1", "react-loader": "2.4.5", + "react-modal": "3.7.1", "react-router": "^3.0.2", "react-sortable-hoc": "0.8.4", "react-tooltip": "3.9.0", diff --git a/src/app.js b/src/app.js index 831dd93ce..6660feb46 100644 --- a/src/app.js +++ b/src/app.js @@ -62,6 +62,7 @@ window.addEventListener('load', () => { menu, touchBar, analytics, + features: {}, render() { const preparedApp = ( diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js index dbe0bb4b6..28eaa7fdc 100644 --- a/src/components/layout/AppLayout.js +++ b/src/components/layout/AppLayout.js @@ -6,6 +6,7 @@ import { TitleBar } from 'electron-react-titlebar'; import InfoBar from '../ui/InfoBar'; import { Component as DelayApp } from '../../features/delayApp'; +import { Component as BasicAuth } from '../../features/basicAuth'; import ErrorBoundary from '../util/ErrorBoundary'; import globalMessages from '../../i18n/globalMessages'; @@ -161,6 +162,7 @@ export default @observer class AppLayout extends Component { )} {isDelayAppScreenVisible && ()} + {services} diff --git a/src/components/ui/Modal/index.js b/src/components/ui/Modal/index.js new file mode 100644 index 000000000..d84e4c713 --- /dev/null +++ b/src/components/ui/Modal/index.js @@ -0,0 +1,59 @@ +import React, { Component } from 'react'; +import ReactModal from 'react-modal'; +import PropTypes from 'prop-types'; +import classnames from 'classnames'; +import injectCSS from 'react-jss'; + +import styles from './styles'; + +export default @injectCSS(styles) class Modal extends Component { + static propTypes = { + children: PropTypes.node.isRequired, + className: PropTypes.string, + classes: PropTypes.object.isRequired, + isOpen: PropTypes.bool.isRequired, + portal: PropTypes.string, + close: PropTypes.func.isRequired, + } + + static defaultProps = { + className: null, + portal: 'modal-portal', + } + + render() { + const { + children, + className, + classes, + isOpen, + portal, + close, + } = this.props; + + return ( + + {/*