Backend:
- Add profile columns field_of_study, province_id, city_id, postal_code,
referral_source (UserProfile + migration).
- Extend PATCH /api/v1/patient/{uuid} to persist all demographic fields
and return them in the patient profile payload.
- Support editable mobile (login identifier): validation, uniqueness,
User.setMobileNumber, new ERR_PROFILE_002.
- Update docs/api/patient.md.
Frontend:
- New reusable Input, Field, and PatientRecordInfoForm (RHF + Zod).
- usePatient/useUpdatePatient hooks and patientForm mapping helpers.
- Extend the existing "info" tab in MyPatientsPage to the full field set
via the shared form (province/city/insurance options, Jalali date).
Tests: Patient entity + PATCH integration (PHPUnit); form, hooks, and
mapping helpers (Vitest).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
24 lines
622 B
TypeScript
24 lines
622 B
TypeScript
import React from 'react';
|
|
|
|
type Props = React.InputHTMLAttributes<HTMLInputElement> & {
|
|
hasError?: boolean;
|
|
};
|
|
|
|
/**
|
|
* Input متنی پایهٔ design system: کلاس `cp-input`، حالت خطا (قاب قرمز)،
|
|
* و forwardRef برای سازگاری با react-hook-form `register`.
|
|
*/
|
|
export default React.forwardRef<HTMLInputElement, Props>(function Input(
|
|
{ hasError, className, style, ...rest },
|
|
ref,
|
|
) {
|
|
return (
|
|
<input
|
|
{...rest}
|
|
ref={ref}
|
|
className={className ?? 'cp-input'}
|
|
style={hasError ? { borderColor: 'var(--danger)', ...(style || {}) } : style}
|
|
/>
|
|
);
|
|
});
|