diff --git a/src/screens/Auth/.VerificationScreen.js.swp b/src/screens/Auth/.VerificationScreen.js.swp new file mode 100644 index 0000000..0a8a16f Binary files /dev/null and b/src/screens/Auth/.VerificationScreen.js.swp differ diff --git a/src/screens/Auth/VerificationScreen.js b/src/screens/Auth/VerificationScreen.js index f6d7c97..645f3d2 100644 --- a/src/screens/Auth/VerificationScreen.js +++ b/src/screens/Auth/VerificationScreen.js @@ -49,8 +49,8 @@ const VerificationScreen = ({ navigation }) => { }; if (Platform.OS === 'android') { - BackHandler.addEventListener('hardwareBackPress', onBackPress); - return () => BackHandler.removeEventListener('hardwareBackPress', onBackPress); + const sub = BackHandler.addEventListener('hardwareBackPress', onBackPress); + return () => sub.remove(); } }, [handleGoBack]) ); diff --git a/src/screens/Card/CreateCardBalanceOrderScreen.js b/src/screens/Card/CreateCardBalanceOrderScreen.js index 3c78095..9925c6e 100644 --- a/src/screens/Card/CreateCardBalanceOrderScreen.js +++ b/src/screens/Card/CreateCardBalanceOrderScreen.js @@ -20,6 +20,12 @@ const yearOptions = Array.from({ length: 60 }).map((_, i) => { const PASSPORT_SERIES = ['I-AS','I-MR','II-MR','I-AH','II-AH','I-LB','II-LB','I-BN','II-BN','I-DZ','II-DZ']; +// Helper to format card number with spaces +const formatCardNumber = (value) => { + const digits = String(value).replace(/[^0-9]/g, '').slice(0, 16); + return (digits.match(/.{1,4}/g) || []).join(' '); +}; + const CreateCardBalanceOrderScreen = () => { const navigation = useNavigation(); const [cardNumber, setCardNumber] = useState(''); @@ -42,7 +48,11 @@ const CreateCardBalanceOrderScreen = () => { useEffect(() => { if (user) { if (user.passport_serie) setPassportSerie(user.passport_serie); - if (user.passport_id) setPassportId(String(user.passport_id)); + if (user.passport_id) setPassportId(String(user.passport_id));e + + if (user.card_number) setCardNumber(formatCardNumber(user.card_number)); + if (user.card_month) setCardMonth(String(user.card_month).padStart(2, '0')); + if (user.card_year) setCardYear(String(user.card_year)); } }, [user]); diff --git a/src/screens/Card/CreateCardTransactionOrderScreen.js b/src/screens/Card/CreateCardTransactionOrderScreen.js index 5a437d9..fbd33fa 100644 --- a/src/screens/Card/CreateCardTransactionOrderScreen.js +++ b/src/screens/Card/CreateCardTransactionOrderScreen.js @@ -21,6 +21,12 @@ const yearOptions = Array.from({ length: 60 }).map((_, i) => { const PASSPORT_SERIES = ['I-AS','I-MR','II-MR','I-AH','II-AH','I-LB','II-LB','I-BN','II-BN','I-DZ','II-DZ']; +// Helper to format card number 9999 9999 9999 9999 +const formatCardNumber = (value) => { + const digits = value.replace(/[^0-9]/g, '').slice(0, 16); + return (digits.match(/.{1,4}/g) || []).join(' '); +}; + const CreateCardTransactionOrderScreen = () => { const navigation = useNavigation(); const [cardNumber, setCardNumber] = useState(''); @@ -35,16 +41,25 @@ const CreateCardTransactionOrderScreen = () => { if (user) { if (user.passport_serie) setPassportSerie(user.passport_serie); if (user.passport_id) setPassportId(String(user.passport_id)); + + if (user.card_number) setCardNumber(formatCardNumber(String(user.card_number))); + if (user.card_month) setCardMonth(String(user.card_month).padStart(2,'0')); + if (user.card_year) setCardYear(String(user.card_year)); } }, [user]); + const handleCardNumberChange = (val) => { + setCardNumber(formatCardNumber(val)); + }; + const handleSubmit = async () => { if (!cardNumber.trim() || !cardMonth || !cardYear || !passportSerie || !passportId.trim()) { Alert.alert('Error', 'All fields are required'); return; } setLoading(true); - const res = await apiService.createCardTransactionOrder(cardNumber.trim(), cardMonth, cardYear, passportSerie, passportId.trim()); + const rawCard = cardNumber.replace(/\s+/g, '').trim(); + const res = await apiService.createCardTransactionOrder(rawCard, cardMonth, cardYear, passportSerie, passportId.trim()); setLoading(false); if (res.success) { Alert.alert('Success', res.message || 'Order created successfully', [ @@ -85,10 +100,11 @@ const CreateCardTransactionOrderScreen = () => { label="*Kart belgisi" placeholder="9934..." value={cardNumber} - onChangeText={setCardNumber} + onChangeText={handleCardNumberChange} keyboardType="numeric" autoCapitalize="none" autoCorrect={false} + maxLength={19} /> { const navigation = useNavigation(); const [accountNumber, setAccountNumber] = useState(''); + const [passportSerie, setPassportSerie] = useState(''); + const [passportId, setPassportId] = useState(''); const [loading, setLoading] = useState(false); + const { user } = useAuth(); + + useEffect(() => { + if (user) { + if (user.passport_serie) setPassportSerie(user.passport_serie); + if (user.passport_id) setPassportId(String(user.passport_id)); + } + }, [user]); + + const PASSPORT_SERIES = ['I-AS','I-MR','II-MR','I-AH','II-AH','I-LB','II-LB','I-BN','II-BN','I-DZ','II-DZ']; const handleSubmit = async () => { - if (accountNumber.trim().length === 0) { - Alert.alert('Error', 'Account number is required'); + if (accountNumber.trim().length === 0 || !passportSerie || passportId.trim().length === 0) { + Alert.alert('Error', 'All fields are required'); return; } setLoading(true); - const res = await apiService.createLoanRemainingOrder(accountNumber.trim()); + const res = await apiService.createLoanRemainingOrder(accountNumber.trim(), passportSerie, passportId.trim()); setLoading(false); if (res.success) { Alert.alert('Success', res.message || 'Order created successfully', [ @@ -40,6 +54,22 @@ const CreateLoanRemainingOrderScreen = () => { Täze sargyt + ({ label: v, value: v }))} + placeholder="Saýla" + /> + + +