feat(admin): move work schedule from profile to appointment settings
Export ScheduleSection from DoctorDetailPage and render the full weekly/overrides/holidays editor in AppointmentSettingsPage. Gate the profile's schedule render on !isOwnProfile so it no longer appears in the doctor's own profile while the admin doctor-detail view keeps it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,30 +1,18 @@
|
|||||||
import { useQuery } from '@tanstack/react-query';
|
|
||||||
import { api } from '../lib/api';
|
|
||||||
import type { ApiResponse } from '../lib/api';
|
|
||||||
import { useAuthStore } from '../stores/authStore';
|
import { useAuthStore } from '../stores/authStore';
|
||||||
import SettingsLayout from '../components/layout/SettingsLayout';
|
import SettingsLayout from '../components/layout/SettingsLayout';
|
||||||
import FreeVisitPrice from '../components/FreeVisitPrice';
|
import FreeVisitPrice from '../components/FreeVisitPrice';
|
||||||
import { WeeklyScheduleTab, type AddressData } from './DoctorDetailPage';
|
import { ScheduleSection } from './DoctorDetailPage';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* مدیریت نوبت دهی — the doctor's weekly booking schedule as a standalone
|
* مدیریت نوبت دهی — the doctor's appointment settings: visit price and the full
|
||||||
* settings section. Reuses the WeeklyScheduleTab editor (also shown in the
|
* weekly/overrides/holidays schedule (moved here from the doctor profile). The
|
||||||
* doctor profile) with the current doctor's uuid and addresses.
|
* schedule is now managed exclusively from this page.
|
||||||
*/
|
*/
|
||||||
export default function AppointmentSettingsPage() {
|
export default function AppointmentSettingsPage() {
|
||||||
const doctorUuid = useAuthStore((s) => s.doctorUuid);
|
const doctorUuid = useAuthStore((s) => s.doctorUuid);
|
||||||
const dbUuid = useAuthStore((s) => s.dbUuid);
|
const dbUuid = useAuthStore((s) => s.dbUuid);
|
||||||
const uuid = doctorUuid ?? dbUuid ?? undefined;
|
const uuid = doctorUuid ?? dbUuid ?? undefined;
|
||||||
|
|
||||||
const { data, isLoading } = useQuery({
|
|
||||||
queryKey: ['doctor-detail', uuid, 'appointment-settings'],
|
|
||||||
queryFn: () => api.get<ApiResponse<any>>(`/api/v1/doctor/${uuid}`),
|
|
||||||
enabled: !!uuid,
|
|
||||||
});
|
|
||||||
|
|
||||||
const doctor = (data?.data as any)?.data ?? data?.data;
|
|
||||||
const addresses: AddressData[] = doctor?.address ?? [];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SettingsLayout active="appointment">
|
<SettingsLayout active="appointment">
|
||||||
<div
|
<div
|
||||||
@@ -39,10 +27,8 @@ export default function AppointmentSettingsPage() {
|
|||||||
<div className="card" style={{ padding: 32, textAlign: 'center', color: 'var(--text-3)', fontSize: 14 }}>
|
<div className="card" style={{ padding: 32, textAlign: 'center', color: 'var(--text-3)', fontSize: 14 }}>
|
||||||
این بخش فقط برای پزشک در دسترس است.
|
این بخش فقط برای پزشک در دسترس است.
|
||||||
</div>
|
</div>
|
||||||
) : isLoading ? (
|
|
||||||
<div style={{ padding: 16, color: 'var(--text-3)', fontSize: 13 }}>در حال بارگذاری...</div>
|
|
||||||
) : (
|
) : (
|
||||||
<WeeklyScheduleTab doctorUuid={uuid} addresses={addresses} />
|
<ScheduleSection doctorUuid={uuid} />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</SettingsLayout>
|
</SettingsLayout>
|
||||||
|
|||||||
@@ -2055,7 +2055,7 @@ const SCHEDULE_TABS = [
|
|||||||
{ id: 'holidays' as const, label: 'تعطیلات' },
|
{ id: 'holidays' as const, label: 'تعطیلات' },
|
||||||
];
|
];
|
||||||
|
|
||||||
function ScheduleSection({ doctorUuid, readOnly = false }: { doctorUuid: string; readOnly?: boolean }) {
|
export function ScheduleSection({ doctorUuid, readOnly = false }: { doctorUuid: string; readOnly?: boolean }) {
|
||||||
const [tab, setTab] = useState<'weekly' | 'overrides' | 'holidays'>('weekly');
|
const [tab, setTab] = useState<'weekly' | 'overrides' | 'holidays'>('weekly');
|
||||||
|
|
||||||
const locationsQ = useQuery({
|
const locationsQ = useQuery({
|
||||||
@@ -2896,7 +2896,7 @@ export default function DoctorDetailPage({ isOwnProfile = false }: { isOwnProfil
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{uuid && <ScheduleSection doctorUuid={uuid} readOnly={isReadOnly} />}
|
{uuid && !isOwnProfile && <ScheduleSection doctorUuid={uuid} readOnly={isReadOnly} />}
|
||||||
|
|
||||||
{isOwnProfile && <ClinicInvitationsSection />}
|
{isOwnProfile && <ClinicInvitationsSection />}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user