Diff Tablev1.0.0
وقتی یک agent تغییراتِ دستهجمعی روی دادههای جدولی پیشنهاد میدهد (پاکسازیِ منو، اصلاحِ قیمتها)، این سطرهای افزوده/حذف/تغییرکرده را رنگی نشان میدهد و به کاربر اجازه میدهد هرکدام را جدا تایید یا رد کند، نه همه یا هیچ.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
npx digdesign@latest add https://docs.digdesign.ir/r/diff-table.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/diff-table.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/diff-table.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/diff-table.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
استفاده
import {
DiffTable,
DiffTableBody,
DiffTableRow,
DiffTableSummary,
} from "@/components/ui/diff-table"
import { TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
ترکیب اجزا
روی Table ساخته شده، نه یک موتورِ جدولِ جدید: DiffTable خودِ Table را رندر میکند و فقط یک Context برایِ مجموعهٔ «کدام سطرها اعمال شوند» رویش میگذارد. DiffTableRow یک TableRow است با رنگِ پسزمینه بر اساسِ state و یک چکباکسِ خودکار (فقط وقتی state چیزی جز unchanged باشد).
کلیک روی خودِ سطر هم مثل کلیک روی چکباکس عمل میکند — دقیقاً رفتاری که در توضیحِ اصلیِ این الگو آمده: «روی سطرهای تغییرکرده کلیک کنید تا toggle شوند».
دسترسپذیری
- چکباکسِ هر سطر aria-label="اعمالِ این تغییر" دارد.
- کلیک روی خودِ سطر با stopPropagation از کلیکِ چکباکس جدا نگه داشته میشود تا دوبار toggle نشود.
مرجع API
DiffTable
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| defaultIncluded | string[] | [] | شناسهٔ سطرهایی که پیشفرض علامتخوردهاند. |
| included / onIncludedChange | Set<string> / (included: Set<string>) => void | — | حالتِ کنترلشده. |
| footer | React.ReactNode | — | معمولاً یک DiffTableSummary؛ بیرون از ناحیهٔ اسکرولِ افقیِ جدول، زیرش رندر میشود. |
DiffTableRow
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| rowId | string | — | شناسهٔ یکتای سطر. |
| state | "added" | "removed" | "changed" | "unchanged" | — | رنگِ سطر و نمایش/عدمِنمایشِ چکباکس را تعیین میکند. |
DiffTableSummary
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| addedCount / removedCount / changedCount | number | — | برای خطِ خلاصهٔ سمتِ چپ. |
| onApply | (included: string[]) => void | — | با کلیکِ دکمه، فهرستِ شناسهٔ سطرهایِ علامتخورده را میدهد. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
نمونهها
Changed Rows
state="changed" رنگِ زرد میگیرد و مثلِ added/removed چکباکسِ toggle دارد.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Controlled
با دادنِ included و onIncludedChange، مجموعهٔ سطرهایِ علامتخورده کاملاً دستِ خودِ شماست.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| Changed Rows | سطری که مقدارش عوض شده، نه فقط افزوده یا حذف شده |
| Controlled | وقتی خودِ صفحه باید بدونِ دخالتِ کاربر هم سطرها را علامت بزند (مثلاً «انتخابِ همه») |
دستورالعمل استفاده
اجازهٔ انتخابِ تکتک بده، نه همهیا-هیچ
انجام بده
هر سطرِ تغییرکرده چکباکسِ خودش را دارد؛ کاربر میتواند فقط بخشی از پیشنهادِ agent را قبول کند.
انجام نده
دو دکمهٔ سراسریِ «قبولِ همه» و «ردِ همه» بدونِ امکانِ انتخابِ تکی، کنترل را از کاربر میگیرد.
خلاصه را همیشه در پایینِ جدول نگه دار
انجام بده
DiffTableSummary با پراپِ summary روی DiffTable، تعدادِ افزوده/حذف/تغییر و دکمهٔ اعمال را همیشه زیرِ جدول و بیرون از اسکرولِ افقیاش نگه میدارد.
انجام نده
پخشکردنِ دکمهٔ اعمال در جایِ دیگرِ صفحه، ارتباطش را با جدولِ بالای خودش گم میکند.