From a40fb7e598feca4cae030b066fcf67b055aabb99 Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Thu, 16 Jul 2026 09:33:16 +0330 Subject: [PATCH] feat: toggle new-patient form on appointment create page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Show name/phone/national-code fields only after clicking 'مراجعه کننده جدید'; hide the existing-patient search while in new-patient mode, with a 'انتخاب از لیست موجود' link to switch back. Update tests to click the toggle before filling the fields. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../pages/AppointmentCreatePage.test.tsx | 6 + assets/admin/pages/AppointmentCreatePage.tsx | 105 +++++++++++------- 2 files changed, 68 insertions(+), 43 deletions(-) diff --git a/assets/admin/pages/AppointmentCreatePage.test.tsx b/assets/admin/pages/AppointmentCreatePage.test.tsx index e4e6d9a3..06ded61a 100644 --- a/assets/admin/pages/AppointmentCreatePage.test.tsx +++ b/assets/admin/pages/AppointmentCreatePage.test.tsx @@ -26,6 +26,7 @@ describe('AppointmentCreatePage — افزودن نوبت', () => { it('posts a new appointment with the entered patient (happy path)', async () => { renderWithProviders(, { route: '/admin/appointments/new' }); + fireEvent.click(screen.getByText('مراجعه کننده جدید')); fireEvent.change(screen.getByPlaceholderText('نام و نام خانوادگی مراجعه کننده'), { target: { value: 'علی محمدی' } }); fireEvent.change(screen.getByPlaceholderText('شماره تماس مراجعه کننده'), { target: { value: '09121234567' } }); fireEvent.change(screen.getByPlaceholderText('کد ملی مراجعه کننده'), { target: { value: '1234567891' } }); @@ -49,6 +50,7 @@ describe('AppointmentCreatePage — افزودن نوبت', () => { renderWithProviders(, { route: '/admin/appointments/new' }); + fireEvent.click(screen.getByText('مراجعه کننده جدید')); fireEvent.change(screen.getByPlaceholderText('نام و نام خانوادگی مراجعه کننده'), { target: { value: 'علی محمدی' } }); fireEvent.change(screen.getByPlaceholderText('شماره تماس مراجعه کننده'), { target: { value: '09121234567' } }); fireEvent.change(screen.getByPlaceholderText('کد ملی مراجعه کننده'), { target: { value: '1234567891' } }); @@ -70,6 +72,10 @@ describe('AppointmentCreatePage — افزودن نوبت', () => { const btn = screen.getByText('ثبت اطلاعات') as HTMLButtonElement; expect(btn).toBeDisabled(); + // فیلدهای مراجعه‌کنندهٔ جدید تا کلیک روی دکمه پنهان‌اند + expect(screen.queryByPlaceholderText('نام و نام خانوادگی مراجعه کننده')).toBeNull(); + fireEvent.click(screen.getByText('مراجعه کننده جدید')); + // شماره ناقص → همچنان غیرفعال fireEvent.change(screen.getByPlaceholderText('نام و نام خانوادگی مراجعه کننده'), { target: { value: 'ب' } }); fireEvent.change(screen.getByPlaceholderText('شماره تماس مراجعه کننده'), { target: { value: '0912' } }); diff --git a/assets/admin/pages/AppointmentCreatePage.tsx b/assets/admin/pages/AppointmentCreatePage.tsx index 775ab859..fd84cb45 100644 --- a/assets/admin/pages/AppointmentCreatePage.tsx +++ b/assets/admin/pages/AppointmentCreatePage.tsx @@ -55,6 +55,7 @@ export default function AppointmentCreatePage() { // ── بیمار: جستجوی رکورد موجود یا ورود شخص جدید const [patientSearch, setPatientSearch] = useState(''); const [picked, setPicked] = useState(null); + const [newPatient, setNewPatient] = useState(false); // فرم «مراجعه کننده جدید» فعال است؟ const [name, setName] = useState(''); const [mobile, setMobile] = useState(''); const [nationalCode, setNationalCode] = useState(''); @@ -172,53 +173,71 @@ export default function AppointmentCreatePage() { {/* مراجعه کننده */}
اطلاعات مراجعه کننده :
- -
-
- - { setPicked(null); setPatientSearch(e.target.value); }} - placeholder="جستجوی نام، شماره تماس، شماره پرونده..." /> -
- -
- {!picked && patients.length > 0 && ( -
- {patients.map(p => ( - - ))} -
+ + {!picked && patients.length > 0 && ( +
+ {patients.map(p => ( + + ))} +
+ )} + )} - {picked === null && ( -
-
- -
- setName(e.target.value)} placeholder="نام و نام خانوادگی مراجعه کننده" /> + + {/* حالت ثبت مراجعه‌کنندهٔ جدید */} + {newPatient && ( + <> +
+ مراجعه کننده جدید + +
+
+
+ +
+ setName(e.target.value)} placeholder="نام و نام خانوادگی مراجعه کننده" /> +
+
+
+ +
+ setMobile(e.target.value)} placeholder="شماره تماس مراجعه کننده" dir="ltr" /> +
+
+
+ +
+ setNationalCode(e.target.value.replace(/\D/g, '').slice(0, 10))} + placeholder="کد ملی مراجعه کننده" dir="ltr" inputMode="numeric" maxLength={10} /> +
-
- -
- setMobile(e.target.value)} placeholder="شماره تماس مراجعه کننده" dir="ltr" /> -
-
-
- -
- setNationalCode(e.target.value.replace(/\D/g, '').slice(0, 10))} - placeholder="کد ملی مراجعه کننده" dir="ltr" inputMode="numeric" maxLength={10} /> -
-
-
+ )} {/* مشخصات سرویس */}