@mamrp/components 1.4.3 → 1.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +192 -1
- package/dist/index.d.ts +192 -1
- package/dist/index.js +25 -12
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +25 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -372,39 +372,230 @@ interface DraggablePaperProps extends PaperProps {
|
|
|
372
372
|
}
|
|
373
373
|
declare function DraggablePaper({ handle, cancel, ...props }: DraggablePaperProps): React$1.JSX.Element;
|
|
374
374
|
|
|
375
|
+
/**
|
|
376
|
+
* Props کامپوننت DataTable
|
|
377
|
+
*
|
|
378
|
+
* این اینترفیس تمام گزینههای قابل تنظیم برای کامپوننت DataTable را تعریف میکند
|
|
379
|
+
* و مستقیماً با خروجی useTableState سازگار است
|
|
380
|
+
*
|
|
381
|
+
* @template T - نوع دادههای جدول (مثال: Car، User، Product)
|
|
382
|
+
*/
|
|
375
383
|
type DataTableProps<T extends Record<string, any>> = {
|
|
384
|
+
/** آرایه دادههای جدول */
|
|
376
385
|
data: T[];
|
|
386
|
+
/** تعریف ستونهای جدول */
|
|
377
387
|
columns: MRT_ColumnDef<T>[];
|
|
388
|
+
/** آیا جدول در حال بارگذاری است */
|
|
378
389
|
isLoading?: boolean;
|
|
390
|
+
/** آیا دادهها در حال بهروزرسانی هستند */
|
|
379
391
|
isRefetching?: boolean;
|
|
392
|
+
/** وضعیت صفحهبندی (مستقیماً از useTableState) */
|
|
380
393
|
pagination: MRT_PaginationState;
|
|
394
|
+
/** تابع تغییر صفحهبندی (setPagination از useTableState) */
|
|
381
395
|
onPaginationChange: (updater: MRT_PaginationState | ((old: MRT_PaginationState) => MRT_PaginationState)) => void;
|
|
396
|
+
/** تعداد کل رکوردها (از API response) */
|
|
382
397
|
totalRows: number;
|
|
398
|
+
/** فعالسازی صفحهبندی دستی (پیشفرض: true) */
|
|
383
399
|
manualPagination?: boolean;
|
|
400
|
+
/** فیلترهای ستون (columnFilters از useTableState) */
|
|
384
401
|
columnFilters?: MRT_ColumnFiltersState;
|
|
402
|
+
/** تابع تغییر فیلترهای ستون */
|
|
385
403
|
onColumnFiltersChange?: (filters: MRT_ColumnFiltersState | ((old: MRT_ColumnFiltersState) => MRT_ColumnFiltersState)) => void;
|
|
404
|
+
/** فعالسازی فیلترینگ دستی (پیشفرض: true) */
|
|
386
405
|
manualFiltering?: boolean;
|
|
406
|
+
/** تابع پاک کردن فیلترها (clearFilters از useTableState) */
|
|
387
407
|
onClearFilters?: () => void;
|
|
408
|
+
/** نمایش دکمه پاک کردن فیلترها */
|
|
388
409
|
showClearFiltersButton?: boolean;
|
|
410
|
+
/** وضعیت مرتبسازی (sorting از useTableState) */
|
|
389
411
|
sorting?: MRT_SortingState;
|
|
412
|
+
/** تابع تغییر مرتبسازی (setSorting از useTableState) */
|
|
390
413
|
onSortingChange?: (sorting: MRT_SortingState | ((old: MRT_SortingState) => MRT_SortingState)) => void;
|
|
414
|
+
/** فعالسازی مرتبسازی دستی (پیشفرض: false) */
|
|
391
415
|
manualSorting?: boolean;
|
|
416
|
+
/** وضعیت نمایش ستونها (columnVisibility از useTableState) */
|
|
417
|
+
columnVisibility?: Record<string, boolean>;
|
|
418
|
+
/** تابع تغییر نمایش ستونها (setColumnVisibility از useTableState) */
|
|
419
|
+
onColumnVisibilityChange?: (visibility: Record<string, boolean> | ((old: Record<string, boolean>) => Record<string, boolean>)) => void;
|
|
420
|
+
/** ترتیب ستونها */
|
|
421
|
+
columnOrder?: string[];
|
|
422
|
+
/** تابع تغییر ترتیب ستونها */
|
|
423
|
+
onColumnOrderChange?: (order: string[] | ((old: string[]) => string[])) => void;
|
|
424
|
+
/** فعالسازی header چسبان */
|
|
392
425
|
enableStickyHeader?: boolean;
|
|
426
|
+
/** حداکثر ارتفاع جدول */
|
|
393
427
|
maxHeight?: string;
|
|
428
|
+
/** تراکم جدول */
|
|
394
429
|
density?: "comfortable" | "compact" | "spacious";
|
|
430
|
+
/** امکان تغییر ترتیب ستونها */
|
|
395
431
|
enableColumnOrdering?: boolean;
|
|
432
|
+
/** فعالسازی جستجوی سراسری */
|
|
396
433
|
enableGlobalFilter?: boolean;
|
|
434
|
+
/** فعالسازی انواع فیلتر ستون */
|
|
397
435
|
enableColumnFilterModes?: boolean;
|
|
436
|
+
/** فعالسازی انتخاب سطر */
|
|
398
437
|
enableRowSelection?: boolean;
|
|
438
|
+
/** وضعیت نمایش فیلترهای ستون */
|
|
439
|
+
showColumnFilters?: boolean;
|
|
440
|
+
/** تابع تغییر وضعیت نمایش فیلترها */
|
|
441
|
+
onShowColumnFiltersChange?: (updater: boolean | ((old: boolean) => boolean)) => void;
|
|
442
|
+
/** رندر کردن اکشنهای سفارشی بالای جدول */
|
|
399
443
|
renderTopToolbarCustomActions?: (props: {
|
|
400
444
|
table: any;
|
|
401
445
|
}) => React.ReactNode;
|
|
446
|
+
/** رندر کردن اکشنهای سفارشی پایین جدول */
|
|
402
447
|
renderBottomToolbarCustomActions?: (props: {
|
|
403
448
|
table: any;
|
|
404
449
|
}) => React.ReactNode;
|
|
450
|
+
/** گزینههای اضافی جدول */
|
|
405
451
|
tableOptions?: Partial<MRT_TableOptions<T>>;
|
|
452
|
+
/** لوکالیزیشن سفارشی */
|
|
406
453
|
localization?: Record<string, string>;
|
|
407
454
|
};
|
|
408
|
-
|
|
455
|
+
/**
|
|
456
|
+
* کامپوننت DataTable - جدول پیشرفته با قابلیتهای کامل
|
|
457
|
+
*
|
|
458
|
+
* این کامپوننت یک wrapper پیشرفته برای Material React Table است که:
|
|
459
|
+
* - مستقیماً با useTableState یکپارچه میشود
|
|
460
|
+
* - تمام ویژگیهای مدرن جدول را پشتیبانی میکند
|
|
461
|
+
* - لوکالیزیشن کامل فارسی دارد
|
|
462
|
+
* - بهینهسازی شده برای عملکرد بالا
|
|
463
|
+
*
|
|
464
|
+
* ## راهنمای استفاده با useTableState:
|
|
465
|
+
*
|
|
466
|
+
* ### مرحله 1: تنظیم useTableState
|
|
467
|
+
* ```tsx
|
|
468
|
+
* const tableState = useTableState("my-table", {
|
|
469
|
+
* initialPageSize: 25,
|
|
470
|
+
* debounceTime: 500,
|
|
471
|
+
* sortMapping: {
|
|
472
|
+
* name: "NameOrdering",
|
|
473
|
+
* status: "StatusOrdering"
|
|
474
|
+
* }
|
|
475
|
+
* });
|
|
476
|
+
* ```
|
|
477
|
+
*
|
|
478
|
+
* ### مرحله 2: فراخوانی API
|
|
479
|
+
* ```tsx
|
|
480
|
+
* const { data } = useGetData({
|
|
481
|
+
* PageNumber: tableState.pagination.pageIndex + 1,
|
|
482
|
+
* PageSize: tableState.pagination.pageSize,
|
|
483
|
+
* ...tableState.debouncedFiltring,
|
|
484
|
+
* ...tableState.mappedSorting,
|
|
485
|
+
* });
|
|
486
|
+
* ```
|
|
487
|
+
*
|
|
488
|
+
* ### مرحله 3: تعریف ستونها با فیلتر
|
|
489
|
+
* ```tsx
|
|
490
|
+
* const columns = useMemo<MRT_ColumnDef<DataType>[]>(() => [
|
|
491
|
+
* {
|
|
492
|
+
* accessorKey: "name",
|
|
493
|
+
* header: "نام",
|
|
494
|
+
* Filter: ({ column }) => (
|
|
495
|
+
* <FormInputText
|
|
496
|
+
* control={control}
|
|
497
|
+
* name="NameFiltering"
|
|
498
|
+
* placeholder="فیلتر نام"
|
|
499
|
+
* />
|
|
500
|
+
* ),
|
|
501
|
+
* },
|
|
502
|
+
* // سایر ستونها...
|
|
503
|
+
* ], [control]);
|
|
504
|
+
* ```
|
|
505
|
+
*
|
|
506
|
+
* ### مرحله 4: رندر DataTable
|
|
507
|
+
* ```tsx
|
|
508
|
+
* return (
|
|
509
|
+
* <DataTable
|
|
510
|
+
* data={data?.items || []}
|
|
511
|
+
* columns={columns}
|
|
512
|
+
* isLoading={isLoading}
|
|
513
|
+
* pagination={tableState.pagination}
|
|
514
|
+
* onPaginationChange={tableState.setPagination}
|
|
515
|
+
* totalRows={data?.totalRecords || 0}
|
|
516
|
+
* sorting={tableState.sorting}
|
|
517
|
+
* onSortingChange={tableState.setSorting}
|
|
518
|
+
* columnVisibility={tableState.columnVisibility}
|
|
519
|
+
* onColumnVisibilityChange={tableState.setColumnVisibility}
|
|
520
|
+
* showColumnFilters={showFilters}
|
|
521
|
+
* onShowColumnFiltersChange={setShowFilters}
|
|
522
|
+
* onClearFilters={handleClearFilters}
|
|
523
|
+
* manualSorting={true}
|
|
524
|
+
* />
|
|
525
|
+
* );
|
|
526
|
+
* ```
|
|
527
|
+
*
|
|
528
|
+
* ## ویژگیهای کلیدی:
|
|
529
|
+
*
|
|
530
|
+
* 📄 **صفحهبندی هوشمند**: صفحهبندی سمت سرور با همگامسازی خودکار
|
|
531
|
+
* 🔍 **فیلترینگ پیشرفته**: فیلترهای سفارشی با debouncing
|
|
532
|
+
* 🔀 **مرتبسازی قدرتمند**: مرتبسازی با نگاشت بکاند
|
|
533
|
+
* 👁️ **مدیریت ستونها**: نمایش/مخفی کردن ستونها با localStorage
|
|
534
|
+
* 🌍 **لوکالیزیشن**: پشتیبانی کامل از زبان فارسی
|
|
535
|
+
* ⚡ **بهینهسازی**: رندرینگ بهینه با useMemo
|
|
536
|
+
* 🎨 **قابل تنظیم**: ظاهر و رفتار کاملاً قابل تنظیم
|
|
537
|
+
*
|
|
538
|
+
* @template T - نوع دادههای جدول
|
|
539
|
+
*
|
|
540
|
+
* @example
|
|
541
|
+
* ```tsx
|
|
542
|
+
* // مثال کامل استفاده
|
|
543
|
+
* function UsersTable() {
|
|
544
|
+
* const { control, watch, reset } = useForm();
|
|
545
|
+
*
|
|
546
|
+
* const tableState = useTableState<UserFilter>("users-table", {
|
|
547
|
+
* initialPageSize: 50,
|
|
548
|
+
* watch,
|
|
549
|
+
* syncFormToFilters: true,
|
|
550
|
+
* sortMapping: {
|
|
551
|
+
* name: "NameOrdering",
|
|
552
|
+
* email: "EmailOrdering"
|
|
553
|
+
* }
|
|
554
|
+
* });
|
|
555
|
+
*
|
|
556
|
+
* const { data, isLoading } = useGetUsers({
|
|
557
|
+
* PageNumber: tableState.pagination.pageIndex + 1,
|
|
558
|
+
* PageSize: tableState.pagination.pageSize,
|
|
559
|
+
* ...tableState.debouncedFiltring,
|
|
560
|
+
* ...tableState.mappedSorting,
|
|
561
|
+
* });
|
|
562
|
+
*
|
|
563
|
+
* const columns = useMemo(() => [
|
|
564
|
+
* {
|
|
565
|
+
* accessorKey: "name",
|
|
566
|
+
* header: "نام کاربر",
|
|
567
|
+
* Filter: () => (
|
|
568
|
+
* <FormInputText
|
|
569
|
+
* control={control}
|
|
570
|
+
* name="NameFiltering"
|
|
571
|
+
* placeholder="جستجو نام"
|
|
572
|
+
* />
|
|
573
|
+
* ),
|
|
574
|
+
* }
|
|
575
|
+
* ], [control]);
|
|
576
|
+
*
|
|
577
|
+
* return (
|
|
578
|
+
* <DataTable
|
|
579
|
+
* data={data?.users || []}
|
|
580
|
+
* columns={columns}
|
|
581
|
+
* isLoading={isLoading}
|
|
582
|
+
* pagination={tableState.pagination}
|
|
583
|
+
* onPaginationChange={tableState.setPagination}
|
|
584
|
+
* totalRows={data?.totalCount || 0}
|
|
585
|
+
* sorting={tableState.sorting}
|
|
586
|
+
* onSortingChange={tableState.setSorting}
|
|
587
|
+
* columnVisibility={tableState.columnVisibility}
|
|
588
|
+
* onColumnVisibilityChange={tableState.setColumnVisibility}
|
|
589
|
+
* onClearFilters={() => {
|
|
590
|
+
* tableState.clearFilters();
|
|
591
|
+
* reset();
|
|
592
|
+
* }}
|
|
593
|
+
* manualSorting={true}
|
|
594
|
+
* />
|
|
595
|
+
* );
|
|
596
|
+
* }
|
|
597
|
+
* ```
|
|
598
|
+
*/
|
|
599
|
+
declare const DataTable: <T extends Record<string, any>>({ data, columns, isLoading, isRefetching, pagination, onPaginationChange, totalRows, manualPagination, columnFilters, onColumnFiltersChange, manualFiltering, onClearFilters, showClearFiltersButton, sorting, onSortingChange, manualSorting, columnVisibility, onColumnVisibilityChange, columnOrder, onColumnOrderChange, enableStickyHeader, maxHeight, density, enableColumnOrdering, enableGlobalFilter, enableColumnFilterModes, enableRowSelection, showColumnFilters, onShowColumnFiltersChange, renderTopToolbarCustomActions, renderBottomToolbarCustomActions, tableOptions, localization, }: DataTableProps<T>) => React$1.JSX.Element;
|
|
409
600
|
|
|
410
601
|
export { Page as Accordion, AdvancedSearchButton, ConfirmationDialog$1 as ConfirmationDialog, ConnectToBasculeButton, CustomCheckbox, CustomTimePicker, DataTable, DateFilter, DateFilterRange, DateMonthPicker, JalaliDatePicker$2 as DatePicker, JalaliDatePicker$1 as DateTimePicker, JalaliDateTimeRangePicker as DateTimeRangePicker, DraggablePaper, UploadImage as EnhancedUploadImage, FormInputNumber, FormInputText, HorizontalStepper, LicensePlate, JalaliDatePicker as MobileDateTimePicker, ConfirmationDialog as Modal, NestedSelect as NestedSelectort, NoResult, PaginationList, PatternTextField, RadioButton, SearchLicensePlate, MultipleSelectChip as Selector, SkeletonCard, SonarSpinner, SwitchButton, Table, UploadImage$1 as UploadImage };
|
package/dist/index.d.ts
CHANGED
|
@@ -372,39 +372,230 @@ interface DraggablePaperProps extends PaperProps {
|
|
|
372
372
|
}
|
|
373
373
|
declare function DraggablePaper({ handle, cancel, ...props }: DraggablePaperProps): React$1.JSX.Element;
|
|
374
374
|
|
|
375
|
+
/**
|
|
376
|
+
* Props کامپوننت DataTable
|
|
377
|
+
*
|
|
378
|
+
* این اینترفیس تمام گزینههای قابل تنظیم برای کامپوننت DataTable را تعریف میکند
|
|
379
|
+
* و مستقیماً با خروجی useTableState سازگار است
|
|
380
|
+
*
|
|
381
|
+
* @template T - نوع دادههای جدول (مثال: Car، User، Product)
|
|
382
|
+
*/
|
|
375
383
|
type DataTableProps<T extends Record<string, any>> = {
|
|
384
|
+
/** آرایه دادههای جدول */
|
|
376
385
|
data: T[];
|
|
386
|
+
/** تعریف ستونهای جدول */
|
|
377
387
|
columns: MRT_ColumnDef<T>[];
|
|
388
|
+
/** آیا جدول در حال بارگذاری است */
|
|
378
389
|
isLoading?: boolean;
|
|
390
|
+
/** آیا دادهها در حال بهروزرسانی هستند */
|
|
379
391
|
isRefetching?: boolean;
|
|
392
|
+
/** وضعیت صفحهبندی (مستقیماً از useTableState) */
|
|
380
393
|
pagination: MRT_PaginationState;
|
|
394
|
+
/** تابع تغییر صفحهبندی (setPagination از useTableState) */
|
|
381
395
|
onPaginationChange: (updater: MRT_PaginationState | ((old: MRT_PaginationState) => MRT_PaginationState)) => void;
|
|
396
|
+
/** تعداد کل رکوردها (از API response) */
|
|
382
397
|
totalRows: number;
|
|
398
|
+
/** فعالسازی صفحهبندی دستی (پیشفرض: true) */
|
|
383
399
|
manualPagination?: boolean;
|
|
400
|
+
/** فیلترهای ستون (columnFilters از useTableState) */
|
|
384
401
|
columnFilters?: MRT_ColumnFiltersState;
|
|
402
|
+
/** تابع تغییر فیلترهای ستون */
|
|
385
403
|
onColumnFiltersChange?: (filters: MRT_ColumnFiltersState | ((old: MRT_ColumnFiltersState) => MRT_ColumnFiltersState)) => void;
|
|
404
|
+
/** فعالسازی فیلترینگ دستی (پیشفرض: true) */
|
|
386
405
|
manualFiltering?: boolean;
|
|
406
|
+
/** تابع پاک کردن فیلترها (clearFilters از useTableState) */
|
|
387
407
|
onClearFilters?: () => void;
|
|
408
|
+
/** نمایش دکمه پاک کردن فیلترها */
|
|
388
409
|
showClearFiltersButton?: boolean;
|
|
410
|
+
/** وضعیت مرتبسازی (sorting از useTableState) */
|
|
389
411
|
sorting?: MRT_SortingState;
|
|
412
|
+
/** تابع تغییر مرتبسازی (setSorting از useTableState) */
|
|
390
413
|
onSortingChange?: (sorting: MRT_SortingState | ((old: MRT_SortingState) => MRT_SortingState)) => void;
|
|
414
|
+
/** فعالسازی مرتبسازی دستی (پیشفرض: false) */
|
|
391
415
|
manualSorting?: boolean;
|
|
416
|
+
/** وضعیت نمایش ستونها (columnVisibility از useTableState) */
|
|
417
|
+
columnVisibility?: Record<string, boolean>;
|
|
418
|
+
/** تابع تغییر نمایش ستونها (setColumnVisibility از useTableState) */
|
|
419
|
+
onColumnVisibilityChange?: (visibility: Record<string, boolean> | ((old: Record<string, boolean>) => Record<string, boolean>)) => void;
|
|
420
|
+
/** ترتیب ستونها */
|
|
421
|
+
columnOrder?: string[];
|
|
422
|
+
/** تابع تغییر ترتیب ستونها */
|
|
423
|
+
onColumnOrderChange?: (order: string[] | ((old: string[]) => string[])) => void;
|
|
424
|
+
/** فعالسازی header چسبان */
|
|
392
425
|
enableStickyHeader?: boolean;
|
|
426
|
+
/** حداکثر ارتفاع جدول */
|
|
393
427
|
maxHeight?: string;
|
|
428
|
+
/** تراکم جدول */
|
|
394
429
|
density?: "comfortable" | "compact" | "spacious";
|
|
430
|
+
/** امکان تغییر ترتیب ستونها */
|
|
395
431
|
enableColumnOrdering?: boolean;
|
|
432
|
+
/** فعالسازی جستجوی سراسری */
|
|
396
433
|
enableGlobalFilter?: boolean;
|
|
434
|
+
/** فعالسازی انواع فیلتر ستون */
|
|
397
435
|
enableColumnFilterModes?: boolean;
|
|
436
|
+
/** فعالسازی انتخاب سطر */
|
|
398
437
|
enableRowSelection?: boolean;
|
|
438
|
+
/** وضعیت نمایش فیلترهای ستون */
|
|
439
|
+
showColumnFilters?: boolean;
|
|
440
|
+
/** تابع تغییر وضعیت نمایش فیلترها */
|
|
441
|
+
onShowColumnFiltersChange?: (updater: boolean | ((old: boolean) => boolean)) => void;
|
|
442
|
+
/** رندر کردن اکشنهای سفارشی بالای جدول */
|
|
399
443
|
renderTopToolbarCustomActions?: (props: {
|
|
400
444
|
table: any;
|
|
401
445
|
}) => React.ReactNode;
|
|
446
|
+
/** رندر کردن اکشنهای سفارشی پایین جدول */
|
|
402
447
|
renderBottomToolbarCustomActions?: (props: {
|
|
403
448
|
table: any;
|
|
404
449
|
}) => React.ReactNode;
|
|
450
|
+
/** گزینههای اضافی جدول */
|
|
405
451
|
tableOptions?: Partial<MRT_TableOptions<T>>;
|
|
452
|
+
/** لوکالیزیشن سفارشی */
|
|
406
453
|
localization?: Record<string, string>;
|
|
407
454
|
};
|
|
408
|
-
|
|
455
|
+
/**
|
|
456
|
+
* کامپوننت DataTable - جدول پیشرفته با قابلیتهای کامل
|
|
457
|
+
*
|
|
458
|
+
* این کامپوننت یک wrapper پیشرفته برای Material React Table است که:
|
|
459
|
+
* - مستقیماً با useTableState یکپارچه میشود
|
|
460
|
+
* - تمام ویژگیهای مدرن جدول را پشتیبانی میکند
|
|
461
|
+
* - لوکالیزیشن کامل فارسی دارد
|
|
462
|
+
* - بهینهسازی شده برای عملکرد بالا
|
|
463
|
+
*
|
|
464
|
+
* ## راهنمای استفاده با useTableState:
|
|
465
|
+
*
|
|
466
|
+
* ### مرحله 1: تنظیم useTableState
|
|
467
|
+
* ```tsx
|
|
468
|
+
* const tableState = useTableState("my-table", {
|
|
469
|
+
* initialPageSize: 25,
|
|
470
|
+
* debounceTime: 500,
|
|
471
|
+
* sortMapping: {
|
|
472
|
+
* name: "NameOrdering",
|
|
473
|
+
* status: "StatusOrdering"
|
|
474
|
+
* }
|
|
475
|
+
* });
|
|
476
|
+
* ```
|
|
477
|
+
*
|
|
478
|
+
* ### مرحله 2: فراخوانی API
|
|
479
|
+
* ```tsx
|
|
480
|
+
* const { data } = useGetData({
|
|
481
|
+
* PageNumber: tableState.pagination.pageIndex + 1,
|
|
482
|
+
* PageSize: tableState.pagination.pageSize,
|
|
483
|
+
* ...tableState.debouncedFiltring,
|
|
484
|
+
* ...tableState.mappedSorting,
|
|
485
|
+
* });
|
|
486
|
+
* ```
|
|
487
|
+
*
|
|
488
|
+
* ### مرحله 3: تعریف ستونها با فیلتر
|
|
489
|
+
* ```tsx
|
|
490
|
+
* const columns = useMemo<MRT_ColumnDef<DataType>[]>(() => [
|
|
491
|
+
* {
|
|
492
|
+
* accessorKey: "name",
|
|
493
|
+
* header: "نام",
|
|
494
|
+
* Filter: ({ column }) => (
|
|
495
|
+
* <FormInputText
|
|
496
|
+
* control={control}
|
|
497
|
+
* name="NameFiltering"
|
|
498
|
+
* placeholder="فیلتر نام"
|
|
499
|
+
* />
|
|
500
|
+
* ),
|
|
501
|
+
* },
|
|
502
|
+
* // سایر ستونها...
|
|
503
|
+
* ], [control]);
|
|
504
|
+
* ```
|
|
505
|
+
*
|
|
506
|
+
* ### مرحله 4: رندر DataTable
|
|
507
|
+
* ```tsx
|
|
508
|
+
* return (
|
|
509
|
+
* <DataTable
|
|
510
|
+
* data={data?.items || []}
|
|
511
|
+
* columns={columns}
|
|
512
|
+
* isLoading={isLoading}
|
|
513
|
+
* pagination={tableState.pagination}
|
|
514
|
+
* onPaginationChange={tableState.setPagination}
|
|
515
|
+
* totalRows={data?.totalRecords || 0}
|
|
516
|
+
* sorting={tableState.sorting}
|
|
517
|
+
* onSortingChange={tableState.setSorting}
|
|
518
|
+
* columnVisibility={tableState.columnVisibility}
|
|
519
|
+
* onColumnVisibilityChange={tableState.setColumnVisibility}
|
|
520
|
+
* showColumnFilters={showFilters}
|
|
521
|
+
* onShowColumnFiltersChange={setShowFilters}
|
|
522
|
+
* onClearFilters={handleClearFilters}
|
|
523
|
+
* manualSorting={true}
|
|
524
|
+
* />
|
|
525
|
+
* );
|
|
526
|
+
* ```
|
|
527
|
+
*
|
|
528
|
+
* ## ویژگیهای کلیدی:
|
|
529
|
+
*
|
|
530
|
+
* 📄 **صفحهبندی هوشمند**: صفحهبندی سمت سرور با همگامسازی خودکار
|
|
531
|
+
* 🔍 **فیلترینگ پیشرفته**: فیلترهای سفارشی با debouncing
|
|
532
|
+
* 🔀 **مرتبسازی قدرتمند**: مرتبسازی با نگاشت بکاند
|
|
533
|
+
* 👁️ **مدیریت ستونها**: نمایش/مخفی کردن ستونها با localStorage
|
|
534
|
+
* 🌍 **لوکالیزیشن**: پشتیبانی کامل از زبان فارسی
|
|
535
|
+
* ⚡ **بهینهسازی**: رندرینگ بهینه با useMemo
|
|
536
|
+
* 🎨 **قابل تنظیم**: ظاهر و رفتار کاملاً قابل تنظیم
|
|
537
|
+
*
|
|
538
|
+
* @template T - نوع دادههای جدول
|
|
539
|
+
*
|
|
540
|
+
* @example
|
|
541
|
+
* ```tsx
|
|
542
|
+
* // مثال کامل استفاده
|
|
543
|
+
* function UsersTable() {
|
|
544
|
+
* const { control, watch, reset } = useForm();
|
|
545
|
+
*
|
|
546
|
+
* const tableState = useTableState<UserFilter>("users-table", {
|
|
547
|
+
* initialPageSize: 50,
|
|
548
|
+
* watch,
|
|
549
|
+
* syncFormToFilters: true,
|
|
550
|
+
* sortMapping: {
|
|
551
|
+
* name: "NameOrdering",
|
|
552
|
+
* email: "EmailOrdering"
|
|
553
|
+
* }
|
|
554
|
+
* });
|
|
555
|
+
*
|
|
556
|
+
* const { data, isLoading } = useGetUsers({
|
|
557
|
+
* PageNumber: tableState.pagination.pageIndex + 1,
|
|
558
|
+
* PageSize: tableState.pagination.pageSize,
|
|
559
|
+
* ...tableState.debouncedFiltring,
|
|
560
|
+
* ...tableState.mappedSorting,
|
|
561
|
+
* });
|
|
562
|
+
*
|
|
563
|
+
* const columns = useMemo(() => [
|
|
564
|
+
* {
|
|
565
|
+
* accessorKey: "name",
|
|
566
|
+
* header: "نام کاربر",
|
|
567
|
+
* Filter: () => (
|
|
568
|
+
* <FormInputText
|
|
569
|
+
* control={control}
|
|
570
|
+
* name="NameFiltering"
|
|
571
|
+
* placeholder="جستجو نام"
|
|
572
|
+
* />
|
|
573
|
+
* ),
|
|
574
|
+
* }
|
|
575
|
+
* ], [control]);
|
|
576
|
+
*
|
|
577
|
+
* return (
|
|
578
|
+
* <DataTable
|
|
579
|
+
* data={data?.users || []}
|
|
580
|
+
* columns={columns}
|
|
581
|
+
* isLoading={isLoading}
|
|
582
|
+
* pagination={tableState.pagination}
|
|
583
|
+
* onPaginationChange={tableState.setPagination}
|
|
584
|
+
* totalRows={data?.totalCount || 0}
|
|
585
|
+
* sorting={tableState.sorting}
|
|
586
|
+
* onSortingChange={tableState.setSorting}
|
|
587
|
+
* columnVisibility={tableState.columnVisibility}
|
|
588
|
+
* onColumnVisibilityChange={tableState.setColumnVisibility}
|
|
589
|
+
* onClearFilters={() => {
|
|
590
|
+
* tableState.clearFilters();
|
|
591
|
+
* reset();
|
|
592
|
+
* }}
|
|
593
|
+
* manualSorting={true}
|
|
594
|
+
* />
|
|
595
|
+
* );
|
|
596
|
+
* }
|
|
597
|
+
* ```
|
|
598
|
+
*/
|
|
599
|
+
declare const DataTable: <T extends Record<string, any>>({ data, columns, isLoading, isRefetching, pagination, onPaginationChange, totalRows, manualPagination, columnFilters, onColumnFiltersChange, manualFiltering, onClearFilters, showClearFiltersButton, sorting, onSortingChange, manualSorting, columnVisibility, onColumnVisibilityChange, columnOrder, onColumnOrderChange, enableStickyHeader, maxHeight, density, enableColumnOrdering, enableGlobalFilter, enableColumnFilterModes, enableRowSelection, showColumnFilters, onShowColumnFiltersChange, renderTopToolbarCustomActions, renderBottomToolbarCustomActions, tableOptions, localization, }: DataTableProps<T>) => React$1.JSX.Element;
|
|
409
600
|
|
|
410
601
|
export { Page as Accordion, AdvancedSearchButton, ConfirmationDialog$1 as ConfirmationDialog, ConnectToBasculeButton, CustomCheckbox, CustomTimePicker, DataTable, DateFilter, DateFilterRange, DateMonthPicker, JalaliDatePicker$2 as DatePicker, JalaliDatePicker$1 as DateTimePicker, JalaliDateTimeRangePicker as DateTimeRangePicker, DraggablePaper, UploadImage as EnhancedUploadImage, FormInputNumber, FormInputText, HorizontalStepper, LicensePlate, JalaliDatePicker as MobileDateTimePicker, ConfirmationDialog as Modal, NestedSelect as NestedSelectort, NoResult, PaginationList, PatternTextField, RadioButton, SearchLicensePlate, MultipleSelectChip as Selector, SkeletonCard, SonarSpinner, SwitchButton, Table, UploadImage$1 as UploadImage };
|
package/dist/index.js
CHANGED
|
@@ -4815,6 +4815,10 @@ var DataTable = ({
|
|
|
4815
4815
|
sorting = [],
|
|
4816
4816
|
onSortingChange,
|
|
4817
4817
|
manualSorting = false,
|
|
4818
|
+
columnVisibility = {},
|
|
4819
|
+
onColumnVisibilityChange,
|
|
4820
|
+
columnOrder = [],
|
|
4821
|
+
onColumnOrderChange,
|
|
4818
4822
|
enableStickyHeader = true,
|
|
4819
4823
|
maxHeight = "calc(100vh - 200px)",
|
|
4820
4824
|
density = "compact",
|
|
@@ -4822,6 +4826,8 @@ var DataTable = ({
|
|
|
4822
4826
|
enableGlobalFilter = false,
|
|
4823
4827
|
enableColumnFilterModes = false,
|
|
4824
4828
|
enableRowSelection = false,
|
|
4829
|
+
showColumnFilters,
|
|
4830
|
+
onShowColumnFiltersChange,
|
|
4825
4831
|
renderTopToolbarCustomActions,
|
|
4826
4832
|
renderBottomToolbarCustomActions,
|
|
4827
4833
|
tableOptions = {},
|
|
@@ -4830,8 +4836,8 @@ var DataTable = ({
|
|
|
4830
4836
|
const memoizedColumns = (0, import_react32.useMemo)(() => columns, [columns]);
|
|
4831
4837
|
const memoizedData = (0, import_react32.useMemo)(() => data, [data]);
|
|
4832
4838
|
const defaultRenderTopToolbarCustomActions = ({ table: table2 }) => {
|
|
4833
|
-
const
|
|
4834
|
-
if (!
|
|
4839
|
+
const currentShowFilters = showColumnFilters !== void 0 ? showColumnFilters : table2.getState().showColumnFilters;
|
|
4840
|
+
if (!currentShowFilters || !showClearFiltersButton || !onClearFilters) return null;
|
|
4835
4841
|
return /* @__PURE__ */ React.createElement(import_material30.Box, { sx: { width: "100%" } }, /* @__PURE__ */ React.createElement(
|
|
4836
4842
|
import_material30.Box,
|
|
4837
4843
|
{
|
|
@@ -4854,32 +4860,39 @@ var DataTable = ({
|
|
|
4854
4860
|
columns: memoizedColumns,
|
|
4855
4861
|
data: memoizedData,
|
|
4856
4862
|
localization,
|
|
4857
|
-
//
|
|
4863
|
+
// === صفحهبندی ===
|
|
4858
4864
|
manualPagination,
|
|
4859
4865
|
onPaginationChange,
|
|
4860
4866
|
pageCount: manualPagination ? Math.ceil(totalRows / pagination.pageSize) : void 0,
|
|
4861
4867
|
rowCount: totalRows ?? 0,
|
|
4862
|
-
//
|
|
4868
|
+
// === فیلترینگ ===
|
|
4863
4869
|
manualFiltering,
|
|
4864
4870
|
onColumnFiltersChange,
|
|
4865
4871
|
enableColumnFilterModes,
|
|
4866
4872
|
enableGlobalFilter,
|
|
4867
|
-
//
|
|
4873
|
+
// === مرتبسازی ===
|
|
4868
4874
|
manualSorting,
|
|
4869
4875
|
onSortingChange,
|
|
4870
|
-
//
|
|
4876
|
+
// === ویژگیها ===
|
|
4871
4877
|
enableColumnOrdering,
|
|
4872
4878
|
enableRowSelection,
|
|
4873
4879
|
enableStickyHeader,
|
|
4874
|
-
//
|
|
4880
|
+
// === وضعیت جدول ===
|
|
4875
4881
|
state: {
|
|
4876
4882
|
pagination,
|
|
4877
|
-
columnFilters,
|
|
4883
|
+
// columnFilters, // غیرفعال شده - فیلترها از طریق useTableState مدیریت میشوند
|
|
4878
4884
|
sorting,
|
|
4885
|
+
columnVisibility,
|
|
4886
|
+
...showColumnFilters !== void 0 && { showColumnFilters },
|
|
4887
|
+
...columnOrder && Array.isArray(columnOrder) && columnOrder.length > 0 && { columnOrder },
|
|
4879
4888
|
isLoading,
|
|
4880
4889
|
showProgressBars: isRefetching
|
|
4881
4890
|
},
|
|
4882
|
-
//
|
|
4891
|
+
// === Event Handlers ===
|
|
4892
|
+
onColumnVisibilityChange,
|
|
4893
|
+
...onShowColumnFiltersChange && { onShowColumnFiltersChange },
|
|
4894
|
+
...onColumnOrderChange && { onColumnOrderChange },
|
|
4895
|
+
// === استایلدهی ===
|
|
4883
4896
|
muiTablePaperProps: { sx: { direction: "ltr" } },
|
|
4884
4897
|
muiTableBodyCellProps: { sx: { textAlign: "center" } },
|
|
4885
4898
|
muiTableHeadCellProps: {
|
|
@@ -4895,14 +4908,14 @@ var DataTable = ({
|
|
|
4895
4908
|
maxHeight
|
|
4896
4909
|
}
|
|
4897
4910
|
},
|
|
4898
|
-
//
|
|
4911
|
+
// === حالت اولیه ===
|
|
4899
4912
|
initialState: {
|
|
4900
4913
|
density
|
|
4901
4914
|
},
|
|
4902
|
-
//
|
|
4915
|
+
// === تولبارهای سفارشی ===
|
|
4903
4916
|
renderTopToolbarCustomActions: renderTopToolbarCustomActions || defaultRenderTopToolbarCustomActions,
|
|
4904
4917
|
renderBottomToolbarCustomActions,
|
|
4905
|
-
//
|
|
4918
|
+
// 🔧 اعمال تنظیمات اضافی
|
|
4906
4919
|
...tableOptions
|
|
4907
4920
|
});
|
|
4908
4921
|
return /* @__PURE__ */ React.createElement(import_material_react_table.MaterialReactTable, { table });
|