uberDriver.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { View, Text, StyleSheet } from "react-native";
  2. import { SignUpFormData, HandleSignUpFormDataChange } from "../../../../types/signup";
  3. import NormalButton from "../../../global/normal_button";
  4. import { useState } from "react";
  5. import SingleSelectButtonGroup from "../../../global/select_button";
  6. type UberDriverProps = {
  7. goToNextPage: () => void;
  8. handleFormDataChange: HandleSignUpFormDataChange;
  9. formData: SignUpFormData;
  10. };
  11. const UberDriver: React.FC<UberDriverProps> = ({ formData, goToNextPage, handleFormDataChange }) => {
  12. const [error, setError] = useState("");
  13. const handleNext = () => {
  14. if (formData.isUberDriver == undefined) {
  15. setError("請確保所有資料都已填寫。");
  16. } else {
  17. setError("");
  18. goToNextPage();
  19. }
  20. };
  21. const handleSelectedChange = (selectedLabel: string) => {
  22. handleFormDataChange("isUberDriver", selectedLabel === "是(可享有獨家優惠)" ? true : false);
  23. setError("");
  24. };
  25. const selectLabelShown = () => {
  26. if (formData.isUberDriver == undefined) {
  27. return null;
  28. } else if (formData.isUberDriver == true) {
  29. return "是(可享有獨家優惠)";
  30. } else {
  31. return "否";
  32. }
  33. };
  34. const options = [{ label: "是(可享有獨家優惠)" }, { label: "否" }];
  35. return (
  36. <>
  37. <View style={styles.container}>
  38. <Text style={styles.text}>請問您是Uber Driver嗎?</Text>
  39. <SingleSelectButtonGroup
  40. options={options}
  41. onSelectionChange={handleSelectedChange}
  42. shouldShowRedOutline={error ? true : false}
  43. selectedOption={selectLabelShown()}
  44. />
  45. <NormalButton
  46. title={<Text style={{ color: "#fff" }}>下一步</Text>}
  47. onPress={handleNext}
  48. extendedStyle={{}}
  49. />
  50. {error && <Text style={styles.errorMessage}>{error}</Text>}
  51. </View>
  52. </>
  53. );
  54. };
  55. const styles = StyleSheet.create({
  56. container: {
  57. flex: 1,
  58. marginHorizontal: 20,
  59. },
  60. text: {
  61. fontSize: 20,
  62. paddingBottom: 10,
  63. },
  64. errorMessage: {
  65. fontSize: 14,
  66. color: "#ff0033",
  67. fontWeight: "400",
  68. marginLeft: 10,
  69. marginTop: 10,
  70. },
  71. });
  72. export default UberDriver;