diff --git a/.cursor/rules/base.mdc b/.cursor/rules/base.mdc new file mode 100644 index 0000000..0e6a99d --- /dev/null +++ b/.cursor/rules/base.mdc @@ -0,0 +1,6 @@ +--- +description: +globs: +alwaysApply: true +--- +All card_number should be formatted like 9999 9999 9999 999 \ No newline at end of file diff --git a/src/components/EditProfileModal.js b/src/components/EditProfileModal.js index 113fe4c..147ec8e 100644 --- a/src/components/EditProfileModal.js +++ b/src/components/EditProfileModal.js @@ -37,6 +37,10 @@ const EditProfileModal = ({ password: '', passport_serie: initialData.passport_serie || '', 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({}); @@ -45,6 +49,10 @@ const EditProfileModal = ({ const phoneInputRef = useRef(null); const passwordInputRef = 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 newErrors = {}; @@ -72,7 +80,30 @@ const EditProfileModal = ({ // Passport ID validation (optional, but if provided should be number) 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); @@ -103,6 +134,22 @@ const EditProfileModal = ({ 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); }; @@ -114,6 +161,10 @@ const EditProfileModal = ({ password: '', passport_serie: initialData.passport_serie || '', 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({}); onClose(); @@ -282,6 +333,57 @@ const EditProfileModal = ({ onChangeText={(value) => updateFormData('passport_id', value)} error={errors.passport_id} keyboardType="numeric" + returnKeyType="next" + onSubmitEditing={() => cardNameInputRef.current?.focus()} + /> + + + + Kart maglumatlary + + updateFormData('card_name', value)} + error={errors.card_name} + maxLength={255} + returnKeyType="next" + onSubmitEditing={() => cardNumberInputRef.current?.focus()} + /> + + updateFormData('card_number', value)} + error={errors.card_number} + keyboardType="numeric" + maxLength={16} + returnKeyType="next" + onSubmitEditing={() => cardMonthInputRef.current?.focus()} + /> + + updateFormData('card_month', value)} + error={errors.card_month} + keyboardType="numeric" + maxLength={2} + returnKeyType="next" + onSubmitEditing={() => cardYearInputRef.current?.focus()} + /> + + updateFormData('card_year', value)} + error={errors.card_year} + keyboardType="numeric" + maxLength={4} returnKeyType="done" />