diff --git a/screens/Auth/Register.jsx b/screens/Auth/Register.jsx index bda9902..da7a82a 100644 --- a/screens/Auth/Register.jsx +++ b/screens/Auth/Register.jsx @@ -1,170 +1,329 @@ -import React, { useEffect, useState } from 'react' +import React, { useEffect, useState } from "react"; import { - Box, Button, Heading, Input, Text, Image, Center, Actionsheet, useDisclose, Pressable, HStack, Icon, Link, VStack, ScrollView, Avatar -} from 'native-base' -import { createUserWithEmailAndPassword } from 'firebase/auth' -import * as ImagePicker from 'expo-image-picker' -import ActiveController from '../../controller/Active' -import { auth } from '../../config' -import { MaterialIcons } from '@expo/vector-icons' + Box, + Button, + Heading, + Input, + Text, + Image, + Center, + Actionsheet, + useDisclose, + Pressable, + HStack, + Icon, + Link, + VStack, + ScrollView, + Avatar, + ZStack, +} from "native-base"; +import { createUserWithEmailAndPassword } from "firebase/auth"; +import * as ImagePicker from "expo-image-picker"; +import ActiveController from "../../controller/Active"; +import { auth } from "../../config"; +import { MaterialIcons } from "@expo/vector-icons"; -export function RegisterScreen () { - const [email, setEmail] = useState('') - const [password, setPassword] = useState() - const [confirm, setConfirm] = useState() - const [showPwd, setShowPwd] = useState(false) - const [showPwd2, setShowPwd2] = useState(false) - const [registerData, setRegisterData] = useState({}) - const [avatar, setAvatar] = useState() - const [msg, setMsg] = useState() - const { - isOpen, - onOpen, - onClose - } = useDisclose() +export function RegisterScreen() { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(); + const [confirm, setConfirm] = useState(); + const [showPwd, setShowPwd] = useState(false); + const [showPwd2, setShowPwd2] = useState(false); + const [registerData, setRegisterData] = useState({}); + const [avatar, setAvatar] = useState(); + const [msg, setMsg] = useState(); + const { isOpen, onOpen, onClose } = useDisclose(); const pickImage = async () => { const result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, allowsEditing: true, aspect: [1, 1], - quality: 0.2 - }) + quality: 0.2, + }); if (!result.assets[0].canceled) { - setAvatar(result.assets[0].uri) + setAvatar(result.assets[0].uri); if (avatar === undefined) { - setAvatar(result.assets[0].uri) - setRegisterData({ ...registerData, avatar: result.assets[0].uri }) + setAvatar(result.assets[0].uri); + setRegisterData({ ...registerData, avatar: result.assets[0].uri }); } } - } + }; const register = () => { if (Object.values(registerData).length < 6) { - setMsg('請填寫完整') - return + setMsg("請填寫完整"); + return; } createUserWithEmailAndPassword(auth, email, password) .then((userCredential) => { // Signed in - const { user } = userCredential - ActiveController.addUser(user.uid, registerData) + const { user } = userCredential; + ActiveController.addUser(user.uid, registerData); }) .catch((err) => { - setMsg(err.code) - }) - } + setMsg(err.code); + }); + }; return ( -
- - +
+ + - - - - - 註冊帳號 - - 姓名 - setRegisterData({ ...registerData, name })} /> - - 科系 - setRegisterData({ ...registerData, major })} /> - - 年級 - setRegisterData({ ...registerData, grade })} /> - - 學號 - setRegisterData({ ...registerData, studentID: id })} /> - - 電話 - setRegisterData({ ...registerData, phone })} /> - - Portal帳號 - { setEmail(text); setRegisterData({ ...registerData, email: text }) }} /> - - 設定密碼 - setPassword(text)} - type={showPwd ? 'text' : 'password'} - InputRightElement={ - setShowPwd(!showPwd)}> - } size={5} mr="2" color="muted.400" /> - }/> - - 確認密碼 - setConfirm(text)} InputRightElement={ - setShowPwd2(!showPwd2)}> - } size={5} mr="2" color="muted.400" /> - }/> - {(password && confirm && password !== confirm) && 密碼不相符,請再次做確認} + + + + 註冊帳號 + + + 姓名* + + + setRegisterData({ ...registerData, name }) + } + /> + + + + 科系* + + + setRegisterData({ ...registerData, major }) + } + /> + + + + 年級* + + + setRegisterData({ ...registerData, grade }) + } + /> + + + + 學號* + + + setRegisterData({ ...registerData, studentID: id }) + } + /> + + + + 電話* + + + setRegisterData({ ...registerData, phone }) + } + /> + + + + Portal帳號* + + { + setEmail(text); + setRegisterData({ ...registerData, email: text }); + }} + /> + + + + 密碼* + + setPassword(text)} + type={showPwd ? "text" : "password"} + InputRightElement={ + setShowPwd(!showPwd)}> + + } + size={5} + mr="2" + color="muted.400" + /> + + } + /> + + + + 確認密碼* + + setConfirm(text)} + InputRightElement={ + setShowPwd2(!showPwd2)}> + + } + size={5} + mr="2" + color="muted.400" + /> + + } + /> + + {password && confirm && password !== confirm && ( + + 密碼不相符,請再次做確認 + + )} - { onClose() }} mr="40px" my="10px" alignSelf={'flex-end'} isExternal _text={{ - color: '#737373' - }}>已有帳號 - - - - - 新增頭貼 - - - { msg } - {(!email || !password || !confirm || (password !== confirm) || !avatar || !registerData.email || !registerData.grade || !registerData.name || !registerData.major || !registerData.phone || !registerData.studentID) - ? ( - - ) - : ( - - - - 完成 - + 已有帳號 + + + + + +
+ {avatar ? "更換頭貼" : "新增頭貼"} +
+
+ {msg} + {!email || + !password || + !confirm || + password !== confirm || + !avatar || + !registerData.email || + !registerData.grade || + !registerData.name || + !registerData.major || + !registerData.phone || + !registerData.studentID ? ( + + ) : ( + )} -
- -
+
+
-
- - ) + ); } diff --git a/screens/Auth/index.jsx b/screens/Auth/index.jsx index 9a64531..2872f00 100644 --- a/screens/Auth/index.jsx +++ b/screens/Auth/index.jsx @@ -24,4 +24,4 @@ export function AuthScreen () { ) -} +} \ No newline at end of file