@ceed/ads 1.7.4 → 1.7.6-next.1
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/components/DataTable/types.d.ts +7 -0
- package/dist/index.cjs +62 -18
- package/dist/index.js +62 -18
- package/framer/index.js +29 -29
- package/package.json +3 -2
|
@@ -140,6 +140,13 @@ export type DataTableProps<T extends Record<PropertyKey, any>, GetId extends ((r
|
|
|
140
140
|
* MUI에는 없는 인터페이스지만 Total Select 기능이 추가되었기 때문에 추가해야했다.
|
|
141
141
|
*/
|
|
142
142
|
isTotalSelected?: boolean) => void;
|
|
143
|
+
/**
|
|
144
|
+
* row별로 선택 가능 여부를 결정하는 함수
|
|
145
|
+
*/
|
|
146
|
+
isRowSelectable?: (params: {
|
|
147
|
+
row: T;
|
|
148
|
+
id: InferredIdType<T, GetId>;
|
|
149
|
+
}) => boolean;
|
|
143
150
|
disableSelectionOnClick?: boolean;
|
|
144
151
|
initialState?: Partial<{
|
|
145
152
|
sorting: Partial<{
|
package/dist/index.cjs
CHANGED
|
@@ -3522,7 +3522,8 @@ function useDataTableRenderer({
|
|
|
3522
3522
|
onSelectionModelChange,
|
|
3523
3523
|
editMode,
|
|
3524
3524
|
getId: _getId,
|
|
3525
|
-
isTotalSelected: _isTotalSelected
|
|
3525
|
+
isTotalSelected: _isTotalSelected,
|
|
3526
|
+
isRowSelectable
|
|
3526
3527
|
}) {
|
|
3527
3528
|
const [focusedRowId, setFocusedRowId] = (0, import_react25.useState)(null);
|
|
3528
3529
|
const [sortModel, setSortModel] = useControlledState(
|
|
@@ -3598,14 +3599,27 @@ function useDataTableRenderer({
|
|
|
3598
3599
|
() => !pagination || paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
|
|
3599
3600
|
[rows, page, pageSize, paginationMode, pagination]
|
|
3600
3601
|
);
|
|
3602
|
+
const selectableDataInPage = (0, import_react25.useMemo)(
|
|
3603
|
+
() => dataInPage.filter((row, i) => {
|
|
3604
|
+
if (!isRowSelectable) return true;
|
|
3605
|
+
return isRowSelectable({ row, id: getId(row, i) });
|
|
3606
|
+
}),
|
|
3607
|
+
[dataInPage, isRowSelectable, getId]
|
|
3608
|
+
);
|
|
3601
3609
|
const isAllSelected = (0, import_react25.useMemo)(
|
|
3602
|
-
() =>
|
|
3603
|
-
|
|
3610
|
+
() => selectableDataInPage.length > 0 && selectableDataInPage.every(
|
|
3611
|
+
(row, i) => selectedModelSet.has(getId(row, i))
|
|
3612
|
+
),
|
|
3613
|
+
[selectableDataInPage, selectedModelSet, getId]
|
|
3604
3614
|
);
|
|
3605
3615
|
const rowCount = totalRowsProp || rows.length;
|
|
3616
|
+
const selectableRowCount = (0, import_react25.useMemo)(() => {
|
|
3617
|
+
if (!isRowSelectable) return rowCount;
|
|
3618
|
+
return rows.filter((row, i) => isRowSelectable({ row, id: getId(row, i) })).length;
|
|
3619
|
+
}, [rows, isRowSelectable, getId, rowCount]);
|
|
3606
3620
|
const isTotalSelected = (0, import_react25.useMemo)(
|
|
3607
|
-
() => _isTotalSelected ?? (
|
|
3608
|
-
[_isTotalSelected, selectionModel,
|
|
3621
|
+
() => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
|
|
3622
|
+
[_isTotalSelected, selectionModel, selectableRowCount]
|
|
3609
3623
|
);
|
|
3610
3624
|
const columnWidths = useColumnWidths(columnsByField);
|
|
3611
3625
|
const getWidth = (0, import_react25.useCallback)(
|
|
@@ -3701,9 +3715,10 @@ function useDataTableRenderer({
|
|
|
3701
3715
|
}, [page, rowCount, pageSize, handlePageChange]);
|
|
3702
3716
|
(0, import_react25.useEffect)(() => {
|
|
3703
3717
|
onSelectionModelChange?.([]);
|
|
3704
|
-
}, [page]);
|
|
3718
|
+
}, [page, onSelectionModelChange]);
|
|
3705
3719
|
return {
|
|
3706
3720
|
rowCount,
|
|
3721
|
+
selectableRowCount,
|
|
3707
3722
|
page,
|
|
3708
3723
|
pageSize,
|
|
3709
3724
|
onPaginationModelChange: handlePageChange,
|
|
@@ -3719,13 +3734,22 @@ function useDataTableRenderer({
|
|
|
3719
3734
|
(model) => selectedModelSet.has(model),
|
|
3720
3735
|
[selectedModelSet]
|
|
3721
3736
|
),
|
|
3737
|
+
isRowSelectable: (0, import_react25.useCallback)(
|
|
3738
|
+
(rowId, row) => {
|
|
3739
|
+
if (!isRowSelectable) return true;
|
|
3740
|
+
return isRowSelectable({ row, id: rowId });
|
|
3741
|
+
},
|
|
3742
|
+
[isRowSelectable]
|
|
3743
|
+
),
|
|
3722
3744
|
focusedRowId,
|
|
3723
3745
|
onRowFocus: (0, import_react25.useCallback)((rowId) => {
|
|
3724
3746
|
setFocusedRowId(rowId);
|
|
3725
3747
|
}, []),
|
|
3726
3748
|
onAllCheckboxChange: (0, import_react25.useCallback)(() => {
|
|
3727
|
-
onSelectionModelChange?.(
|
|
3728
|
-
|
|
3749
|
+
onSelectionModelChange?.(
|
|
3750
|
+
isAllSelected ? [] : selectableDataInPage.map(getId)
|
|
3751
|
+
);
|
|
3752
|
+
}, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
|
|
3729
3753
|
onCheckboxChange: (0, import_react25.useCallback)(
|
|
3730
3754
|
(event, selectedModel) => {
|
|
3731
3755
|
if (selectedModelSet.has(selectedModel)) {
|
|
@@ -3742,11 +3766,15 @@ function useDataTableRenderer({
|
|
|
3742
3766
|
),
|
|
3743
3767
|
columns,
|
|
3744
3768
|
onTotalSelect: (0, import_react25.useCallback)(() => {
|
|
3769
|
+
const selectableRows = rows.filter((row, i) => {
|
|
3770
|
+
if (!isRowSelectable) return true;
|
|
3771
|
+
return isRowSelectable({ row, id: getId(row, i) });
|
|
3772
|
+
});
|
|
3745
3773
|
onSelectionModelChange?.(
|
|
3746
|
-
isTotalSelected ? [] :
|
|
3774
|
+
isTotalSelected ? [] : selectableRows.map(getId),
|
|
3747
3775
|
!isTotalSelected
|
|
3748
3776
|
);
|
|
3749
|
-
}, [isTotalSelected, rows, onSelectionModelChange, getId])
|
|
3777
|
+
}, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
|
|
3750
3778
|
};
|
|
3751
3779
|
}
|
|
3752
3780
|
function Component(props, apiRef) {
|
|
@@ -3756,6 +3784,7 @@ function Component(props, apiRef) {
|
|
|
3756
3784
|
editMode,
|
|
3757
3785
|
selectionModel,
|
|
3758
3786
|
onSelectionModelChange,
|
|
3787
|
+
isRowSelectable,
|
|
3759
3788
|
disableSelectionOnClick,
|
|
3760
3789
|
onRowClick,
|
|
3761
3790
|
pinnedColumns,
|
|
@@ -3803,10 +3832,12 @@ function Component(props, apiRef) {
|
|
|
3803
3832
|
columns,
|
|
3804
3833
|
isAllSelected,
|
|
3805
3834
|
isSelectedRow,
|
|
3835
|
+
isRowSelectable: isRowSelectableCheck,
|
|
3806
3836
|
onAllCheckboxChange,
|
|
3807
3837
|
onCheckboxChange,
|
|
3808
3838
|
getId,
|
|
3809
3839
|
rowCount,
|
|
3840
|
+
selectableRowCount,
|
|
3810
3841
|
page,
|
|
3811
3842
|
pageSize,
|
|
3812
3843
|
onPaginationModelChange,
|
|
@@ -3832,9 +3863,15 @@ function Component(props, apiRef) {
|
|
|
3832
3863
|
const getRowClickHandler = (0, import_react25.useCallback)(
|
|
3833
3864
|
(row, rowId) => (e) => {
|
|
3834
3865
|
onRowClick?.({ row, rowId }, e);
|
|
3835
|
-
checkboxSelection && !disableSelectionOnClick && onCheckboxChange(e, rowId);
|
|
3866
|
+
checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
|
|
3836
3867
|
},
|
|
3837
|
-
[
|
|
3868
|
+
[
|
|
3869
|
+
onRowClick,
|
|
3870
|
+
checkboxSelection,
|
|
3871
|
+
disableSelectionOnClick,
|
|
3872
|
+
onCheckboxChange,
|
|
3873
|
+
isRowSelectableCheck
|
|
3874
|
+
]
|
|
3838
3875
|
);
|
|
3839
3876
|
const getRowFocusHandler = (0, import_react25.useCallback)(
|
|
3840
3877
|
(rowId) => () => {
|
|
@@ -3849,10 +3886,12 @@ function Component(props, apiRef) {
|
|
|
3849
3886
|
[]
|
|
3850
3887
|
);
|
|
3851
3888
|
const getCheckboxChangeHandler = (0, import_react25.useCallback)(
|
|
3852
|
-
(rowId) => (e) => {
|
|
3853
|
-
|
|
3889
|
+
(rowId, row) => (e) => {
|
|
3890
|
+
if (isRowSelectableCheck(rowId, row)) {
|
|
3891
|
+
onCheckboxChange(e, rowId);
|
|
3892
|
+
}
|
|
3854
3893
|
},
|
|
3855
|
-
[onCheckboxChange]
|
|
3894
|
+
[onCheckboxChange, isRowSelectableCheck]
|
|
3856
3895
|
);
|
|
3857
3896
|
(0, import_react25.useImperativeHandle)(apiRef, () => ({
|
|
3858
3897
|
getRowIndexRelativeToVisibleRows(rowId) {
|
|
@@ -3890,7 +3929,7 @@ function Component(props, apiRef) {
|
|
|
3890
3929
|
justifyContent: "space-between",
|
|
3891
3930
|
alignItems: "center"
|
|
3892
3931
|
},
|
|
3893
|
-
!!checkboxSelection && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ import_react25.default.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(
|
|
3932
|
+
!!checkboxSelection && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ import_react25.default.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(selectableRowCount), " items")), isTotalSelected && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectableRowCount), " items are selected."), /* @__PURE__ */ import_react25.default.createElement(
|
|
3894
3933
|
Button_default,
|
|
3895
3934
|
{
|
|
3896
3935
|
size: "sm",
|
|
@@ -3935,6 +3974,7 @@ function Component(props, apiRef) {
|
|
|
3935
3974
|
onChange: onAllCheckboxChange,
|
|
3936
3975
|
checked: isAllSelected,
|
|
3937
3976
|
indeterminate: (selectionModel || []).length > 0 && !isAllSelected,
|
|
3977
|
+
disabled: dataInPage.length > 0 && !selectableRowCount,
|
|
3938
3978
|
...checkboxProps
|
|
3939
3979
|
}
|
|
3940
3980
|
)
|
|
@@ -3954,7 +3994,9 @@ function Component(props, apiRef) {
|
|
|
3954
3994
|
ref: tableBodyRef,
|
|
3955
3995
|
style: {
|
|
3956
3996
|
height: `${totalSize}px`
|
|
3957
|
-
}
|
|
3997
|
+
},
|
|
3998
|
+
role: "rowgroup",
|
|
3999
|
+
"aria-label": "DataTableBody"
|
|
3958
4000
|
},
|
|
3959
4001
|
!!loading && /* @__PURE__ */ import_react25.default.createElement(OverlayWrapper, null, /* @__PURE__ */ import_react25.default.createElement(
|
|
3960
4002
|
"td",
|
|
@@ -3989,6 +4031,7 @@ function Component(props, apiRef) {
|
|
|
3989
4031
|
key: virtualizedRow.key,
|
|
3990
4032
|
"data-row-id": rowId,
|
|
3991
4033
|
"data-index": rowIndex,
|
|
4034
|
+
"aria-rowindex": rowIndex + 1,
|
|
3992
4035
|
role: checkboxSelection && !disableSelectionOnClick ? "checkbox" : void 0,
|
|
3993
4036
|
tabIndex: focusedRowId === rowId ? 0 : -1,
|
|
3994
4037
|
onClick: getRowClickHandler(row, rowId),
|
|
@@ -4012,8 +4055,9 @@ function Component(props, apiRef) {
|
|
|
4012
4055
|
RenderCheckbox,
|
|
4013
4056
|
{
|
|
4014
4057
|
onClick: getCheckboxClickHandler(),
|
|
4015
|
-
onChange: getCheckboxChangeHandler(rowId),
|
|
4058
|
+
onChange: getCheckboxChangeHandler(rowId, row),
|
|
4016
4059
|
checked: isSelectedRow(rowId),
|
|
4060
|
+
disabled: !isRowSelectableCheck(rowId, row),
|
|
4017
4061
|
...checkboxProps
|
|
4018
4062
|
}
|
|
4019
4063
|
)
|
package/dist/index.js
CHANGED
|
@@ -3479,7 +3479,8 @@ function useDataTableRenderer({
|
|
|
3479
3479
|
onSelectionModelChange,
|
|
3480
3480
|
editMode,
|
|
3481
3481
|
getId: _getId,
|
|
3482
|
-
isTotalSelected: _isTotalSelected
|
|
3482
|
+
isTotalSelected: _isTotalSelected,
|
|
3483
|
+
isRowSelectable
|
|
3483
3484
|
}) {
|
|
3484
3485
|
const [focusedRowId, setFocusedRowId] = useState6(null);
|
|
3485
3486
|
const [sortModel, setSortModel] = useControlledState(
|
|
@@ -3555,14 +3556,27 @@ function useDataTableRenderer({
|
|
|
3555
3556
|
() => !pagination || paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
|
|
3556
3557
|
[rows, page, pageSize, paginationMode, pagination]
|
|
3557
3558
|
);
|
|
3559
|
+
const selectableDataInPage = useMemo8(
|
|
3560
|
+
() => dataInPage.filter((row, i) => {
|
|
3561
|
+
if (!isRowSelectable) return true;
|
|
3562
|
+
return isRowSelectable({ row, id: getId(row, i) });
|
|
3563
|
+
}),
|
|
3564
|
+
[dataInPage, isRowSelectable, getId]
|
|
3565
|
+
);
|
|
3558
3566
|
const isAllSelected = useMemo8(
|
|
3559
|
-
() =>
|
|
3560
|
-
|
|
3567
|
+
() => selectableDataInPage.length > 0 && selectableDataInPage.every(
|
|
3568
|
+
(row, i) => selectedModelSet.has(getId(row, i))
|
|
3569
|
+
),
|
|
3570
|
+
[selectableDataInPage, selectedModelSet, getId]
|
|
3561
3571
|
);
|
|
3562
3572
|
const rowCount = totalRowsProp || rows.length;
|
|
3573
|
+
const selectableRowCount = useMemo8(() => {
|
|
3574
|
+
if (!isRowSelectable) return rowCount;
|
|
3575
|
+
return rows.filter((row, i) => isRowSelectable({ row, id: getId(row, i) })).length;
|
|
3576
|
+
}, [rows, isRowSelectable, getId, rowCount]);
|
|
3563
3577
|
const isTotalSelected = useMemo8(
|
|
3564
|
-
() => _isTotalSelected ?? (
|
|
3565
|
-
[_isTotalSelected, selectionModel,
|
|
3578
|
+
() => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
|
|
3579
|
+
[_isTotalSelected, selectionModel, selectableRowCount]
|
|
3566
3580
|
);
|
|
3567
3581
|
const columnWidths = useColumnWidths(columnsByField);
|
|
3568
3582
|
const getWidth = useCallback9(
|
|
@@ -3658,9 +3672,10 @@ function useDataTableRenderer({
|
|
|
3658
3672
|
}, [page, rowCount, pageSize, handlePageChange]);
|
|
3659
3673
|
useEffect5(() => {
|
|
3660
3674
|
onSelectionModelChange?.([]);
|
|
3661
|
-
}, [page]);
|
|
3675
|
+
}, [page, onSelectionModelChange]);
|
|
3662
3676
|
return {
|
|
3663
3677
|
rowCount,
|
|
3678
|
+
selectableRowCount,
|
|
3664
3679
|
page,
|
|
3665
3680
|
pageSize,
|
|
3666
3681
|
onPaginationModelChange: handlePageChange,
|
|
@@ -3676,13 +3691,22 @@ function useDataTableRenderer({
|
|
|
3676
3691
|
(model) => selectedModelSet.has(model),
|
|
3677
3692
|
[selectedModelSet]
|
|
3678
3693
|
),
|
|
3694
|
+
isRowSelectable: useCallback9(
|
|
3695
|
+
(rowId, row) => {
|
|
3696
|
+
if (!isRowSelectable) return true;
|
|
3697
|
+
return isRowSelectable({ row, id: rowId });
|
|
3698
|
+
},
|
|
3699
|
+
[isRowSelectable]
|
|
3700
|
+
),
|
|
3679
3701
|
focusedRowId,
|
|
3680
3702
|
onRowFocus: useCallback9((rowId) => {
|
|
3681
3703
|
setFocusedRowId(rowId);
|
|
3682
3704
|
}, []),
|
|
3683
3705
|
onAllCheckboxChange: useCallback9(() => {
|
|
3684
|
-
onSelectionModelChange?.(
|
|
3685
|
-
|
|
3706
|
+
onSelectionModelChange?.(
|
|
3707
|
+
isAllSelected ? [] : selectableDataInPage.map(getId)
|
|
3708
|
+
);
|
|
3709
|
+
}, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
|
|
3686
3710
|
onCheckboxChange: useCallback9(
|
|
3687
3711
|
(event, selectedModel) => {
|
|
3688
3712
|
if (selectedModelSet.has(selectedModel)) {
|
|
@@ -3699,11 +3723,15 @@ function useDataTableRenderer({
|
|
|
3699
3723
|
),
|
|
3700
3724
|
columns,
|
|
3701
3725
|
onTotalSelect: useCallback9(() => {
|
|
3726
|
+
const selectableRows = rows.filter((row, i) => {
|
|
3727
|
+
if (!isRowSelectable) return true;
|
|
3728
|
+
return isRowSelectable({ row, id: getId(row, i) });
|
|
3729
|
+
});
|
|
3702
3730
|
onSelectionModelChange?.(
|
|
3703
|
-
isTotalSelected ? [] :
|
|
3731
|
+
isTotalSelected ? [] : selectableRows.map(getId),
|
|
3704
3732
|
!isTotalSelected
|
|
3705
3733
|
);
|
|
3706
|
-
}, [isTotalSelected, rows, onSelectionModelChange, getId])
|
|
3734
|
+
}, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
|
|
3707
3735
|
};
|
|
3708
3736
|
}
|
|
3709
3737
|
function Component(props, apiRef) {
|
|
@@ -3713,6 +3741,7 @@ function Component(props, apiRef) {
|
|
|
3713
3741
|
editMode,
|
|
3714
3742
|
selectionModel,
|
|
3715
3743
|
onSelectionModelChange,
|
|
3744
|
+
isRowSelectable,
|
|
3716
3745
|
disableSelectionOnClick,
|
|
3717
3746
|
onRowClick,
|
|
3718
3747
|
pinnedColumns,
|
|
@@ -3760,10 +3789,12 @@ function Component(props, apiRef) {
|
|
|
3760
3789
|
columns,
|
|
3761
3790
|
isAllSelected,
|
|
3762
3791
|
isSelectedRow,
|
|
3792
|
+
isRowSelectable: isRowSelectableCheck,
|
|
3763
3793
|
onAllCheckboxChange,
|
|
3764
3794
|
onCheckboxChange,
|
|
3765
3795
|
getId,
|
|
3766
3796
|
rowCount,
|
|
3797
|
+
selectableRowCount,
|
|
3767
3798
|
page,
|
|
3768
3799
|
pageSize,
|
|
3769
3800
|
onPaginationModelChange,
|
|
@@ -3789,9 +3820,15 @@ function Component(props, apiRef) {
|
|
|
3789
3820
|
const getRowClickHandler = useCallback9(
|
|
3790
3821
|
(row, rowId) => (e) => {
|
|
3791
3822
|
onRowClick?.({ row, rowId }, e);
|
|
3792
|
-
checkboxSelection && !disableSelectionOnClick && onCheckboxChange(e, rowId);
|
|
3823
|
+
checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
|
|
3793
3824
|
},
|
|
3794
|
-
[
|
|
3825
|
+
[
|
|
3826
|
+
onRowClick,
|
|
3827
|
+
checkboxSelection,
|
|
3828
|
+
disableSelectionOnClick,
|
|
3829
|
+
onCheckboxChange,
|
|
3830
|
+
isRowSelectableCheck
|
|
3831
|
+
]
|
|
3795
3832
|
);
|
|
3796
3833
|
const getRowFocusHandler = useCallback9(
|
|
3797
3834
|
(rowId) => () => {
|
|
@@ -3806,10 +3843,12 @@ function Component(props, apiRef) {
|
|
|
3806
3843
|
[]
|
|
3807
3844
|
);
|
|
3808
3845
|
const getCheckboxChangeHandler = useCallback9(
|
|
3809
|
-
(rowId) => (e) => {
|
|
3810
|
-
|
|
3846
|
+
(rowId, row) => (e) => {
|
|
3847
|
+
if (isRowSelectableCheck(rowId, row)) {
|
|
3848
|
+
onCheckboxChange(e, rowId);
|
|
3849
|
+
}
|
|
3811
3850
|
},
|
|
3812
|
-
[onCheckboxChange]
|
|
3851
|
+
[onCheckboxChange, isRowSelectableCheck]
|
|
3813
3852
|
);
|
|
3814
3853
|
useImperativeHandle2(apiRef, () => ({
|
|
3815
3854
|
getRowIndexRelativeToVisibleRows(rowId) {
|
|
@@ -3847,7 +3886,7 @@ function Component(props, apiRef) {
|
|
|
3847
3886
|
justifyContent: "space-between",
|
|
3848
3887
|
alignItems: "center"
|
|
3849
3888
|
},
|
|
3850
|
-
!!checkboxSelection && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ React23.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(
|
|
3889
|
+
!!checkboxSelection && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ React23.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(selectableRowCount), " items")), isTotalSelected && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectableRowCount), " items are selected."), /* @__PURE__ */ React23.createElement(
|
|
3851
3890
|
Button_default,
|
|
3852
3891
|
{
|
|
3853
3892
|
size: "sm",
|
|
@@ -3892,6 +3931,7 @@ function Component(props, apiRef) {
|
|
|
3892
3931
|
onChange: onAllCheckboxChange,
|
|
3893
3932
|
checked: isAllSelected,
|
|
3894
3933
|
indeterminate: (selectionModel || []).length > 0 && !isAllSelected,
|
|
3934
|
+
disabled: dataInPage.length > 0 && !selectableRowCount,
|
|
3895
3935
|
...checkboxProps
|
|
3896
3936
|
}
|
|
3897
3937
|
)
|
|
@@ -3911,7 +3951,9 @@ function Component(props, apiRef) {
|
|
|
3911
3951
|
ref: tableBodyRef,
|
|
3912
3952
|
style: {
|
|
3913
3953
|
height: `${totalSize}px`
|
|
3914
|
-
}
|
|
3954
|
+
},
|
|
3955
|
+
role: "rowgroup",
|
|
3956
|
+
"aria-label": "DataTableBody"
|
|
3915
3957
|
},
|
|
3916
3958
|
!!loading && /* @__PURE__ */ React23.createElement(OverlayWrapper, null, /* @__PURE__ */ React23.createElement(
|
|
3917
3959
|
"td",
|
|
@@ -3946,6 +3988,7 @@ function Component(props, apiRef) {
|
|
|
3946
3988
|
key: virtualizedRow.key,
|
|
3947
3989
|
"data-row-id": rowId,
|
|
3948
3990
|
"data-index": rowIndex,
|
|
3991
|
+
"aria-rowindex": rowIndex + 1,
|
|
3949
3992
|
role: checkboxSelection && !disableSelectionOnClick ? "checkbox" : void 0,
|
|
3950
3993
|
tabIndex: focusedRowId === rowId ? 0 : -1,
|
|
3951
3994
|
onClick: getRowClickHandler(row, rowId),
|
|
@@ -3969,8 +4012,9 @@ function Component(props, apiRef) {
|
|
|
3969
4012
|
RenderCheckbox,
|
|
3970
4013
|
{
|
|
3971
4014
|
onClick: getCheckboxClickHandler(),
|
|
3972
|
-
onChange: getCheckboxChangeHandler(rowId),
|
|
4015
|
+
onChange: getCheckboxChangeHandler(rowId, row),
|
|
3973
4016
|
checked: isSelectedRow(rowId),
|
|
4017
|
+
disabled: !isRowSelectableCheck(rowId, row),
|
|
3974
4018
|
...checkboxProps
|
|
3975
4019
|
}
|
|
3976
4020
|
)
|