profile card added
This commit is contained in:
6
.cursor/rules/base.mdc
Normal file
6
.cursor/rules/base.mdc
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
description:
|
||||||
|
globs:
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
All card_number should be formatted like 9999 9999 9999 999
|
||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user