From 7ce0b92f9206f77eb52bbef95bea1bcd6d7de3e9 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Tue, 8 Jul 2025 23:58:08 +0500 Subject: [PATCH] bug fixes --- src/screens/Auth/.VerificationScreen.js.swp | Bin 0 -> 16384 bytes src/screens/Auth/VerificationScreen.js | 4 +- .../Card/CreateCardBalanceOrderScreen.js | 12 +++++- .../Card/CreateCardTransactionOrderScreen.js | 20 ++++++++- .../Loan/CreateLoanRemainingOrderScreen.js | 38 ++++++++++++++++-- src/services/apiService.js | 8 ++-- src/services/authService.js | 38 ++++++++++++------ 7 files changed, 94 insertions(+), 26 deletions(-) create mode 100644 src/screens/Auth/.VerificationScreen.js.swp diff --git a/src/screens/Auth/.VerificationScreen.js.swp b/src/screens/Auth/.VerificationScreen.js.swp new file mode 100644 index 0000000000000000000000000000000000000000..0a8a16f433bc1fb98c5a6af93090345000f7daa5 GIT binary patch literal 16384 zcmeI2ON<;x8OIw3FeDhTk-`B%Do&)C#XU2-PGrfkH}dWf;|*)?vTGb9V@OSR%}#rJ zx`yiNot+E=LJlH9@+C-!AS{A}I1tE%2!Vpg!SNvyTo4=(0*RLh5(p{c%Hv`qk8=~dymppGi=1!PRt2x8Jfi8u{?oe)Y(zX}jg$)7kgXQYHXA%klZ-WT z5jFBiFqY+wg+g{37nn%eNknDBvvr+Nzno9X_GexJufS_5a3Hwv=$szv_Z+^Pyz9_M zUMqu7_X>CgyaHYUuYgy;E8rFI3U~$nj}(x-+k(%)pMBP+EB5;hJHG#EkE{0j<2%y- zVbkAauOGApxN_`e|K%0%3U~#)0$u^HfLFjP;1%!+cm=!yUIDMb|3Cp62f_PM@0xl5 zfdBuy`~R2l|Nj@jcfqsZ8n_A`2R(2eoB_u{4crO-^!6Zl4s3&m!TZ2p4g|rU!3*Gv zfPxVG^ld@#9q?`NWv~qv!Cl}WxC7h{{&q(Y{06)To&sM0SHJ*lgB36j?gD?mJqZ2) zo(Io@Z-Fb|1o+)sgW#9oCGaBn5x53E4>FK|2f%y4KJfduzy@3ep9NhIfrr5tGIq;0QPXeu3Ek9Q+Kt z46cDsfdZ(0@nP`qA4DG~FC?r_aydxZ{7`@8^$w#k6Qc(MV`9Hfu1hM5e31%kemJIL z^Dt=`yOZm*%@zcsdlVS)Oj5ipV#*Xu79u0n00ob9;r2>ar0EILXpl#eG$k3`N;aru zg!buxBpE4k_E5XcB8fann^f=au`Euqjq)2OGi0cXJy9r&M7 zG>KSsHY7)9M!T;c4axm8quMU}`$KYUuj{z@sHsm^3TJakTwP?|oYo~r&1h|P#@HGU zREuVa^}kY4NhW`ri!PO`D*as1Z83p@s=Ck_GXJ3UG9(wHlu@y|TZqu~U1 zGur2p3fbgECS%^uoHGk46S7X#XSH(utGT@XL%id(SqVwy{Pk}B#jfN8hky?1$^p<li^yY7?(*K@^$~vWV;!!u5!0*RRp^#uI}ZUrPtd zd9$B6%#i@x)Z^WqU*$oNM&N85JozGtEv?r_(WAsR?Kau@zf1g*tXn zt+94JDuiH}EY)d3zo*f7vQgFMOg3EyuS!v{QW+{Jy3r@+$(-vqCX1`QstxS0SLN+h zBVpl@vo9_<)UaDzs_=$ z{HrOIYJsY+tdsfqc~U_G1yAD2ctF6PNtdw>sW|H89nDlekeIb8rWQ;V9ZVlwSS5&^ zI^0s?3Njj(d@Bizc->;=Cu;9-nny)$HV{?Rq$XgkD_Jm&N3BLly*iOrAtlfBW&$A_ zFQKk6ZqoUW27uCTude8N@l@o8T8`;1rIspv*;Q|HxJH$hV!?VT#U^KZUDs|esb!bg z&6Al|?fbf+TbtGTld27Yu1q!iW}7W7tyQ(u+fA&>z9Lu%0;Ywk+UDtQX^e(;YR7&c zU*=Tp=t9@J^42aiQ_UWG9WpY7t7WFVGq^ZjB*UrEe94%vV?WEPlaXzjb8*~glgW+r zsZ3L&9ywxWjbk=tS5b4hDYxv3c`sUZ-=W+6sFic%HY!QC$Au(A(p*_ySzCvHZNa;w zQm;4gr^}<6%yE`-kz?0rGc0AjLhi6dQ5gnX-q48?+eO{KZ)R*#C)Pt1Jf-jMwy0Iz zy!+iWOZ<*prExdTd~epWQP~>G-Gi~?M=&RD?J(|a-gp1O@%rs z-|Xn$>IQ1P!raLv?1xkUqsA87rkdgQx2L|4H1t z{{X1_f818; { }; 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" + /> + + +