From cf3a33937ad5e7d66a58c60e1635e61757fd58d0 Mon Sep 17 00:00:00 2001 From: ErickSkrauch Date: Sun, 25 Mar 2018 22:16:45 +0300 Subject: [PATCH] Implemented UI for Accounts applications management. Introduced copy service and injected it usage into auth finish page. Introduced Collapse component. Introduced Radio component. Generalized Checkbox component to share Radio component styles. Improved Textarea component: it now has auto height functionality. Improved profile/BackButton component: now you can pass custom url. BSOD is no longer displayed on 404 response. --- .eslintrc | 6 +- package.json | 2 + src/components/auth/actions.js | 2 +- src/components/auth/auth.scss | 3 + src/components/auth/finish/Finish.js | 49 +--- src/components/auth/password/PasswordBody.js | 11 +- src/components/auth/register/RegisterBody.js | 29 +- src/components/contact/ContactForm.js | 2 + src/components/dev/apps/ApplicationItem.js | 246 +++++++++++++++++ .../dev/apps/ApplicationsIndex.intl.json | 26 ++ src/components/dev/apps/ApplicationsIndex.js | 198 ++++++++++++++ src/components/dev/apps/actions.js | 68 +++++ .../applicationForm/ApplicationForm.intl.json | 20 ++ .../apps/applicationForm/ApplicationForm.js | 129 +++++++++ .../ApplicationTypeSwitcher.js | 40 +++ .../applicationForm/MinecraftServerType.js | 59 ++++ .../dev/apps/applicationForm/WebsiteType.js | 74 +++++ .../applicationTypeSwitcher.scss | 3 + .../dev/apps/applicationsIndex.scss | 252 ++++++++++++++++++ src/components/dev/apps/icons/cube.svg | 5 + .../dev/apps/icons/loading-cube.svg | 17 ++ src/components/dev/apps/icons/tools.svg | 6 + src/components/dev/apps/index.js | 4 + src/components/dev/apps/reducer.js | 29 ++ src/components/footerMenu/FooterMenu.js | 16 +- .../footerMenu/footerMenu.intl.json | 3 +- src/components/profile/ProfileForm.js | 13 +- src/components/ui/bsod/BsodMiddleware.js | 2 +- src/components/ui/buttons.scss | 8 +- src/components/ui/collapse/Collapse.js | 85 ++++++ src/components/ui/collapse/collapse.scss | 9 + src/components/ui/collapse/index.js | 2 + src/components/ui/form/Button.js | 35 ++- src/components/ui/form/Checkbox.js | 34 ++- src/components/ui/form/Input.js | 90 ++++--- src/components/ui/form/LinkButton.js | 14 + src/components/ui/form/Radio.js | 58 ++++ src/components/ui/form/TextArea.js | 50 ++-- src/components/ui/form/form.scss | 109 ++++++-- src/components/ui/form/index.js | 4 + src/icons/webfont/clipboard.svg | 3 + src/index.scss | 3 +- src/pages/dev/ApplicationsListPage.js | 61 +++++ src/pages/dev/CreateNewApplicationPage.js | 71 +++++ src/pages/dev/DevPage.js | 30 +++ src/pages/dev/UpdateApplicationPage.js | 113 ++++++++ src/pages/dev/dev.scss | 18 ++ src/pages/root/RootPage.js | 2 + src/reducers.js | 4 +- src/services/api/oauth.js | 58 +++- src/services/copy.js | 18 ++ src/services/errorsDict/errorsDict.intl.json | 4 +- src/services/errorsDict/errorsDict.js | 3 + src/services/loader.js | 11 +- src/services/request/request.js | 40 +-- yarn.lock | 16 ++ 56 files changed, 2054 insertions(+), 213 deletions(-) create mode 100644 src/components/auth/auth.scss create mode 100644 src/components/dev/apps/ApplicationItem.js create mode 100644 src/components/dev/apps/ApplicationsIndex.intl.json create mode 100644 src/components/dev/apps/ApplicationsIndex.js create mode 100644 src/components/dev/apps/actions.js create mode 100644 src/components/dev/apps/applicationForm/ApplicationForm.intl.json create mode 100644 src/components/dev/apps/applicationForm/ApplicationForm.js create mode 100644 src/components/dev/apps/applicationForm/ApplicationTypeSwitcher.js create mode 100644 src/components/dev/apps/applicationForm/MinecraftServerType.js create mode 100644 src/components/dev/apps/applicationForm/WebsiteType.js create mode 100644 src/components/dev/apps/applicationForm/applicationTypeSwitcher.scss create mode 100644 src/components/dev/apps/applicationsIndex.scss create mode 100644 src/components/dev/apps/icons/cube.svg create mode 100644 src/components/dev/apps/icons/loading-cube.svg create mode 100644 src/components/dev/apps/icons/tools.svg create mode 100644 src/components/dev/apps/index.js create mode 100644 src/components/dev/apps/reducer.js create mode 100644 src/components/ui/collapse/Collapse.js create mode 100644 src/components/ui/collapse/collapse.scss create mode 100644 src/components/ui/collapse/index.js create mode 100644 src/components/ui/form/LinkButton.js create mode 100644 src/components/ui/form/Radio.js create mode 100755 src/icons/webfont/clipboard.svg create mode 100644 src/pages/dev/ApplicationsListPage.js create mode 100644 src/pages/dev/CreateNewApplicationPage.js create mode 100644 src/pages/dev/DevPage.js create mode 100644 src/pages/dev/UpdateApplicationPage.js create mode 100644 src/pages/dev/dev.scss create mode 100644 src/services/copy.js diff --git a/.eslintrc b/.eslintrc index 15fbdd5..d54d531 100644 --- a/.eslintrc +++ b/.eslintrc @@ -147,7 +147,11 @@ "semi-spacing": "error", "keyword-spacing": "warn", "space-before-blocks": "error", - "space-before-function-paren": ["error", "never"], + "space-before-function-paren": ["error", { + "anonymous": "never", + "named": "never", + "asyncArrow": "always" + }], "space-in-parens": "warn", "space-infix-ops": "warn", "space-unary-ops": "error", diff --git a/package.json b/package.json index e0e2fd5..8bb1ab6 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "dependencies": { "babel-polyfill": "^6.3.14", "classnames": "^2.1.3", + "copy-to-clipboard": "~3.0.8", "debounce": "^1.0.0", "flag-icon-css": "^2.8.0", "intl": "^1.2.2", @@ -43,6 +44,7 @@ "react-motion": "^0.5.0", "react-redux": "^5.0.6", "react-router-dom": "^4.1.1", + "react-textarea-autosize": "^6.0.0", "react-transition-group": "^1.1.3", "redux": "^3.0.4", "redux-localstorage": "^0.4.1", diff --git a/src/components/auth/actions.js b/src/components/auth/actions.js index 6e1947d..b26c497 100644 --- a/src/components/auth/actions.js +++ b/src/components/auth/actions.js @@ -370,7 +370,7 @@ export function oAuthValidate(oauthData: { export function oAuthComplete(params: {accept?: bool} = {}) { return wrapInLoader((dispatch, getState) => oauth.complete(getState().auth.oauth, params) - .then((resp) => { + .then((resp: Object) => { localStorage.removeItem('oauthData'); if (resp.redirectUri.startsWith('static_page')) { diff --git a/src/components/auth/auth.scss b/src/components/auth/auth.scss new file mode 100644 index 0000000..877a295 --- /dev/null +++ b/src/components/auth/auth.scss @@ -0,0 +1,3 @@ +.checkboxInput { + margin-top: 15px; +} diff --git a/src/components/auth/finish/Finish.js b/src/components/auth/finish/Finish.js index 11d920e..70ba20b 100644 --- a/src/components/auth/finish/Finish.js +++ b/src/components/auth/finish/Finish.js @@ -6,6 +6,7 @@ import { FormattedMessage as Message } from 'react-intl'; import Helmet from 'react-helmet'; import { Button } from 'components/ui/form'; +import copy from 'services/copy'; import messages from './Finish.intl.json'; import styles from './finish.scss'; @@ -21,13 +22,8 @@ class Finish extends Component { success: PropTypes.bool }; - state = { - isCopySupported: document.queryCommandSupported && document.queryCommandSupported('copy') - }; - render() { const {appName, code, state, displayCode, success} = this.props; - const {isCopySupported} = this.state; const authData = JSON.stringify({ auth_code: code, // eslint-disable-line state @@ -53,18 +49,16 @@ class Finish extends Component {
-
{code}
+
+ {code} +
- {isCopySupported ? ( -