profile card added

This commit is contained in:
2025-07-08 16:24:45 +05:00
parent a520a9065f
commit 7f49211680
2 changed files with 109 additions and 1 deletions

6
.cursor/rules/base.mdc Normal file
View File

@@ -0,0 +1,6 @@
---
description:
globs:
alwaysApply: true
---
All card_number should be formatted like 9999 9999 9999 999

View File

@@ -37,6 +37,10 @@ const EditProfileModal = ({
password: '', password: '',
passport_serie: initialData.passport_serie || '', passport_serie: initialData.passport_serie || '',
passport_id: initialData.passport_id ? initialData.passport_id.toString() : '', passport_id: initialData.passport_id ? initialData.passport_id.toString() : '',
card_name: initialData.card_name || '',
card_year: initialData.card_year ? initialData.card_year.toString() : '',
card_month: initialData.card_month ? initialData.card_month.toString() : '',
card_number: initialData.card_number ? initialData.card_number.toString() : '',
}); });
const [errors, setErrors] = useState({}); const [errors, setErrors] = useState({});
@@ -45,6 +49,10 @@ const EditProfileModal = ({
const phoneInputRef = useRef(null); const phoneInputRef = useRef(null);
const passwordInputRef = useRef(null); const passwordInputRef = useRef(null);
const passportIdInputRef = useRef(null); const passportIdInputRef = useRef(null);
const cardNameInputRef = useRef(null);
const cardNumberInputRef = useRef(null);
const cardMonthInputRef = useRef(null);
const cardYearInputRef = useRef(null);
const validateForm = () => { const validateForm = () => {
const newErrors = {}; const newErrors = {};
@@ -72,7 +80,30 @@ const EditProfileModal = ({
// Passport ID validation (optional, but if provided should be number) // Passport ID validation (optional, but if provided should be number)
if (formData.passport_id && !/^\d+$/.test(formData.passport_id.trim())) { if (formData.passport_id && !/^\d+$/.test(formData.passport_id.trim())) {
newErrors.passport_id = 'Passport ID diňe sanlardan durmalı'; newErrors.passport_id = 'Passport ID diňe sanlardan durmaly';
}
// Card name validation (optional, max 255)
if (formData.card_name && formData.card_name.length > 255) {
newErrors.card_name = 'Kartyň ady 255 harpdan köp bolmaly däl';
}
// Card number validation (optional, must be 16 digits)
if (formData.card_number && !/^\d{16}$/.test(formData.card_number.trim())) {
newErrors.card_number = 'Kart belgisi 16 sany sandan durmaly';
}
// Card month validation (optional, 1-12)
if (formData.card_month) {
const month = parseInt(formData.card_month.trim(), 10);
if (!/^\d{1,2}$/.test(formData.card_month.trim()) || month < 1 || month > 12) {
newErrors.card_month = 'Aý 01-den 12-e çenli bolmaly';
}
}
// Card year validation (optional, 4 digits and reasonable year)
if (formData.card_year && !/^\d{4}$/.test(formData.card_year.trim())) {
newErrors.card_year = 'Ýyl 4 sany sandan durmaly';
} }
setErrors(newErrors); setErrors(newErrors);
@@ -103,6 +134,22 @@ const EditProfileModal = ({
updateData.passport_id = formData.passport_id.trim(); updateData.passport_id = formData.passport_id.trim();
} }
if (formData.card_name) {
updateData.card_name = formData.card_name.trim();
}
if (formData.card_month) {
updateData.card_month = parseInt(formData.card_month.trim());
}
if (formData.card_year) {
updateData.card_year = parseInt(formData.card_year.trim());
}
if (formData.card_number) {
updateData.card_number = formData.card_number.trim();
}
onSave(updateData); onSave(updateData);
}; };
@@ -114,6 +161,10 @@ const EditProfileModal = ({
password: '', password: '',
passport_serie: initialData.passport_serie || '', passport_serie: initialData.passport_serie || '',
passport_id: initialData.passport_id ? initialData.passport_id.toString() : '', passport_id: initialData.passport_id ? initialData.passport_id.toString() : '',
card_name: initialData.card_name || '',
card_year: initialData.card_year ? initialData.card_year.toString() : '',
card_month: initialData.card_month ? initialData.card_month.toString() : '',
card_number: initialData.card_number ? initialData.card_number.toString() : '',
}); });
setErrors({}); setErrors({});
onClose(); onClose();
@@ -282,6 +333,57 @@ const EditProfileModal = ({
onChangeText={(value) => updateFormData('passport_id', value)} onChangeText={(value) => updateFormData('passport_id', value)}
error={errors.passport_id} error={errors.passport_id}
keyboardType="numeric" keyboardType="numeric"
returnKeyType="next"
onSubmitEditing={() => cardNameInputRef.current?.focus()}
/>
</View>
<View style={styles.formSection}>
<Text style={styles.sectionTitle}>Kart maglumatlary</Text>
<Input
ref={cardNameInputRef}
label="Kartdaky ady"
value={formData.card_name}
onChangeText={(value) => updateFormData('card_name', value)}
error={errors.card_name}
maxLength={255}
returnKeyType="next"
onSubmitEditing={() => cardNumberInputRef.current?.focus()}
/>
<Input
ref={cardNumberInputRef}
label="Kart belgisi"
value={formData.card_number}
onChangeText={(value) => updateFormData('card_number', value)}
error={errors.card_number}
keyboardType="numeric"
maxLength={16}
returnKeyType="next"
onSubmitEditing={() => cardMonthInputRef.current?.focus()}
/>
<Input
ref={cardMonthInputRef}
label="Kart aýy (MM)"
value={formData.card_month}
onChangeText={(value) => updateFormData('card_month', value)}
error={errors.card_month}
keyboardType="numeric"
maxLength={2}
returnKeyType="next"
onSubmitEditing={() => cardYearInputRef.current?.focus()}
/>
<Input
ref={cardYearInputRef}
label="Kartyň senesi (YYYY)"
value={formData.card_year}
onChangeText={(value) => updateFormData('card_year', value)}
error={errors.card_year}
keyboardType="numeric"
maxLength={4}
returnKeyType="done" returnKeyType="done"
/> />
</View> </View>