فهرست هدف و نتیجه (TargetList و BulkResultList)

نام‌بردن از هدف‌های یک اقدام گروهی پیش از اجرا و نمایش نتیجهٔ هر مورد پس از آن — انجام شد، کنار گذاشته شد، نتیجه نامشخص یا ناموفق؛ نتیجهٔ نامشخص هرگز موفقیت نیست.

معرفی

اقدامی که چند مورد را در بر می‌گیرد دو لحظه دارد و هر دو تا امروز با «یک عدد» و «یک toast» گذرانده می‌شدند: «6 اکانت» و «4 موفق، 2 ناموفق».

  • TargetList پیش از اجرا هدف‌ها را نام می‌برد: عنوان با شمار، دلیل، و نام‌ها (شناسه‌ها با رقم و جهت لاتین)، حداکثر limit تا و بعد «و N مورد دیگر». دو تا از آن، «اجرا می‌شود» و «کنار گذاشته می‌شود»، پیش‌نمایش اقدام گروهی‌اند.
  • BulkResultList پس از اجرا نتیجهٔ هر مورد را در همان دیالوگ نشان می‌دهد: تیتر کلی (role="status")، گروه‌های «ناموفق»، «نتیجه نامشخص»، «کنار گذاشته شد» و «انجام شد» با دلیل هر مورد، «تلاش دوباره برای N مورد» و «کپی گزارش».

قاعدهٔ ایمنی: uncertain یعنی درخواست رفت و پاسخ قطعی نیامد (timeout، قطع اتصال، 5xx پس از شروع کار). این مورد هرگز «انجام شد» نمایش داده نمی‌شود و هرگز کورکورانه دوباره فرستاده نمی‌شود: onRetry فقط شناسهٔ موردهای ناموفق را می‌گیرد. مقدار ناشناخته نیز uncertain خوانده می‌شود.

اجرا می‌شود3
  • sara.market
  • ali.studio
  • negar.shop
کنار گذاشته می‌شود1

سوخته‌ها دوباره وارد نمی‌شوند

  • reza.gallery
1 از 3 مورد انجام شد

ناموفق1

  • ali.studioاینستاگرام درخواست را رد کرد

نتیجه نامشخص1

پاسخ قطعی نرسید. پیش از تلاش دوباره وضعیت را بررسی کنید؛ ممکن است انجام شده باشد.

  • negar.shopپاسخ سرور نرسید

کنار گذاشته شد1

  • reza.galleryسوخته

انجام شد1

استفاده

import { BulkResultList, TargetList } from '@partodata/ui'

// پیش از اجرا
<TargetList title="اجرا می‌شود" items={runnable} />
<TargetList title="کنار گذاشته می‌شود" tone="warning" reason="سوخته‌ها دوباره وارد نمی‌شوند" items={skipped} />

// پس از اجرا، داخل ConfirmDialog (result) یا بدنهٔ دیالوگ
<BulkResultList
  items={results} // { id, label, outcome: 'done' | 'skipped' | 'uncertain' | 'failed', reason? }
  onRetry={(failedIds) => run(failedIds)}
/>

summarizeBulkResult(items) همان شمارش و جمع‌بندی (success · partial · uncertain · failed · empty) را برای منطق صفحه (مثلاً انتخاب باقی‌مانده) می‌دهد.

رفتار

  • تیتر: «6 مورد انجام شد» فقط وقتی همه انجام شده؛ وگرنه «4 از 6 مورد انجام شد»، «نتیجهٔ 2 مورد نامشخص است؛ بررسی کنید» یا «هیچ موردی انجام نشد». نقطهٔ تیتر از چهار رنگ معنایی گرامر است و همیشه کنار متن.
  • نامشخص: راهنما می‌گوید پیش از تلاش دوباره وضعیت را بررسی کنید.
  • کپی گزارش: یک خط به ازای هر مورد (نام، نتیجه، دلیل). navigator.clipboard.writeText منتظر می‌شود و نتیجه («گزارش کپی شد» یا «کپی ممکن نشد») گفته می‌شود؛ شکست بی‌صدا نیست. label و reason هرگز رمز یا توکن نباید داشته باشند.
  • انجام‌شده‌ها وقتی همه‌چیز موفق نبوده جمع می‌شوند تا ناموفق‌ها دیده شوند.

Props

TargetList

Prop

Type

BulkResultList

Prop

Type

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

  • تیتر role="status" است و نتیجه یک‌بار اعلام می‌شود؛ نقطه‌ها aria-hidden و معنا همیشه در متن است.
  • نام‌ها در <bdi dir="ltr"> هستند تا شناسه با رقم لاتین در جملهٔ فارسی جابه‌جا نشود.

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