پرش به مطلب اصلی

DropdownMenu

کامپوننت DropdownMenu برای نمایش منوی عملیات با کلیک روی یک عنصر استفاده می‌شود؛ مثل منوی «...» کنار هر ردیف جدول یا منوی حساب کاربری. از DropdownMenu (ظرف) و DropdownMenuItem (هر گزینه) تشکیل شده است.

Import​

import { DropdownMenu, DropdownMenuItem } from "fara-ui";

اگر هنوز FaraUI را نصب و راه‌اندازی نکرده‌ای، ابتدا صفحه‌ی شروع به کار را ببین.

Basic Usage​

<DropdownMenu trigger={<Button variant="secondary">عملیات</Button>}>
<DropdownMenuItem onClick={handleEdit}>ویرایش</DropdownMenuItem>
<DropdownMenuItem danger onClick={handleDelete}>
حذف
</DropdownMenuItem>
</DropdownMenu>

Playground​

هر گزینه این prop ها را دارد:

  • onClick — عملیات مربوط به گزینه؛ بعد از کلیک، منو به‌صورت خودکار بسته می‌شود
  • disabled — غیرفعال کردن گزینه
  • danger — قرمز کردن گزینه؛ برای عملیات‌های مخرب مثل حذف

Closing Behavior​

  • کلیک روی هر گزینه
  • کلیک بیرون از منو
  • کلیک دوباره روی trigger (toggle)
  • فشردن کلید Escape

Popover vs DropdownMenu​

  • DropdownMenu — منوی انتخاب عملیات؛ آیتم‌ها استاندارد دارند و بعد از کلیک بسته می‌شود
  • Popover — ظرف عمومی برای هر محتوای تعاملی (فرم، کارت و ...)

Accessibility​

  • منو با role="menu" و گزینه‌ها با role="menuitem" پیاده شده‌اند.
  • بستن با Escape و کلیک بیرون از منو پشتیبانی می‌شود.
  • محدودیت شناخته‌شده: پیمایش بین گزینه‌ها با کلیدهای جهت و مدیریت کامل focus در حال حاضر پیاده‌سازی نشده است.
  • wrapper مربوط به trigger خودش role="button" یا keyboard handler اضافه نمی‌کند؛ trigger را یک Button یا عنصر تعاملی واقعی قرار بده.

Data Attributes and Customize CSS​

DropdownMenu hookهای زیر را ارائه می‌کند:

Attributeکاربرد
data-fara-dropdown-menuwrapper اصلی
data-fara-dropdown-menu-triggerwrapper trigger
data-fara-dropdown-menu-menuپنل پورتال منو
data-fara-dropdown-menu-listعنصر دارای role="menu"
data-fara-dropdown-menu-itemهر گزینه
data-dangerگزینه‌ی مخرب
data-disabledگزینه‌ی غیرفعال
[data-fara-dropdown-menu-menu] {
min-width: 180px;
}

[data-fara-dropdown-menu-item][data-danger] {
color: #dc2626;
}

[data-fara-dropdown-menu-item][data-disabled] {
cursor: not-allowed;
opacity: 0.5;
}

در API فعلی className برای DropdownMenu یا DropdownMenuItem وجود ندارد؛ برای پنل پورتال و گزینه‌ها از data attributes استفاده کن. پنل در document.body رندر می‌شود، پس selector آن را به wrapper والد وابسته نکن.

Props — DropdownMenu​

PropTypeDescription
triggerReactNodeعنصر بازکننده‌ی منو (الزامی)
childrenReactNodeگزینه‌های منو — DropdownMenuItem (الزامی)

Props — DropdownMenuItem​

PropTypeDefaultDescription
childrenReactNode-متن گزینه (الزامی)
onClick() => void-عملیات گزینه؛ بعد از آن منو بسته می‌شود
disabledbooleanfalseغیرفعال کردن گزینه
dangerbooleanfalseنمایش قرمز — عملیات مخرب