جریان وضعیت (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 با زیرمرحلهها)
- جایی که میخواهید بگویید «در مرحلهی 3 از 5 هستیم و 45٪ از آن انجام شده»
چه زمانی استفاده نکنیم:
- چرخهای که کاربر خودش پیش میبرد (wizard: Next/Previous) — از
Stepperاستفاده کنید - فقط یک وضعیت (running/completed/failed) دارید — از
JobCardStatusBadgeکافی است - pipeline بیشمار مرحله (>8) — در فضای افقی جا نمیشود، از
orientation="vertical"استفاده کنید یا درخت tree نشان دهید
- دریافت کامنتها
1,250 کامنت
- پردازش فایل
فرمت Excel
- برچسبزنی خودکار45٪
450 از 1,250
- بازبینی انسانی
- تولید گزارش
زمین بازی
با تغییر تنظیمات زیر، پیشنمایش زنده را مشاهده کنید.
- دریافت
- اعتبارسنجی
- پردازش
- تحلیل
استفاده
حالت data-driven (پیشفرض)
import { StatusFlow } from '@partodata/ui'
export function AnalysisPipeline() {
return (
<StatusFlow
stages={[
{ id: 'fetch', label: 'دریافت کامنتها', status: 'completed', description: '1,250 کامنت' },
{ 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>- دریافت
- پردازش
- تحلیل60٪
- تحویل
هفت وضعیت canonical
StageStatusKey: pending | running | completed | failed | skipped | warning | paused
- تکمیلشده
- در حال اجرا
- در انتظار
- ناموفق
- رد شده
- با هشدار
- متوقف
- pending — هنوز شروع نشده. مارکر خاموش، کانکتور خاکستری یکدست.
- running — در حال اجرا. مارکر برند با spinner، کانکتور بعد از آن dashed.
- completed — با موفقیت تمام شد. ✓ سبز.
- failed — خطا. × قرمز، کانکتور هم قرمز.
- skipped — رد شده (مثلاً تنظیمات بود خاموش). خط تیره خاموش.
- warning — تمام شد ولی با هشدار. مثلث هشدار، کانکتور زرد.
- paused — منتظر (rate-limit، دخالت کاربر). آیکون Pause، کانکتور dashed زرد.
عمودی (برای سایدبار یا فضاهای باریک)
- ورود اکانت2 روز پیش
احراز هویت انجام شد
- تأیید دومرحلهای2 روز پیش
کد تأییدی SMS
- Warmup دورهای1 روز پیش
حجم کم تعاملات اولیه
- HASE (شخصیت انسانی)72٪8 ساعت
در حال ساخت پروفایل رفتاری
- آماده عملیات
بعد از اتمام HASE آزاد میشود
در حالت عمودی، label به سمت انتهای منطقی (inset-inline-end) قرار میگیرد و کانکتور یک خط عمودی است. بهترین برای سایدبار پروفایل یا drawer جزئیات.
اندازهها
sm
- شروع
- میانه40٪
- پایان
md (پیشفرض)
- شروع
- میانه40٪
- پایان
lg
- شروع
- میانه40٪
- پایان
sm— مارکر 20px، مناسب ردیفهای فشرده داخل JobCard یا لیستmd(پیشفرض) — مارکر 28px، استانداردlg— مارکر 36px، برای صفحات اختصاصی pipeline
ترکیب با JobCard
تحلیل کامنتهای پست شماره 123
- دریافت
- پردازش
- برچسبزنی45٪
- بازبینی
- گزارش
الگوی معمول: JobCard یک شاخص وضعیت کلی (running/completed/failed) دارد، و StatusFlow زیر Header، جزئیات pipeline را باز میکند. از size="sm" استفاده کنید تا ارتفاع کارت زیاد نشود.
مراحل قابلکلیک
- واکشی
کلیک کنید
- در حال اجرا30٪
کلیک کنید
- در صف
کلیک کنید
- پایان
کلیک کنید
با onStageSelect مارکرها به دکمه تبدیل میشوند. مناسب برای باز کردن Drawer جزئیات هر مرحله یا تنظیمات آن.
Props
StatusFlow
StatusFlowStageData
راهنمای استفاده
بکنید
- برای pipelineهای server-driven از
stages(data-driven) استفاده کنید؛ state را در component والد نگهدارید و روی تغییر، StatusFlow را دوباره رندر کنید -status="running"معمولاً فقط روی یک مرحله همزمان اعمال شود؛ بیش از یک اجرای موازی کاربر را گیج میکند - اگر مرحله از قبل رد شد (شرطی بود و غیرفعال)، ازskippedاستفاده کنید، نهpending - در فضای باریک از
orientation="vertical"استفاده کنید — horizontal حداقل 400px عرض مفید نیاز دارد - برای نمایش در داخل JobCard یا ردیف جدول،size="sm"+ labels ممکن است بسته به فضا بهتر باشد
نکنید
- با Stepper اشتباه نگیرید — Stepper برای wizard کاربرمحور (Next/Previous) است. StatusFlow فقط نمایش وضعیت
system-driven است -
progressرا برای مراحل غیر-running تنظیم نکنید — نمایش داده نمیشود و فقط حجم data اضافه میکند - بیش از 8 مرحله در حالت افقی نگذارید — labelها روی هم میافتند یا truncate زشت میشوند - از رنگ به تنهایی برای تمایز استفاده نکنید — هر مارکر آیکون معنایی مخصوص خود دارد (✓ × − ! ⏸) که به screen reader هم اعلام میشود
دسترسیپذیری
- Root یک
<ol>باdata-orientation+data-sizeاست وrole="list"را صریح اعلام میکند — screen reader «لیست مرتبی از ... مرحله» را اعلام میکند. این نقشِ صریح لازم است، چون root در هر دو جهتdisplay: flexاست و WebKit (Safari/VoiceOver) نقش ضمنی list را از چنین فهرستی حذف میکند - هر مرحله یک
<li>باrole="listitem"صریح و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؛ مفهوماً متفاوت
کارت کار (JobCard)
یک کار async — تحلیل، خزش، ورود فایل — با مرحله، صف، پیشرفت شمارشی، علت شکست و یک اقدام اصلی برای هر مرحله، در سه چیدمان کارت، ردیف و سربرگ صفحه.
سلول وضعیت (StatusCell)
ستون وضعیت جدول — نقطهٔ رنگیِ معنادار، برچسب متنی و caption؛ با چهار رنگ معنایی، پالس برای «در حال انجام» و StatusDot برای نقطهٔ تنها.