/**
* Ported clinic/doctor dashboard view — pixel-for-pixel from clinic-pro-tauri
* `src/components/dashboard/index.jsx` (Cards → Charts → New-appointments list,
* stacked with 24px gaps). Purely presentational; both ClinicDashboard and
* DoctorDashboard feed it their (real-API) data.
*/
import React from 'react';
import { Link } from 'react-router-dom';
import { TauriStatCards, type DashboardStats } from './TauriStatCards';
import { TauriBarChart, TauriLineChart, type ChartPoint } from './TauriCharts';
import { NewAppointmentsTable, type ApptRow } from './NewAppointmentsTable';
import SearchableSelect from '../ui/SearchableSelect';
export interface SelectorOption {
value: number;
label: string;
}
/** dropdown دورهی نمودار — مقدارش دادهی نمودار را عوض میکند */
function SmSelector({ options, value, onChange }: { options: SelectorOption[]; value: number; onChange: (v: number) => void }) {
return (
onChange(Number(v))}
height={34}
/>
);
}
function ChartTitle({ text }: { text: string }) {
return {text}
;
}
function ChartCard({
title,
selectorOptions,
selectorValue,
onSelectorChange,
children,
}: {
title: string;
selectorOptions: SelectorOption[];
selectorValue: number;
onSelectorChange: (v: number) => void;
children: React.ReactNode;
}) {
return (
);
}
export const JALALI_MONTHS = ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'];
const MONTH_OPTIONS: SelectorOption[] = JALALI_MONTHS.map((label, i) => ({ value: i + 1, label }));
/** سال جاری و ۳ سال گذشتهی شمسی */
function yearOptions(currentYear: number): SelectorOption[] {
return [0, 1, 2, 3].map((back) => ({
value: currentYear - back,
label: `سال ${new Intl.NumberFormat('fa-IR', { useGrouping: false }).format(currentYear - back)}`,
}));
}
export interface TauriDashboardViewProps {
stats: DashboardStats;
/** «نمودار تعداد بیماران» series (appointments_by_day) */
patientBars: ChartPoint[];
/** «میزان درآمد» series (revenue_by_day) */
incomeLine: ChartPoint[];
appointments: ApptRow[];
loading: boolean;
formatNumber: (n: number) => string;
formatRial: (rial: number) => string;
/** ماه شمسی نمودار بیماران (۱..۱۲) */
patientsMonth: number;
onPatientsMonthChange: (m: number) => void;
/** سال شمسی نمودار درآمد */
revenueYear: number;
onRevenueYearChange: (y: number) => void;
/** سال شمسی جاری — مبنای گزینههای سلکتور سال */
currentJalaliYear: number;
}
export function TauriDashboardView({
stats,
patientBars,
incomeLine,
appointments,
loading,
formatNumber,
formatRial,
patientsMonth,
onPatientsMonthChange,
revenueYear,
onRevenueYearChange,
currentJalaliYear,
}: TauriDashboardViewProps) {
const yearOpts = React.useMemo(() => yearOptions(currentJalaliYear), [currentJalaliYear]);
return (
{/* Cards */}
{/* Charts — grid-2 (1fr 1fr, collapses to 1fr on narrow) for reliable
full-width equal columns, matching the rest of the admin dashboard */}
{/* New appointments list */}
لیست نوبتهای جدید
نوبتها
);
}