uberDriver.tsx 2.4 KB

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