پرتوپرتو

اکشن‌های پست (PostActions)

ردیف اکشن‌های inline + overflow menu برای یک پست — building block داخلی PostCard

معرفی

PostActions ردیف اکشن‌های یک پست است — حداکثر primaryCount اکشن inline (پیش‌فرض 3)، باقی در overflow menu. building block داخلی PostCard و PostList که برای موارد سفارشی هم export شده.

زمین بازی

زمین بازی
تنظیمات
داده
ظاهر
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

چه زمانی مستقیم استفاده کنیم:

  • ساخت کارت پست سفارشی که نمی‌توان با PostCard پوشش داد
  • toolbar روی detail-view یک پست (در PostDetailsDrawer یا صفحه‌ی dedicate)
  • ردیف اکشن مشترک برای multi-select state

چه زمانی استفاده نکنیم:

  • معمولاً نه — PostCard و PostList این را داخل خود مدیریت می‌کنند

استفاده

import { PostActions } from '@parto-system-design/ui'
import { Heart, Bookmark, MoreHorizontal, Share2, Trash } from 'lucide-react'

<PostActions
  post={post}
  primaryCount={3}
  actions={[
    { id: 'like', label: 'پسند', icon: Heart, onClick: () => ... },
    { id: 'save', label: 'ذخیره', icon: Bookmark, onClick: () => ... },
    { id: 'share', label: 'اشتراک', icon: Share2, onClick: () => ... },
    { id: 'delete', label: 'حذف', icon: Trash, variant: 'danger', onClick: () => ... },
  ]}
/>

اکشن‌های با hidden: true rendered نمی‌شوند — برای toggling مفید است. اکشن variant: 'danger' رنگ destructive می‌گیرد.

راهنمای استفاده

بکنید

  • primaryCount را روی ۲-۳ نگه دارید — اکشن inline زیاد، توجه کاربر را خرج می‌کند - برای اکشن‌های destructive از variant: 'danger' استفاده کنید تا Button رنگ destructive بگیرد - هر اکشن باید id یکتا داشته باشد — برای React key
  • tracking در tests استفاده می‌شود

نکنید

  • بیش از ۶-۸ اکشن کل (inline + overflow) نگذارید — overflow menu طولانی غیرقابل scan است - onClick را برای navigation ساده استفاده نکنید — اگر فقط لینک به source post است، از sourceUrl در PostData استفاده کنید

جدول ویژگی‌ها

Prop

Type

دسترسی‌پذیری

  • هر اکشن inline داخل یک <Tooltip> با label به‌عنوان content wrap می‌شود تا screen reader و سایر کاربران a11y نام اکشن را بشنوند (Button خود aria-label={label} دارد).
  • اکشن‌های با disabled: true ویژگی disabled HTML را می‌گیرند — keyboard navigation آنها را skip می‌کند و screen reader حالت غیرفعال را اعلام می‌کند.
  • overflow menu از DropdownMenu (Radix) ساخته شده — open/close با Enter/Space، navigation با Arrow keys، Escape برای close.
  • wrapper یک role="presentation" می‌گیرد و click bubble را stop می‌کند تا کلیک‌های اشتباه روی والد clickable card را به فعال‌سازی پست منجر نشوند — interactive role فقط روی Buttonهای داخلی است.
  • هنگام variant: 'danger' رنگ destructive از CSS variable می‌آید و contrast ratio روی هر دو theme روشن/تاریک WCAG AA را پاس می‌کند.

کامپوننت‌های مرتبط

  • خود کارت پستPostCard
  • detail view با toolbarPostDetailsDrawer