import React, { useMemo, useState } from 'react'; import { Link } from 'react-router'; import { SearchHeaderP } from '../../pages/subscriptionIcons'; import { useAuthStore } from '../../stores/authStore'; import { usePermissions } from '../../hooks/usePermissions'; import { groupMenu, menuForRole, type SettingsMenuItem } from './settingsMenu'; /** * سایدبار تنظیمات — همان فهرستی که `SettingsMenuPage` روی موبایل نشان می‌دهد * (`settingsMenu.ts`)، با دو تفاوتِ عمدی: * * ۱. «مدیریت پزشک» اینجا نیست؛ جایش منوی اصلی/پروفایل پزشک است. * ۲. یک آیتم «تنظیمات» غیرفعال ته فهرست است — بخش امنیت هنوز مسیر پزشک/کلینیک ندارد. * * قبلاً این فهرست کپی جدا بود و هر آیتم تازه باید دو جا اضافه می‌شد؛ «منابع» و * «دسته‌بندی‌ها» فقط در موبایل ظاهر شدند و در سایدبار غایب بودند. */ const HIDDEN_KEYS = new Set(['doctor']); const SECURITY_ITEM: SettingsMenuItem = { key: 'security', label: 'تنظیمات', icon: () => null, group: 'account', alwaysOpen: true, disabled: true, }; export default function PurchaseSubscriptionSidebar({ active }: { active: string }) { const [query, setQuery] = useState(''); const primaryRole = useAuthStore((s) => s.primaryRole); const scope = useAuthStore((s) => s.context?.scope); const { can } = usePermissions(); // گروه‌ها بعد از فیلترِ جستجو ساخته می‌شوند تا تیترِ دسته‌ای که هیچ نتیجه‌ای ندارد // بالای فضای خالی نماند. const groups = useMemo( () => groupMenu( [ ...menuForRole(primaryRole, can, scope).filter((i) => !HIDDEN_KEYS.has(i.key)), SECURITY_ITEM, ].filter((i) => i.label.includes(query.trim())), ), [query, primaryRole, scope, can], ); const itemCount = groups.reduce((sum, g) => sum + g.items.length, 0); return ( ); }