uberDriver.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { View, Text, StyleSheet } from "react-native";
  2. import { FormData, HandleFormDataChange } from "../../../type";
  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: HandleFormDataChange;
  9. formData: FormData;
  10. };
  11. const UberDriver: React.FC<UberDriverProps> = ({ formData, goToNextPage, handleFormDataChange }) => {
  12. const [error, setError] = useState("");
  13. const [selectedOption, setSelectedOption] = useState("");
  14. const handleNext = () => {
  15. if (formData.isUberDriver == undefined) {
  16. setError("請確保所有資料都已填寫。");
  17. } else {
  18. setError("");
  19. goToNextPage();
  20. }
  21. };
  22. const handleSelectedChange = (selectedLabel: string) => {
  23. setSelectedOption(selectedLabel);
  24. handleFormDataChange("isUberDriver", selectedLabel === "是(可享有獨家優惠)" ? true : false);
  25. setError("");
  26. };
  27. const selectLabelShown = () => {
  28. if (formData.isUberDriver == undefined) {
  29. return null;
  30. } else if (formData.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. shouldShowRedOutline={error ? true : false}
  45. selectedOption={selectLabelShown()}
  46. />
  47. <NormalButton
  48. title={<Text style={{ color: "#fff" }}>下一步</Text>}
  49. onPress={handleNext}
  50. extendedStyle={{}}
  51. />
  52. {error && <Text style={styles.errorMessage}>{error}</Text>}
  53. </View>
  54. </>
  55. );
  56. };
  57. const styles = StyleSheet.create({
  58. container: {
  59. flex: 1,
  60. marginHorizontal: 20,
  61. },
  62. text: {
  63. fontSize: 20,
  64. paddingBottom: 10,
  65. },
  66. errorMessage: {
  67. fontSize: 14,
  68. color: "#ff0033",
  69. fontWeight: "400",
  70. marginLeft: 10,
  71. marginTop: 10,
  72. },
  73. });
  74. export default UberDriver;