import { useEffect, useState, } from 'react'; // material-ui import { Box, Button, FormControl, FormHelperText, Grid, IconButton, InputAdornment, InputLabel, OutlinedInput, Stack, Typography, FormGroup, TextField, Checkbox // MenuItem } from '@mui/material'; import { useForm, } from 'react-hook-form' import Autocomplete from "@mui/material/Autocomplete"; // third party import { useFormik, FormikProvider } from 'formik'; import * as yup from 'yup'; // import axios from "axios"; // project import // import AnimateButton from 'components/@extended/AnimateButton'; import { strengthColorChi, strengthIndicator } from 'utils/password-strength'; // import {apiPath} from "auth/utils"; import axios from "axios"; import { POST_PUBLIC_USER_REGISTER, POST_CAPTCHA, GET_USERNAME, GET_USER_EMAIL } from "utils/ApiPathConst"; // import * as HttpUtils from 'utils/HttpUtils'; import * as ComboData from "utils/ComboData"; import Loadable from 'components/Loadable'; import { lazy } from 'react'; const UploadFileTable = Loadable(lazy(() => import('./UploadFileTable'))); const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); const PreviewUploadFileTable = Loadable(lazy(() => import('./PreviewUploadFileTable'))); // import UploadFileTable from './UploadFileTable'; // import LoadingComponent from "../../extra-pages/LoadingComponent"; // assets import { EyeInvisibleOutlined, EyeOutlined } from '@ant-design/icons'; import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; import CancelOutlinedIcon from '@mui/icons-material/CancelOutlined'; import { Link } from 'react-router-dom'; import * as HttpUtils from "../../../utils/HttpUtils" import LoopIcon from '@mui/icons-material/Loop'; import { useTheme } from '@mui/material/styles'; import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; import {ThemeProvider} from "@emotion/react"; import {FormattedMessage} from "react-intl"; //import { Invaild } from 'utils/IconUtils'; // ============================|| FIREBASE - REGISTER ||============================ // const BusCustomFormWizard = (props) => { const theme = useTheme() const [level, setLevel] = useState(); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setshowConfirmPassword] = useState(false); const [fileList, setFileList] = useState([]); const [fileListData, setFileListData] = useState([]); const [checkUpload, setCheckUpload] = useState(false); const [isLoading, setLoding] = useState(true); const [updateRows, setUpdateRows] = useState([]); // const [userNameList, setUserNameList] = useState([]); const [captchaImg, setCaptchaImage] = useState(""); const handleClickShowPassword = () => { setShowPassword(!showPassword); }; const handleClickShowConfirmPassword = () => { setshowConfirmPassword(!showConfirmPassword); }; const handleMouseDownPassword = (event) => { event.preventDefault(); }; const changePassword = (value) => { const temp = strengthIndicator(value); setLevel(strengthColorChi(temp)); }; const [selectedAddress4, setSelectedAddress4] = useState(null); const [selectedAddress5, setSelectedAddress5] = useState(ComboData.country[0]); const [termsAndConAccept, setTermsAndConAccept] = useState(false); const [termsAndConNotAccept, setTermsAndConNotAccept] = useState(false); const [isValid, setisValid] = useState(false); const [checkCountry, setCheckCountry] = useState(false); const username = document.getElementById("username-login") const [checkUsername, setCheckUsername] = useState(false); const [checkUsernameBlur, setCheckUsernameBlur] = useState(false) const email = document.getElementById("email-login") const [checkEmail, setCheckEmail] = useState(false) const [checkEmailBlur, setCheckEmailBlur] = useState(false) const address4ComboList = ComboData.district; const address5ComboList = ComboData.country; const termsAndCon = "此網址由香港特別行政區政府物流服務署製作及管理。本署會盡力確保網址上的資料無誤,\n" + "但有絕對酌情權隨時刪除、暫停登載或編輯各項資料而無須給予任何理由。\n由於任何與網址" + "內資料有關的理由或原因,而導致出現申索、損失或損害,本署概不負責。\n使用者須自行評" + "估本網址所載或與本網址有關連的各項資料,並應在根據該等資料行事前,參照印行的香港" + "特別行政區憲報以核實該等資料,以及徵詢獨立意見。\n版權公告本網頁的內容,包括但不限" + "於所有文本、平面圖像、圖畫、圖片、照片以及數據或其他資料的匯編,均受版權保障。\n香" + "港特別行政區政府是本網頁內所有版權作品的擁有人,除非預先得到政府物流服務署的書面" + "授權,否則嚴禁複製、改編、分發、發布或向公眾提供該等版權作品。" const refType = "identification"; useEffect(() => { changePassword(''); }, []); const handleCheckUsername = async () => { if (values?.username) { const response = await axios.get(`${GET_USERNAME}`, { params: { username: values.username, } }) setCheckUsername((Number(response.data[0]) === 1)) return Number(response.data[0]) === 1 } } const handleCheckEmail = async () => { if (values?.email) { const response = await axios.get(`${GET_USER_EMAIL}`, { params: { email: values.email, } }) setCheckEmail((Number(response.data[0]) === 1)) return Number(response.data[0]) === 1 } } useEffect(() => { if (username) { username.addEventListener("blur", function () { setCheckUsernameBlur(true) }) } }, [username]) useEffect(() => { if (checkUsernameBlur) { handleCheckUsername() setCheckUsernameBlur(false) } }, [checkUsernameBlur]) useEffect(() => { if (email) { email.addEventListener("blur", function () { setCheckEmailBlur(true) }) } }, [email]) useEffect(() => { if (checkEmailBlur) { handleCheckEmail() setCheckEmailBlur(false) } }, [checkEmailBlur]) const onCaptchaChange = () => { HttpUtils.post({ url: POST_CAPTCHA, params: { width: 130, height: 40, captcha: captchaImg}, onSuccess: (responseData) => { props.setBase64Url(responseData.base64Url) localStorage.setItem("base64Url", responseData.base64Url); setCaptchaImage(localStorage.getItem('base64Url')); } }); } const checkDataField = (data) => { // console.log(data.brExpiryDate) if (data.username !== "" && data.password !== "" && data.confirmPassword !== "" && data.password == data.confirmPassword && // (data.enCompanyName !=="" || selectedAddress5 ==="內地")&& (data.chCompanyName !== "" || data.enCompanyName !== "") && data.enName !== "" && data.chName !== "" && data.address1 !== "" && data.email !== "" && data.emailConfirm !== "" && data.email == data.emailConfirm && data.phone !== "" && data.phoneCountryCode !== "" && termsAndConAccept == true && fileList.length !== 0 && data.captchaField && data.brNo !== "" && data.brExpiryDate !== "" && handlePassword(data.password) && handleEmail(data.email) && handlePhone(data.phone) && handleUserName(data.username) && handleCaptcha(data.captchaField) && handleBrNo(data.brNo) && !checkUsername ) { setisValid(true) return isValid } else { setisValid(false) return isValid } }; const handleCheckBoxChange = (event) => { console.log(event.target) if (event.target.name == 'termsAndConAccept') { setTermsAndConAccept(event.target.checked) setTermsAndConNotAccept(!event.target.checked) } if (event.target.name == 'termsAndConNotAccept') { setTermsAndConNotAccept(event.target.checked) setTermsAndConAccept(!event.target.checked) } }; useEffect(() => { let updateRowList = new DataTransfer(); var updateRowsIndex = updateRows.length; const saveFileList = []; if (updateRowsIndex != null) { for (let i = 0; i < updateRowsIndex; i++) { const file = updateRows[i] file.id = i; updateRowList.items.add(file); saveFileList.push(file); } let updatedFileList = updateRowList.files; setFileList(updatedFileList); setFileListData(saveFileList) } }, [updateRows]); const handleBrNo = (brNo) => { var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/ if (brNo !== undefined) { if (brNo.match(brNo_pattern)) { return true } else { return false } } } const handleFileUpload = (event) => { let updateList = new DataTransfer(); let currentFileList = fileListData; const uploadFileList = event.target.files; const saveFileList = []; var currentIndex = 0; if (currentFileList.length != null) { currentIndex = currentFileList.length; for (let i = 0; i < currentIndex; i++) { const file = currentFileList[i] // file.id = currentIndex; updateList.items.add(file); saveFileList.push(file); } } for (let i = 0; i < uploadFileList.length && currentIndex < 5; i++) { const file = event.target.files[i] let isDuplicate = false; // Check if the file name already exists in saveFileList for (let j = 0; j < saveFileList.length; j++) { if (saveFileList[j].name === file.name) { isDuplicate = true; break; } } if (!isDuplicate && i + currentIndex < 5) { file.id = currentIndex + i saveFileList.push(file) updateList.items.add(file); } console.log("currentIndex") console.log(currentIndex) } let updatedFileList = updateList.files; setFileListData(saveFileList) setFileList(updatedFileList); }; useEffect(() => { props.setUpdateValid(isValid) }, [isValid]) useEffect(() => { checkDataField(values) }, [selectedAddress4, selectedAddress5, termsAndConAccept, termsAndConNotAccept, fileList]) useEffect(() => { props.step == 2 ? _onSubmit() : null; if(captchaImg=="") onCaptchaChange(); checkDataField(values) }, [props.step]) const { handleSubmit } = useForm({}) const _onSubmit = () => { setLoding(true); values.address4 = selectedAddress4 values.address5 = selectedAddress5 // console.log(values) const busUserAddress = { "addressLine1": "", "addressLine2": "", "addressLine3": "", "district": "", "country": "" }; busUserAddress.addressLine1 = values.address1 busUserAddress.addressLine2 = values.address2 busUserAddress.addressLine3 = values.address3 busUserAddress.district = values.address4 busUserAddress.country = values.address5 const userFaxNo = { "countryCode": values.faxCountryCode, "faxNumber": values.fax, }; const busUserContactTel = { "countryCode": values.phoneCountryCode, "phoneNumber": values.phone, }; let tncFlag = false; if (termsAndConAccept) { tncFlag = true } if (termsAndConNotAccept) { tncFlag = false } const user = { username: values.username, password: values.password, name: values.username, enCompanyName: values.enCompanyName, chCompanyName: values.chCompanyName, emailBus: values.email, brNo: values.brNo, brExpiryDate: values.brExpiryDate, contactPerson: values.enName, tncFlag: tncFlag, type: "ORG" }; var formData = new FormData(); for (let i = 0; i < fileListData.length; i++) { const file = fileListData[i] formData.append("multipartFileList", file); } formData.append("refType", refType); for (const [key, value] of Object.entries(user)) { formData.append(key, value); } formData.append("userFaxNo", JSON.stringify(userFaxNo)); formData.append("busUserContactTel", JSON.stringify(busUserContactTel)); formData.append("busUserAddress", JSON.stringify(busUserAddress)); // formData.append("preferLocale", "en"); if (isValid) { axios.post(POST_PUBLIC_USER_REGISTER, formData, { headers: { "Content-Type": "multipart/form-data" } }) .then((response) => { console.log(response) setCheckUpload(true) setLoding(false); }) .catch(error => { console.error(error); setLoding(false); }); } else { setLoding(false); } } function handlePhone(phone) { if (phone.length < 8) { return false; } else { return true; } } function handleUserName(username) { var symbol = /^(?=.*[!@#%&])/; var space = /\s/; if (username.length < 6) { return false; } else if (username.match(symbol)) { return false; } else if (username.match(space)) { return false; } else { return true; } } function handleCaptcha(captchaField) { return captchaField; } function handlePassword(password) { let new_pass = password; // regular expressions to validate password var lowerCase = /[a-z]/g; var upperCase = /[A-Z]/g; var numbers = /[0-9]/g; var symbol = /^(?=.*[!@#%&])/; var space = /\s/; if (!new_pass.match(lowerCase)) { return false; } else if (!new_pass.match(upperCase)) { return false; } else if (!new_pass.match(numbers)) { return false; } else if (!new_pass.match(symbol)) { return false; } else if (new_pass.length < 8) { return false; } else if (new_pass.match(space)) { return false; } else { // console.log("password true") return true; } } function handleEmail(email) { var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; if (!email.match(validRegex)) { return false; } else { return true; } } function displayErrorMsg(errorMsg) { return {errorMsg} } const formik = useFormik({ initialValues: ({ username: '', enName: '', enCompanyName: '', chCompanyName: '', email: '', address1: '', address2: '', address3: '', password: '', confirmPassword: '', phone: '', phoneCountryCode: '852', submit: null, fax: '', faxCountryCode: '852', brExpiryDate: '', brNo: '', emailConfirm: '', captchaField: '' }), validationSchema: yup.object().shape({ username: yup.string().min(6, displayErrorMsg('用戶名稱最少6位')).required(displayErrorMsg('請輸入用戶名稱')) .matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg("用戶名稱不包含特殊字符") }) .matches(/^\S*$/, { message: displayErrorMsg('用戶名稱不包含空格') }), password: yup.string().min(8, displayErrorMsg('請輸入最少8位密碼')).required(displayErrorMsg('請輸入密碼')) .matches(/^\S*$/, { message: displayErrorMsg('密碼不包含空格') }) .matches(/^(?=.*[a-z])/, { message: displayErrorMsg('請包括最少1個小寫字母') }) .matches(/^(?=.*[A-Z])/, { message: displayErrorMsg('請包括最少1個大寫字母') }) .matches(/^(?=.*[0-9])/, { message: displayErrorMsg('請包括最少1個數字') }) .matches(/^(?=.*[!@#%&])/, { message: displayErrorMsg('請包括最少1個特殊字符') }), confirmPassword: yup.string().min(8, displayErrorMsg('請最少輸入8位密碼')).required(displayErrorMsg('請確認密碼')).oneOf([yup.ref('password'), null], displayErrorMsg('請輸入相同密碼')), enName: yup.string().max(255).required(displayErrorMsg('請輸入英文姓名')), enCompanyName: yup.string().matches(/^[^$^*()]+$/, { message: displayErrorMsg('No special characters $/^/*/(/)') }).when('chCompanyName', { is: (chCompanyName) => !chCompanyName || chCompanyName.length === 0, then: yup.string().required(displayErrorMsg('Please enter either English or Chinese name')), }), chCompanyName: yup.string().matches(/^[^$^*()]+$/, { message: displayErrorMsg('不包含特殊字符 $/^/*/(/)') }).when('enCompanyName', { is: (enCompanyName) => !enCompanyName || enCompanyName.length === 0, then: yup.string().required(displayErrorMsg('請輸入英文或中文名稱')), }), chName: yup.string().max(255).required(displayErrorMsg('請輸入中文姓名')), address1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), address2: yup.string().max(255).required(displayErrorMsg('請輸入第二行地址')), address3: yup.string().max(255).required(displayErrorMsg('請輸入第三行地址')), email: yup.string().email(displayErrorMsg('請輸入電郵格式')).max(255).required(displayErrorMsg('請輸入電郵')), emailConfirm: yup.string().email(displayErrorMsg('請輸入電郵格式')).max(255).required(displayErrorMsg('請輸入電郵')).oneOf([yup.ref('email'), null], displayErrorMsg('請輸入相同電郵')), phoneCountryCode: yup.string().min(2, displayErrorMsg('請輸入最少2位數字')).required(displayErrorMsg('請輸入國際區號')), faxCountryCode: yup.string().min(2, displayErrorMsg('請輸入最少2位數字')), phone: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')).required(displayErrorMsg('請輸入聯絡電話')), fax: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')), brExpiryDate: yup.date().min(new Date().toISOString().split("T")[0], displayErrorMsg('請輸入商業登記證有效日期')).max("2099-12-31", displayErrorMsg('請輸入商業登記證有效日期')).required(displayErrorMsg('請輸入商業登記證有效日期')), brNo: yup.string().max(8).required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(`請輸入有效商業登記證號碼 (e.g. 12341234)`), function (value) { // var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/ var brNo_pattern = /[0-9]{8}/ if (value !== undefined) { if (value.match(brNo_pattern)) { return true } else { return false } } }), captchaField: yup.string().required(displayErrorMsg('請輸入驗證')),//.oneOf([captcha], displayErrorMsg('請輸入有效驗證')) }, ['enCompanyName', 'chCompanyName']), }); const handleReset = (resetForm) => { resetForm(); setSelectedAddress4("") setSelectedAddress5(ComboData.country[0]) setCheckCountry(false) setFileList([]) setFileListData([]) onCaptchaChange() }; const { values } = formik useEffect(() => { checkDataField(values) }, [values]) return (
{/* Input Form */}
成為新的機構/公司用戶
註有*的項目必須輸入資料 你的登入資料 {/* Already have an account? */}
* {/* */} { setCheckUsername(false) props.setUsername(e.target.value) formik.handleChange(e) }} placeholder="用戶登入名稱" fullWidth error={Boolean((formik.touched.username && formik.errors.username) || checkUsername)} onBlur={formik.handleBlur} inputProps={{ onKeyDown: (e) => { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.username && formik.errors.username && ( {formik.errors.username} )} {checkUsername && ( 此用戶登入名稱已被注冊,請使用其他用戶登入名稱 )} 密碼 * { formik.handleChange(e); changePassword(e.target.value); }} endAdornment={ {showPassword ? : } } placeholder="密碼" onBlur={formik.handleBlur} inputProps={{ onKeyDown: (e) => { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.password && formik.errors.password && ( {formik.errors.password} )} {level?.label} 確認密碼 * { formik.handleChange(e); // changePassword(e.target.value); }} inputProps={{ onKeyDown: (e) => { if (e.key === 'Enter') { e.preventDefault(); } }, }} endAdornment={ {showConfirmPassword ? : } } placeholder="確認密碼" fullWidth error={Boolean(formik.touched.confirmPassword && formik.errors.confirmPassword)} /> {formik.touched.confirmPassword && formik.errors.confirmPassword && ( {formik.errors.confirmPassword} )} •至少8個字元,字元越多越好
•字母和數字的混合
•英文字母大寫與小寫的混合
•至少包含一個特殊符號,例如,@ # ?
你的機構/公司資料 {/* Already have an account? */} •請輸入機構/公司英文名稱或中文名稱
•Please enter the English/Chinese name of the organisation/company
機構/公司英文名稱 { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.enCompanyName && formik.errors.enCompanyName && selectedAddress5 !== "內地" && ( {formik.errors.enCompanyName} )} 機構/公司中文名稱 { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.chCompanyName && formik.errors.chCompanyName && ( {formik.errors.chCompanyName} )} 商業登記證號碼 (e.g. 12341234) * { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.brNo && formik.errors.brNo && ( {formik.errors.brNo} )} 商業登記證有效日期 * { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.brExpiryDate && formik.errors.brExpiryDate && ( {formik.errors.brExpiryDate} )} 地址 * { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> { setSelectedAddress4(newValue); }} sx={{ "& .MuiInputBase-root": { height: "41px" }, "#address4-combo": { padding: "0px 0px 0px 3px" }, "& .MuiAutocomplete-endAdornment": { top: "auto" }, }} renderInput={(params) => } /> { if (newValue !== null) { setSelectedAddress5(newValue); if (newValue === '香港') { setCheckCountry(false) } else { setSelectedAddress4(""); setCheckCountry(true) } } else { setSelectedAddress4(""); setCheckCountry(true) } }} sx={{ "& .MuiInputBase-root": { height: "41px" }, "#address5-combo": { padding: "0px 0px 0px 3px" }, "& .MuiAutocomplete-endAdornment": { top: "auto" }, }} renderInput={(params) => } /> {formik.touched.address1 && formik.errors.address1 && ( {formik.errors.address1} )} {formik.touched.address2 && formik.errors.address2 && ( {formik.errors.address2} )} {formik.touched.address3 && formik.errors.address3 && ( {formik.errors.address3} )} 你的聯絡資料 姓名 * { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.enName && formik.errors.enName && ( {formik.errors.enName} )} 電郵 * { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.email && formik.errors.email && ( {formik.errors.email} )} {checkEmail && ( 此電郵已被注冊,請使用其他電郵 )} 確認電郵 * { if (e.key === 'Enter') { e.preventDefault(); } }, }} /> {formik.touched.emailConfirm && formik.errors.emailConfirm && ( {formik.errors.emailConfirm} )} 聯絡電話 * { const value = event.target.value; if (value.match(/[^0-9]/)) { return event.preventDefault(); } formik.setFieldValue("phoneCountryCode", value); }} endAdornment={-} placeholder="國際區號" error={Boolean(formik.touched.phone && formik.errors.phone)} onBlur={formik.handleBlur} inputProps={{ maxLength: 3, onKeyDown: (e) => { if (e.key === 'Enter') { e.preventDefault(); } }, }} sx={{ width: '33%', mr:1 }} /> { const value = event.target.value; if (value.match(/[^0-9]/)) { return event.preventDefault(); } formik.setFieldValue("phone", value); }} placeholder="聯絡電話" error={Boolean(formik.touched.phone && formik.errors.phone)} inputProps={{ maxLength: 11, onKeyDown: (e) => { if (e.key === 'Enter') { e.preventDefault(); } }, }} sx={{ width: '66%' }} /> {formik.touched.phone && formik.errors.phone && ( {formik.errors.phone} )} 傳真號碼 { const value = event.target.value; if (value.match(/[^0-9]/)) { return event.preventDefault(); } formik.setFieldValue("faxCountryCode", value); }} placeholder="國際區號" endAdornment={-} inputProps={{ maxLength: 3, onKeyDown: (e) => { if (e.key === 'Enter') { e.preventDefault(); } }, }} sx={{ width: '33%', mr:1 }} /> { const value = event.target.value; if (value.match(/[^0-9]/)) { return event.preventDefault(); } formik.setFieldValue("fax", value); }} placeholder="傳真號碼" inputProps={{ maxLength: 8, onKeyDown: (e) => { if (e.key === 'Enter') { e.preventDefault(); } }, }} sx={{ width: '66%' }} /> 商業登記證及其他文件 * 請上傳你的 有效商業登記證及其他文件 的數碼檔案,以驗證你的身份。 {/* 如: 香港身份證; 護照; 中國內地身份證等 */} {/* */} {fileList != null ? : null} {/* */}
條款和條件 * {termsAndCon} 我接受 我不接受 驗證 * { onCaptchaChange() }}> { const value = event.target.value; props.setCheckCode(event.target.value); formik.setFieldValue("captchaField", value); }} sx={{ width: '75%' }} /> {formik.touched.captchaField && formik.errors.captchaField && ( {formik.errors.captchaField} )}
{/* Preview Form */}
成為新的機構/公司用戶
{/* 註有*的項目必須輸入資料 */} 你的登入資料 {/* Already have an account? */}
用戶登入名稱: {formik.values.username} 你的機構/公司資料 {/* Already have an account? */} 機構/公司英文名稱: {formik.values.enCompanyName} 機構/公司中文名稱: {formik.values.chCompanyName} 商業登記證 商業登記證號碼: {formik.values.brNo} 商業登記證有效日期: {formik.values.brExpiryDate} 地址: {formik.values.address1} {formik.values.address2 != null ? {formik.values.address2} : null} {formik.values.address3 != null ? {formik.values.address3} : null} {selectedAddress5 === "香港" ? 區域 (只適用於香港): {selectedAddress4} : null} 國家/地區: {selectedAddress5} 你的聯絡資料 英文名稱: {formik.values.enName} 電郵: {formik.values.email} 聯絡電話: +{formik.values.phoneCountryCode} {formik.values.phone} 傳真號碼: +{formik.values.faxCountryCode} {formik.values.fax} 身份證明文件 {fileList != null ? : null}
{/* Submit page */} {isLoading ? : {checkUpload ? // SUCCESS page 帳戶申請已成功提交。 驗證電郵將發送到你的電郵地址,請依指示完成驗證及登入系統。 : // ERROR page {/* */} 申請失敗,請稍後嘗試 } }
); } export default BusCustomFormWizard;