import React, { useState } from 'react'; import { View, Text, TouchableOpacity } from 'react-native'; import { useForm, Controller } from 'react-hook-form'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; import DateTimePicker from '@react-native-community/datetimepicker'; import { Picker } from '@react-native-picker/picker'; const accountFormSchema = z.object({ name: z .string() .min(2, { message: "Name must be at least 2 characters.", }) .max(30, { message: "Name must not be longer than 30 characters.", }), dob: z.date({ required_error: "A date of birth is required.", }), language: z.string({ required_error: "Please select a language.", }), }); type AccountFormValues = z.infer; const defaultValues: Partial = { name: "Your name", dob: new Date("2000-01-01"), language: "en", }; const languages = [ { label: "English", value: "en" }, { label: "French", value: "fr" }, { label: "German", value: "de" }, { label: "Spanish", value: "es" }, { label: "Portuguese", value: "pt" }, { label: "Russian", value: "ru" }, { label: "Japanese", value: "ja" }, { label: "Korean", value: "ko" }, { label: "Chinese", value: "zh" }, ]; export function AccountForm() { const [showDatePicker, setShowDatePicker] = useState(false); const { control, handleSubmit } = useForm({ resolver: zodResolver(accountFormSchema), defaultValues, }); const onSubmit = (data: AccountFormValues) => { console.log(JSON.stringify(data, null, 2)); }; return ( ( Name This is the name that will be displayed on your profile and in emails. )} /> ( Date of birth setShowDatePicker(true)} > {value.toDateString()} {showDatePicker && ( { setShowDatePicker(false); if (selectedDate) { onChange(selectedDate); } }} /> )} Your date of birth is used to calculate your age. )} /> ( Language {languages.map((language) => ( ))} This is the language that will be used in the dashboard. )} /> Update account ); }