66 lines
2.4 KiB
TypeScript
66 lines
2.4 KiB
TypeScript
import { useState } from 'react';
|
|
import { Alert } from 'react-native';
|
|
import { useNavigation } from '@react-navigation/native';
|
|
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
|
|
import RouteName from '../../../Constants/RouteName.constants';
|
|
import { RootStackParamList } from '../../../Constants/RouteParamsList.contants';
|
|
import api from '../../../api/api';
|
|
|
|
type RegisterNavProp = NativeStackNavigationProp<RootStackParamList>;
|
|
|
|
const useRegister = () => {
|
|
const navigation = useNavigation<RegisterNavProp>();
|
|
const [name, setName] = useState('');
|
|
const [email, setEmail] = useState('');
|
|
const [password, setPassword] = useState('');
|
|
const [confirmPassword, setConfirmPassword] = useState('');
|
|
const [showPassword, setShowPassword] = useState(false);
|
|
const [loading, setLoading] = useState(false);
|
|
|
|
const toggleShowPassword = () => setShowPassword(prev => !prev);
|
|
const goToLogin = () => navigation.navigate(RouteName.LoginNavigation);
|
|
|
|
const onRegister = async () => {
|
|
if (!name.trim()) return Alert.alert('Validasi', 'Nama wajib diisi');
|
|
if (!email.trim()) return Alert.alert('Validasi', 'Email wajib diisi');
|
|
if (!password.trim()) return Alert.alert('Validasi', 'Password wajib diisi');
|
|
if (password !== confirmPassword)
|
|
return Alert.alert('Validasi', 'Konfirmasi password tidak sama');
|
|
if (password.length < 6)
|
|
return Alert.alert('Validasi', 'Password minimal 6 karakter');
|
|
|
|
setLoading(true);
|
|
try {
|
|
const res = await api.post('/auth/register', {
|
|
nama: name,
|
|
email,
|
|
password,
|
|
konfirmasi_password: confirmPassword,
|
|
});
|
|
|
|
if (res.data.success) {
|
|
Alert.alert('Berhasil', 'Register sukses. Silakan login.', [
|
|
{ text: 'OK', onPress: () => navigation.navigate(RouteName.LoginNavigation) },
|
|
]);
|
|
} else {
|
|
Alert.alert('Gagal', res.data.message);
|
|
}
|
|
} catch (err: any) {
|
|
Alert.alert('Error', err.response?.data?.message || 'Gagal terhubung ke server');
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
return {
|
|
name, setName,
|
|
email, setEmail,
|
|
password, setPassword,
|
|
confirmPassword, setConfirmPassword,
|
|
showPassword, toggleShowPassword,
|
|
loading, onRegister, goToLogin,
|
|
};
|
|
};
|
|
|
|
export default useRegister;
|