نوار ابزار جدول داده (DataTableToolbar)
دو ابزار جانبی DataTable — Column Visibility dropdown + Export به CSV/TSV
معرفی
دو کامپوننت جانبی برای استفاده در toolbar بالای DataTable. هر دو روی API های موجود DataTable (columnVisibility prop) و export utilityها (CSV/TSV builders) سوار شدهاند.
زمین بازی
با تغییر variant و size، نوار ابزار را بهصورت زنده مشاهده کنید.
DataTableColumnVisibilityToggle
Dropdown با checkbox برای روشن/خاموش کردن هر ستون + دکمهی Reset.
import { DataTable, DataTableColumnVisibilityToggle } from '@parto-system-design/ui'
const [visible, setVisible] = React.useState<Record<string, boolean>>({})
const visibility = { visible, onVisibilityChange: setVisible }
<div className="flex items-center gap-2">
<DataTableColumnVisibilityToggle columns={columns} visibility={visibility} />
</div>
<DataTable columns={columns} data={data} columnVisibility={visibility} />DataTableExportButton
Dropdown با دو گزینه: Download CSV (فایل با BOM-prefixed UTF-8، مناسب Excel فارسی) و Copy as TSV (کلیپبورد، مناسب paste به Sheets/Notion). از buildCsv / buildTsv / downloadFile helpers هم بهصورت standalone export شدهاند.
import { DataTableExportButton } from '@parto-system-design/ui'
;<DataTableExportButton
filename="comments-2026-04.csv"
data={rows}
columns={[
{ id: 'name', header: 'نام', cell: (r) => r.name, exportValue: (r) => r.name },
{ id: 'sentiment', header: 'احساس', cell: (r) => r.sentiment, exportValue: (r) => r.sentiment },
{ id: 'count', header: 'تعداد', cell: (r) => r.count, exportValue: (r) => r.count },
]}
/>ستونها از همان DataTableColumn معمول استفاده میکنند (id + header + cell). اگر میخواهید مقدار export شده با مقدار رندر تفاوت داشته باشد، exportValue را تعریف کنید — در غیر این صورت cell بهصورت پیشفرض serialize میشود.
برای PDF/Excel xlsx، DS قصد ندارد library سنگین وارد کند — از npm package های external استفاده کنید (xlsx، pdfmake) و آنها را با خود <Button> invoke کنید.
راهنمای استفاده
بکنید
- DataTableColumnVisibilityToggle و ExportButton را در یک
flexcontainer کنار هم قرار دهید (سمت end) - برای محتوای فارسی، CSV با BOM-UTF8 prefix را Excel درست باز میکند — این کامپوننت پیشفرض همین کار را میکند - برای دادهی بزرگ، در کلیک export یکToastبا progress نمایش دهید — کاربر هیچ feedback ندارد
نکنید
- PDF/XLSX را در lib bundle نکنید — تخصصی است و سنگین — بهصورت optional dep در consumer install کنید - در
ExportButton مقدار خام
accessorبا کاما/نقل قول را escape کنید —buildCsvاین کار را میکند ولی اگر دستی helper استفاده میکنید،escapeCsvCellمستقیم export شده
جدول ویژگیها
DataTableColumnVisibilityToggle
DataTableExportButton
Helperهای standalone
buildCsv(columns, data) → string— تولید CSV با escape مناسب (کاما، نقل قول، newline)buildTsv(columns, data) → string— تولید TSV (tab-separated)downloadFile(filename, content, mime?)— trigger دانلود مرورگر با BOM برای UTF-8
دسترسیپذیری
- هر دو کامپوننت روی Radix
DropdownMenuساخته شدهاند — open/close با Enter/Space روی trigger، navigation با Arrow keys، Escape برای close. - آیکونهای
Settings2وDownloadباaria-hidden="true"رندر میشوند؛ متن دکمه (labelیا locale-aware fallback) مسئول a11y است. DropdownMenuCheckboxItemدر ColumnVisibilityToggle خودrole="menuitemcheckbox"وaria-checkedمعنادار را تأمین میکند.- پس از انتخاب CSV/TSV، menu بسته میشود ولی هیچ live announcement خودکار نیست؛ برای دادهی بزرگ یک
Toastبا feedback نمایش دهید (به راهنمای استفاده مراجعه کنید). - در RTL،
align="end"رویDropdownMenuContentبه سمت start منطقی align میشود — physical right/left استفاده نشده.
کامپوننتهای مرتبط
- خود جدول → DataTable
- مقایسهی ردیفهای انتخابشده → TableComparisonView
- سلولهای inline (sparkline، trend، sentiment) → DataTableCells (در manifest)
سلهای جدول داده (DataTableCells)
مجموعه renderer سبک برای استفاده در کلون cell: ستون DataTable — Sparkline / Trend / Status / Sentiment / Flow / Progress / StatDelta.
نمای مقایسه جدولی (TableComparisonView)
نمای مقایسهای از چند ردیف انتخابشده — pivot 90° با metrics-as-rows × entities-as-columns + highlight اختلافات