جریان وضعیت (StatusFlow)
تجسم افقی/عمودی چرخه عمر چندمرحلهای — هر مرحله وضعیت مستقل دارد (در انتظار، در حال اجرا، تکمیل، ناموفق، رد شده، با هشدار، متوقف) و درصد پیشرفت درون مرحله فعلی.
معرفی
StatusFlow تجسم یک pipeline چندمرحلهای است — کاربر اجرا نمیکند، سیستم اجرا میکند و StatusFlow به کاربر نشان میدهد «کجای زنجیره هستیم». هر مرحله وضعیت مستقل خود را دارد: pending | running | completed | failed | skipped | warning | paused. درون مرحلهی running میتوانید درصد پیشرفت را نیز نمایش دهید.
چه زمانی استفاده کنیم:
- Pipeline تحلیل async (کامنتسنج: واکشی → پردازش → برچسبزنی → بازبینی → گزارش)
- چرخهی lifecycle worker (Booster: login → 2FA → warmup → HASE → operational)
- stageهای ارزیابی پیج (ارزیابی: PENDING → PROCESSING → COMPLETED|FAILED با زیرمرحلهها)
- جایی که میخواهید بگویید «در مرحلهی ۳ از ۵ هستیم و ۴۵٪ از آن انجام شده»
چه زمانی استفاده نکنیم:
- چرخهای که کاربر خودش پیش میبرد (wizard: Next/Previous) — از
Stepperاستفاده کنید - فقط یک وضعیت (running/completed/failed) دارید — از
JobCardStatusBadgeکافی است - pipeline بیشمار مرحله (>۸) — در فضای افقی جا نمیشود، از
orientation="vertical"استفاده کنید یا درخت tree نشان دهید
- دریافت کامنتها
۱٬۲۵۰ کامنت
- پردازش فایل
فرمت Excel
- برچسبزنی خودکار۴۵٪
۴۵۰ از ۱٬۲۵۰
- بازبینی انسانی
- تولید گزارش
زمین بازی
با تغییر تنظیمات زیر، پیشنمایش زنده را مشاهده کنید.
- دریافت
- اعتبارسنجی
- پردازش
- تحلیل
استفاده
حالت data-driven (پیشفرض)
import { StatusFlow } from '@parto-system-design/ui'
export function AnalysisPipeline() {
return (
<StatusFlow
stages={[
{ id: 'fetch', label: 'دریافت کامنتها', status: 'completed', description: '۱٬۲۵۰ کامنت' },
{ id: 'parse', label: 'پردازش فایل', status: 'completed' },
{ id: 'label', label: 'برچسبزنی', status: 'running', progress: 45 },
{ id: 'review', label: 'بازبینی', status: 'pending' },
{ id: 'report', label: 'گزارش', status: 'pending' },
]}
/>
)
}حالت composition (برای سفارشیسازی per-stage)
<StatusFlow>
<StatusFlowStage id="a" label="دریافت" status="completed" />
<StatusFlowStage id="b" label="پردازش" status="completed" />
<StatusFlowStage id="c" label="تحلیل" status="running" progress={60} />
<StatusFlowStage id="d" label="تحویل" status="pending" />
</StatusFlow>- دریافت
- پردازش
- تحلیل۶۰٪
- تحویل
هفت وضعیت canonical
StageStatusKey: pending | running | completed | failed | skipped | warning | paused
- تکمیلشده
- در حال اجرا۶۲٪
- در انتظار
- ناموفق
- رد شده
- با هشدار
- متوقف
- pending — هنوز شروع نشده. مارکر خاموش، کانکتور خاکستری یکدست.
- running — در حال اجرا. مارکر برند با spinner، کانکتور بعد از آن dashed.
- completed — با موفقیت تمام شد. ✓ سبز.
- failed — خطا. × قرمز، کانکتور هم قرمز.
- skipped — رد شده (مثلاً تنظیمات بود خاموش). خط تیره خاموش.
- warning — تمام شد ولی با هشدار. مثلث هشدار، کانکتور زرد.
- paused — منتظر (rate-limit، دخالت کاربر). آیکون Pause، کانکتور dashed زرد.
عمودی (برای سایدبار یا فضاهای باریک)
- ورود اکانت۲ روز پیش
احراز هویت با موفقیت
- تأیید دومرحلهای۲ روز پیش
کد تأییدی SMS
- Warmup دورهای۱ روز پیش
حجم کم تعاملات اولیه
- HASE (شخصیت انسانی)۷۲٪۸ ساعت
در حال ساخت پروفایل رفتاری
- آماده عملیات
بعد از اتمام HASE آزاد میشود
در حالت عمودی، label به سمت انتهای منطقی (inset-inline-end) قرار میگیرد و کانکتور یک خط عمودی است. بهترین برای سایدبار پروفایل یا drawer جزئیات.
اندازهها
sm
- شروع
- میانه۴۰٪
- پایان
md (پیشفرض)
- شروع
- میانه۴۰٪
- پایان
lg
- شروع
- میانه۴۰٪
- پایان
sm— مارکر ۲۰px، مناسب ردیفهای فشرده داخل JobCard یا لیستmd(پیشفرض) — مارکر ۲۸px، استانداردlg— مارکر ۳۶px، برای صفحات اختصاصی pipeline
ترکیب با JobCard
تحلیل کامنتهای پست شماره ۱۲۳
۱٬۲۵۰ کامنت · ۵ مرحله
- دریافت
- پردازش
- برچسبزنی۴۵٪
- بازبینی
- گزارش
الگوی معمول: JobCard یک شاخص وضعیت کلی (running/completed/failed) دارد، و StatusFlow زیر Header، جزئیات pipeline را باز میکند. از size="sm" استفاده کنید تا ارتفاع کارت زیاد نشود.
مراحل قابلکلیک
- واکشی
کلیک کنید
- در حال اجرا۳۰٪
کلیک کنید
- در صف
کلیک کنید
- پایان
کلیک کنید
با onStageSelect مارکرها به دکمه تبدیل میشوند. مناسب برای باز کردن Drawer جزئیات هر مرحله یا تنظیمات آن.
Props
StatusFlow
StatusFlowStageData
راهنمای استفاده
بکنید
- برای pipelineهای server-driven از
stages(data-driven) استفاده کنید؛ state را در component والد نگهدارید و روی تغییر، StatusFlow را دوباره رندر کنید -status="running"معمولاً فقط روی یک مرحله همزمان اعمال شود؛ بیش از یک اجرای موازی کاربر را گیج میکند - اگر مرحله از قبل رد شد (شرطی بود و غیرفعال)، ازskippedاستفاده کنید، نهpending - در فضای باریک از
orientation="vertical"استفاده کنید — horizontal حداقل ۴۰۰px عرض مفید نیاز دارد - برای نمایش در داخل JobCard یا ردیف جدول،size="sm"+ labels ممکن است بسته به فضا بهتر باشد
نکنید
- با Stepper اشتباه نگیرید — Stepper برای wizard کاربرمحور (Next/Previous) است. StatusFlow فقط نمایش وضعیت
system-driven است -
progressرا برای مراحل غیر-running تنظیم نکنید — نمایش داده نمیشود و فقط حجم data اضافه میکند - بیش از ۸ مرحله در حالت افقی نگذارید — labelها روی هم میافتند یا truncate زشت میشوند - از رنگ به تنهایی برای تمایز استفاده نکنید — هر مارکر آیکون معنایی مخصوص خود دارد (✓ × − ! ⏸) که به screen reader هم اعلام میشود
دسترسیپذیری
- Root یک
<ol>باdata-orientation+data-sizeاست — screen reader «لیست مرتبی از ... مرحله» را اعلام میکند - هر مرحله یک
<li>باaria-label="{label} — {statusLabel}"است - مرحلهی
runningدارایaria-current="step"است - وقتی
onStageSelectتنظیم باشد، مارکرها به<button>تبدیل میشوند با focus ring درست - spinner روی مارکر
runningباmotion-safe:animate-spinست شده — درprefers-reduced-motionساکن میماند - رنگ نه تنها راه تمایز: هر وضعیت آیکون معنایی اختصاصی دارد + متن وضعیت به عنوان aria-label خوانده میشود
- کانکتورها
aria-hidden="true"هستند (زینتی)
کامپوننتهای مرتبط
- Stepper — برای wizard کاربرمحور (Next/Previous)؛ StatusFlow برای pipeline سیستمی
- JobCard — StatusFlow معمولاً زیر JobCardHeader قرار میگیرد تا جزئیات چرخهعمر را به یک شاخص کلی (JobCardStatusBadge) اضافه کند
- Progress — progress bar خطی تکمتغیره؛ StatusFlow برای multi-stage
- Breadcrumb — مسیر ناوبری URL-driven؛ مفهوماً متفاوت
کارت سلامت موجودیت (EntityHealthCard)
کارت canonical برای نمایش سلامت موجودیتهای long-lived — ورکرها، پیجهای رصدی، منابع داده — با روایت شدتبندی ۶سطحی، نمره، اعتماد، فاز، متریک و CTA.
فید فعالیت (ActionTimeline)
فید زمانی رویدادها و اقدامات — عملیات Booster، رویدادهای چرخهعمر تحلیل، لاگ audit — با markerهای وضعیتی، متادیتای نسبی/مطلق، گروهبندی روزانه، و پشتیبانی از پیشنمایش و اکشنهای inline.