پرتوپرتو

جریان وضعیت (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 نشان دهید
  1. دریافت کامنت‌ها

    ۱٬۲۵۰ کامنت

  2. پردازش فایل

    فرمت Excel

  3. برچسب‌زنی خودکار۴۵٪

    ۴۵۰ از ۱٬۲۵۰

  4. بازبینی انسانی
  5. تولید گزارش

زمین بازی

با تغییر تنظیمات زیر، پیش‌نمایش زنده را مشاهده کنید.

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

استفاده

حالت 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>
  1. دریافت
  2. پردازش
  3. تحلیل۶۰٪
  4. تحویل

هفت وضعیت canonical

StageStatusKey: pending | running | completed | failed | skipped | warning | paused

  1. تکمیل‌شده
  2. در حال اجرا۶۲٪
  3. در انتظار
  4. ناموفق
  5. رد شده
  6. با هشدار
  7. متوقف
  • pending — هنوز شروع نشده. مارکر خاموش، کانکتور خاکستری یک‌دست.
  • running — در حال اجرا. مارکر برند با spinner، کانکتور بعد از آن dashed.
  • completed — با موفقیت تمام شد. ✓ سبز.
  • failed — خطا. × قرمز، کانکتور هم قرمز.
  • skipped — رد شده (مثلاً تنظیمات بود خاموش). خط تیره خاموش.
  • warning — تمام شد ولی با هشدار. مثلث هشدار، کانکتور زرد.
  • paused — منتظر (rate-limit، دخالت کاربر). آیکون Pause، کانکتور dashed زرد.

عمودی (برای سایدبار یا فضاهای باریک)

  1. ورود اکانت۲ روز پیش

    احراز هویت با موفقیت

  2. تأیید دومرحله‌ای۲ روز پیش

    کد تأییدی SMS

  3. Warmup دوره‌ای۱ روز پیش

    حجم کم تعاملات اولیه

  4. HASE (شخصیت انسانی)۷۲٪۸ ساعت

    در حال ساخت پروفایل رفتاری

  5. آماده عملیات

    بعد از اتمام HASE آزاد می‌شود

در حالت عمودی، label به سمت انتهای منطقی (inset-inline-end) قرار می‌گیرد و کانکتور یک خط عمودی است. بهترین برای سایدبار پروفایل یا drawer جزئیات.

اندازه‌ها

sm

  1. شروع
  2. میانه۴۰٪
  3. پایان

md (پیش‌فرض)

  1. شروع
  2. میانه۴۰٪
  3. پایان

lg

  1. شروع
  2. میانه۴۰٪
  3. پایان
  • sm — مارکر ۲۰px، مناسب ردیف‌های فشرده داخل JobCard یا لیست
  • md (پیش‌فرض) — مارکر ۲۸px، استاندارد
  • lg — مارکر ۳۶px، برای صفحات اختصاصی pipeline

ترکیب با JobCard

تحلیل کامنت‌های پست شماره ۱۲۳

۱٬۲۵۰ کامنت · ۵ مرحله

در حال اجرا
  1. دریافت
  2. پردازش
  3. برچسب‌زنی۴۵٪
  4. بازبینی
  5. گزارش

الگوی معمول: JobCard یک شاخص وضعیت کلی (running/completed/failed) دارد، و StatusFlow زیر Header، جزئیات pipeline را باز می‌کند. از size="sm" استفاده کنید تا ارتفاع کارت زیاد نشود.

مراحل قابل‌کلیک

  1. واکشی

    کلیک کنید

  2. در حال اجرا۳۰٪

    کلیک کنید

  3. در صف

    کلیک کنید

  4. پایان

    کلیک کنید

با onStageSelect مارکرها به دکمه تبدیل می‌شوند. مناسب برای باز کردن Drawer جزئیات هر مرحله یا تنظیمات آن.

Props

StatusFlow

Prop

Type

StatusFlowStageData

Prop

Type

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

بکنید

  • برای 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؛ مفهوماً متفاوت