From b9638f0c2c6702cc9a4258c5cb9849a8288ad74b Mon Sep 17 00:00:00 2001 From: srgooglo Date: Fri, 13 May 2022 21:48:06 +0200 Subject: [PATCH] added `Login` component --- packages/app/src/components/Login/index.jsx | 132 +++++++++++++++++++ packages/app/src/components/Login/index.less | 63 +++++++++ packages/app/src/components/index.js | 1 + 3 files changed, 196 insertions(+) create mode 100644 packages/app/src/components/Login/index.jsx create mode 100644 packages/app/src/components/Login/index.less diff --git a/packages/app/src/components/Login/index.jsx b/packages/app/src/components/Login/index.jsx new file mode 100644 index 00000000..6b8ef895 --- /dev/null +++ b/packages/app/src/components/Login/index.jsx @@ -0,0 +1,132 @@ +import React from "react" +import * as antd from "antd" +import { FormGenerator } from "components" +import { Icons } from "components/Icons" + +import config from "config" + +import "./index.less" + +const formInstance = [ + { + id: "username", + element: { + component: "Input", + icon: "User", + placeholder: "Username", + props: { + autoCorrect: "off", + autoCapitalize: "none", + className: "login-form-username", + }, + }, + item: { + hasFeedback: true, + rules: [ + { + required: true, + message: 'Please input your Username!', + }, + ], + } + }, + { + id: "password", + element: { + component: "Input", + icon: "Lock", + placeholder: "Password", + props: { + type: "password" + } + }, + item: { + hasFeedback: true, + rules: [ + { + required: true, + message: 'Please input your Password!', + }, + ], + } + }, + { + id: "login_btn", + withValidation: true, + element: { + component: "Button", + props: { + icon: "User", + children: "Login", + type: "primary", + htmlType: "submit" + } + } + }, +] + +export default class Login extends React.Component { + static pageStatement = { + bottomBarAllowed: false + } + + handleFinish = async (values, ctx) => { + ctx.toogleValidation(true) + + const payload = { + username: values.username, + password: values.password, + allowRegenerate: values.allowRegenerate, + } + + this.props.sessionController.login(payload, (error, response) => { + ctx.toogleValidation(false) + ctx.clearErrors() + + if (error) { + ctx.shake("all") + return ctx.error("result", error) + } else { + if (response.status === 200) { + this.onDone() + } + } + }) + } + + onDone = () => { + if (typeof this.props.onDone === "function") { + this.props.onDone() + } + + if (typeof this.props.close === "function") { + this.props.close() + } + } + + render() { + return ( +
+
+
+ +
+
+ {this.props.session &&
+

You already have a valid session.

+
+ @{this.props.session.username} +
+ window.app.setLocation(config.app?.mainPath ?? "/main")} >Go to main +
} + +
+ ) + } +} \ No newline at end of file diff --git a/packages/app/src/components/Login/index.less b/packages/app/src/components/Login/index.less new file mode 100644 index 00000000..14d587a4 --- /dev/null +++ b/packages/app/src/components/Login/index.less @@ -0,0 +1,63 @@ +.login { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + > div { + margin-bottom: 20px; + } + + .header { + .logo { + width: 15vw; + + img { + width: 100%; + height: 100%; + } + } + } +} + +.login-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.login-form-username { + font-size: 20px!important; + + input { + padding: 20px!important; + font-size: 20px!important; + } +} + +.session_available { + width: fit-content; + height: fit-content; + + padding: 20px; + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + border: 1px solid #e5e5e5; + border-radius: 8px; + + .session_card { + width: fit-content; + height: fit-content; + + margin: 10px; + padding: 5px 10px; + + border: 1px solid #e5e5e5; + border-radius: 8px; + } +} diff --git a/packages/app/src/components/index.js b/packages/app/src/components/index.js index 5293b63a..dba491bc 100644 --- a/packages/app/src/components/index.js +++ b/packages/app/src/components/index.js @@ -22,6 +22,7 @@ export { default as Skeleton } from "./Skeleton" export { default as Navigation } from "./Navigation" export { default as ImageUploader } from "./ImageUploader" export { default as ImageViewer } from "./ImageViewer" +export { default as Login } from "./Login" // BUTTONS export { default as LikeButton } from "./LikeButton"