import { FC, useCallback, useState } from "react" import { TextStyle, View, ViewStyle } from "react-native" import { KeyboardAwareScrollView } from "react-native-keyboard-controller" import { Button } from "@/components/Button" import { Dialog } from "@/components/Dialog" import { PressableIcon } from "@/components/Icon" import { Screen } from "@/components/Screen" import { Text } from "@/components/Text" import { TextField } from "@/components/TextField" import { Switch } from "@/components/Toggle/Switch" import { useAuth } from "@/context/AuthContext" import { translate } from "@/i18n/translate" import { AppStackScreenProps } from "@/navigators/navigationTypes" import { useAppTheme } from "@/theme/context" import { $styles } from "@/theme/styles" import type { ThemedStyle } from "@/theme/types" import { s } from "@/utils/responsive" import { useHeader } from "@/utils/useHeader" export const ChangePasswordScreen: FC> = function ChangePasswordScreen({ navigation }) { const { changePassword, isLoading, error, clearError } = useAuth() const { themed, theme: { colors }, } = useAppTheme() const [oldPassword, setOldPassword] = useState("") const [newPassword, setNewPassword] = useState("") const [confirmPassword, setConfirmPassword] = useState("") const [logoutOtherDevices, setLogoutOtherDevices] = useState(false) const [isOldPasswordHidden, setIsOldPasswordHidden] = useState(true) const [isNewPasswordHidden, setIsNewPasswordHidden] = useState(true) const [isConfirmPasswordHidden, setIsConfirmPasswordHidden] = useState(true) const [localError, setLocalError] = useState("") const [successDialogVisible, setSuccessDialogVisible] = useState(false) const handleChangePassword = useCallback(async () => { clearError() setLocalError("") // Validate if (!oldPassword) { setLocalError(translate("changePasswordScreen:oldPasswordRequired")) return } if (!newPassword) { setLocalError(translate("changePasswordScreen:newPasswordRequired")) return } if (newPassword.length < 6) { setLocalError(translate("changePasswordScreen:passwordTooShort")) return } if (newPassword !== confirmPassword) { setLocalError(translate("changePasswordScreen:passwordMismatch")) return } if (oldPassword === newPassword) { setLocalError(translate("changePasswordScreen:samePassword")) return } const success = await changePassword(oldPassword, newPassword, logoutOtherDevices) if (success) { setSuccessDialogVisible(true) } }, [oldPassword, newPassword, confirmPassword, logoutOtherDevices, changePassword, clearError]) const displayError = localError || error useHeader( { title: translate("changePasswordScreen:title"), leftIcon: "back", onLeftPress: () => navigation.goBack(), }, [], ) return ( ( setIsOldPasswordHidden(!isOldPasswordHidden)} /> )} /> ( setIsNewPasswordHidden(!isNewPasswordHidden)} /> )} /> ( setIsConfirmPasswordHidden(!isConfirmPasswordHidden)} /> )} /> {displayError ? ( {displayError} ) : null} {/* Fixed Bottom Button */}