@ceed/cds 1.7.4-next.2 → 1.7.4

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.
@@ -140,13 +140,6 @@ 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;
150
143
  disableSelectionOnClick?: boolean;
151
144
  initialState?: Partial<{
152
145
  sorting: Partial<{
package/dist/index.cjs CHANGED
@@ -3508,8 +3508,7 @@ function useDataTableRenderer({
3508
3508
  onSelectionModelChange,
3509
3509
  editMode,
3510
3510
  getId: _getId,
3511
- isTotalSelected: _isTotalSelected,
3512
- isRowSelectable
3511
+ isTotalSelected: _isTotalSelected
3513
3512
  }) {
3514
3513
  const [focusedRowId, setFocusedRowId] = (0, import_react25.useState)(null);
3515
3514
  const [sortModel, setSortModel] = useControlledState(
@@ -3585,27 +3584,14 @@ function useDataTableRenderer({
3585
3584
  () => !pagination || paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
3586
3585
  [rows, page, pageSize, paginationMode, pagination]
3587
3586
  );
3588
- const selectableDataInPage = (0, import_react25.useMemo)(
3589
- () => dataInPage.filter((row, i) => {
3590
- if (!isRowSelectable) return true;
3591
- return isRowSelectable({ row, id: getId(row, i) });
3592
- }),
3593
- [dataInPage, isRowSelectable, getId]
3594
- );
3595
3587
  const isAllSelected = (0, import_react25.useMemo)(
3596
- () => selectableDataInPage.length > 0 && selectableDataInPage.every(
3597
- (row, i) => selectedModelSet.has(getId(row, i))
3598
- ),
3599
- [selectableDataInPage, selectedModelSet, getId]
3588
+ () => dataInPage.length > 0 && dataInPage.every((row, i) => selectedModelSet.has(getId(row, i))),
3589
+ [dataInPage, selectedModelSet, getId]
3600
3590
  );
3601
3591
  const rowCount = totalRowsProp || rows.length;
3602
- const selectableRowCount = (0, import_react25.useMemo)(() => {
3603
- if (!isRowSelectable) return rowCount;
3604
- return rows.filter((row, i) => isRowSelectable({ row, id: getId(row, i) })).length;
3605
- }, [rows, isRowSelectable, getId, rowCount]);
3606
3592
  const isTotalSelected = (0, import_react25.useMemo)(
3607
- () => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
3608
- [_isTotalSelected, selectionModel, selectableRowCount]
3593
+ () => _isTotalSelected ?? (rowCount > 0 && (selectionModel?.length || 0) === rowCount),
3594
+ [_isTotalSelected, selectionModel, rowCount]
3609
3595
  );
3610
3596
  const columnWidths = useColumnWidths(columnsByField);
3611
3597
  const getWidth = (0, import_react25.useCallback)(
@@ -3701,10 +3687,9 @@ function useDataTableRenderer({
3701
3687
  }, [page, rowCount, pageSize, handlePageChange]);
3702
3688
  (0, import_react25.useEffect)(() => {
3703
3689
  onSelectionModelChange?.([]);
3704
- }, [page, onSelectionModelChange]);
3690
+ }, [page]);
3705
3691
  return {
3706
3692
  rowCount,
3707
- selectableRowCount,
3708
3693
  page,
3709
3694
  pageSize,
3710
3695
  onPaginationModelChange: handlePageChange,
@@ -3720,22 +3705,13 @@ function useDataTableRenderer({
3720
3705
  (model) => selectedModelSet.has(model),
3721
3706
  [selectedModelSet]
3722
3707
  ),
3723
- isRowSelectable: (0, import_react25.useCallback)(
3724
- (rowId, row) => {
3725
- if (!isRowSelectable) return true;
3726
- return isRowSelectable({ row, id: rowId });
3727
- },
3728
- [isRowSelectable]
3729
- ),
3730
3708
  focusedRowId,
3731
3709
  onRowFocus: (0, import_react25.useCallback)((rowId) => {
3732
3710
  setFocusedRowId(rowId);
3733
3711
  }, []),
3734
3712
  onAllCheckboxChange: (0, import_react25.useCallback)(() => {
3735
- onSelectionModelChange?.(
3736
- isAllSelected ? [] : selectableDataInPage.map(getId)
3737
- );
3738
- }, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
3713
+ onSelectionModelChange?.(isAllSelected ? [] : dataInPage.map(getId));
3714
+ }, [isAllSelected, dataInPage, onSelectionModelChange, getId]),
3739
3715
  onCheckboxChange: (0, import_react25.useCallback)(
3740
3716
  (event, selectedModel) => {
3741
3717
  if (selectedModelSet.has(selectedModel)) {
@@ -3752,15 +3728,11 @@ function useDataTableRenderer({
3752
3728
  ),
3753
3729
  columns,
3754
3730
  onTotalSelect: (0, import_react25.useCallback)(() => {
3755
- const selectableRows = rows.filter((row, i) => {
3756
- if (!isRowSelectable) return true;
3757
- return isRowSelectable({ row, id: getId(row, i) });
3758
- });
3759
3731
  onSelectionModelChange?.(
3760
- isTotalSelected ? [] : selectableRows.map(getId),
3732
+ isTotalSelected ? [] : rows.map(getId),
3761
3733
  !isTotalSelected
3762
3734
  );
3763
- }, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
3735
+ }, [isTotalSelected, rows, onSelectionModelChange, getId])
3764
3736
  };
3765
3737
  }
3766
3738
  function Component(props, apiRef) {
@@ -3770,7 +3742,6 @@ function Component(props, apiRef) {
3770
3742
  editMode,
3771
3743
  selectionModel,
3772
3744
  onSelectionModelChange,
3773
- isRowSelectable,
3774
3745
  disableSelectionOnClick,
3775
3746
  onRowClick,
3776
3747
  pinnedColumns,
@@ -3818,12 +3789,10 @@ function Component(props, apiRef) {
3818
3789
  columns,
3819
3790
  isAllSelected,
3820
3791
  isSelectedRow,
3821
- isRowSelectable: isRowSelectableCheck,
3822
3792
  onAllCheckboxChange,
3823
3793
  onCheckboxChange,
3824
3794
  getId,
3825
3795
  rowCount,
3826
- selectableRowCount,
3827
3796
  page,
3828
3797
  pageSize,
3829
3798
  onPaginationModelChange,
@@ -3849,15 +3818,9 @@ function Component(props, apiRef) {
3849
3818
  const getRowClickHandler = (0, import_react25.useCallback)(
3850
3819
  (row, rowId) => (e) => {
3851
3820
  onRowClick?.({ row, rowId }, e);
3852
- checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
3821
+ checkboxSelection && !disableSelectionOnClick && onCheckboxChange(e, rowId);
3853
3822
  },
3854
- [
3855
- onRowClick,
3856
- checkboxSelection,
3857
- disableSelectionOnClick,
3858
- onCheckboxChange,
3859
- isRowSelectableCheck
3860
- ]
3823
+ [onRowClick, checkboxSelection, disableSelectionOnClick, onCheckboxChange]
3861
3824
  );
3862
3825
  const getRowFocusHandler = (0, import_react25.useCallback)(
3863
3826
  (rowId) => () => {
@@ -3872,12 +3835,10 @@ function Component(props, apiRef) {
3872
3835
  []
3873
3836
  );
3874
3837
  const getCheckboxChangeHandler = (0, import_react25.useCallback)(
3875
- (rowId, row) => (e) => {
3876
- if (isRowSelectableCheck(rowId, row)) {
3877
- onCheckboxChange(e, rowId);
3878
- }
3838
+ (rowId) => (e) => {
3839
+ onCheckboxChange(e, rowId);
3879
3840
  },
3880
- [onCheckboxChange, isRowSelectableCheck]
3841
+ [onCheckboxChange]
3881
3842
  );
3882
3843
  (0, import_react25.useImperativeHandle)(apiRef, () => ({
3883
3844
  getRowIndexRelativeToVisibleRows(rowId) {
@@ -3915,7 +3876,7 @@ function Component(props, apiRef) {
3915
3876
  justifyContent: "space-between",
3916
3877
  alignItems: "center"
3917
3878
  },
3918
- !!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(
3879
+ !!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(rowCount ?? rows.length), " 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(rowCount ?? rows.length), " items are selected."), /* @__PURE__ */ import_react25.default.createElement(
3919
3880
  Button_default,
3920
3881
  {
3921
3882
  size: "sm",
@@ -3960,7 +3921,6 @@ function Component(props, apiRef) {
3960
3921
  onChange: onAllCheckboxChange,
3961
3922
  checked: isAllSelected,
3962
3923
  indeterminate: (selectionModel || []).length > 0 && !isAllSelected,
3963
- disabled: dataInPage.length > 0 && !selectableRowCount,
3964
3924
  ...checkboxProps
3965
3925
  }
3966
3926
  )
@@ -4038,9 +3998,8 @@ function Component(props, apiRef) {
4038
3998
  RenderCheckbox,
4039
3999
  {
4040
4000
  onClick: getCheckboxClickHandler(),
4041
- onChange: getCheckboxChangeHandler(rowId, row),
4001
+ onChange: getCheckboxChangeHandler(rowId),
4042
4002
  checked: isSelectedRow(rowId),
4043
- disabled: !isRowSelectableCheck(rowId, row),
4044
4003
  ...checkboxProps
4045
4004
  }
4046
4005
  )
package/dist/index.js CHANGED
@@ -3476,8 +3476,7 @@ function useDataTableRenderer({
3476
3476
  onSelectionModelChange,
3477
3477
  editMode,
3478
3478
  getId: _getId,
3479
- isTotalSelected: _isTotalSelected,
3480
- isRowSelectable
3479
+ isTotalSelected: _isTotalSelected
3481
3480
  }) {
3482
3481
  const [focusedRowId, setFocusedRowId] = useState6(null);
3483
3482
  const [sortModel, setSortModel] = useControlledState(
@@ -3553,27 +3552,14 @@ function useDataTableRenderer({
3553
3552
  () => !pagination || paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
3554
3553
  [rows, page, pageSize, paginationMode, pagination]
3555
3554
  );
3556
- const selectableDataInPage = useMemo8(
3557
- () => dataInPage.filter((row, i) => {
3558
- if (!isRowSelectable) return true;
3559
- return isRowSelectable({ row, id: getId(row, i) });
3560
- }),
3561
- [dataInPage, isRowSelectable, getId]
3562
- );
3563
3555
  const isAllSelected = useMemo8(
3564
- () => selectableDataInPage.length > 0 && selectableDataInPage.every(
3565
- (row, i) => selectedModelSet.has(getId(row, i))
3566
- ),
3567
- [selectableDataInPage, selectedModelSet, getId]
3556
+ () => dataInPage.length > 0 && dataInPage.every((row, i) => selectedModelSet.has(getId(row, i))),
3557
+ [dataInPage, selectedModelSet, getId]
3568
3558
  );
3569
3559
  const rowCount = totalRowsProp || rows.length;
3570
- const selectableRowCount = useMemo8(() => {
3571
- if (!isRowSelectable) return rowCount;
3572
- return rows.filter((row, i) => isRowSelectable({ row, id: getId(row, i) })).length;
3573
- }, [rows, isRowSelectable, getId, rowCount]);
3574
3560
  const isTotalSelected = useMemo8(
3575
- () => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
3576
- [_isTotalSelected, selectionModel, selectableRowCount]
3561
+ () => _isTotalSelected ?? (rowCount > 0 && (selectionModel?.length || 0) === rowCount),
3562
+ [_isTotalSelected, selectionModel, rowCount]
3577
3563
  );
3578
3564
  const columnWidths = useColumnWidths(columnsByField);
3579
3565
  const getWidth = useCallback9(
@@ -3669,10 +3655,9 @@ function useDataTableRenderer({
3669
3655
  }, [page, rowCount, pageSize, handlePageChange]);
3670
3656
  useEffect5(() => {
3671
3657
  onSelectionModelChange?.([]);
3672
- }, [page, onSelectionModelChange]);
3658
+ }, [page]);
3673
3659
  return {
3674
3660
  rowCount,
3675
- selectableRowCount,
3676
3661
  page,
3677
3662
  pageSize,
3678
3663
  onPaginationModelChange: handlePageChange,
@@ -3688,22 +3673,13 @@ function useDataTableRenderer({
3688
3673
  (model) => selectedModelSet.has(model),
3689
3674
  [selectedModelSet]
3690
3675
  ),
3691
- isRowSelectable: useCallback9(
3692
- (rowId, row) => {
3693
- if (!isRowSelectable) return true;
3694
- return isRowSelectable({ row, id: rowId });
3695
- },
3696
- [isRowSelectable]
3697
- ),
3698
3676
  focusedRowId,
3699
3677
  onRowFocus: useCallback9((rowId) => {
3700
3678
  setFocusedRowId(rowId);
3701
3679
  }, []),
3702
3680
  onAllCheckboxChange: useCallback9(() => {
3703
- onSelectionModelChange?.(
3704
- isAllSelected ? [] : selectableDataInPage.map(getId)
3705
- );
3706
- }, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
3681
+ onSelectionModelChange?.(isAllSelected ? [] : dataInPage.map(getId));
3682
+ }, [isAllSelected, dataInPage, onSelectionModelChange, getId]),
3707
3683
  onCheckboxChange: useCallback9(
3708
3684
  (event, selectedModel) => {
3709
3685
  if (selectedModelSet.has(selectedModel)) {
@@ -3720,15 +3696,11 @@ function useDataTableRenderer({
3720
3696
  ),
3721
3697
  columns,
3722
3698
  onTotalSelect: useCallback9(() => {
3723
- const selectableRows = rows.filter((row, i) => {
3724
- if (!isRowSelectable) return true;
3725
- return isRowSelectable({ row, id: getId(row, i) });
3726
- });
3727
3699
  onSelectionModelChange?.(
3728
- isTotalSelected ? [] : selectableRows.map(getId),
3700
+ isTotalSelected ? [] : rows.map(getId),
3729
3701
  !isTotalSelected
3730
3702
  );
3731
- }, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
3703
+ }, [isTotalSelected, rows, onSelectionModelChange, getId])
3732
3704
  };
3733
3705
  }
3734
3706
  function Component(props, apiRef) {
@@ -3738,7 +3710,6 @@ function Component(props, apiRef) {
3738
3710
  editMode,
3739
3711
  selectionModel,
3740
3712
  onSelectionModelChange,
3741
- isRowSelectable,
3742
3713
  disableSelectionOnClick,
3743
3714
  onRowClick,
3744
3715
  pinnedColumns,
@@ -3786,12 +3757,10 @@ function Component(props, apiRef) {
3786
3757
  columns,
3787
3758
  isAllSelected,
3788
3759
  isSelectedRow,
3789
- isRowSelectable: isRowSelectableCheck,
3790
3760
  onAllCheckboxChange,
3791
3761
  onCheckboxChange,
3792
3762
  getId,
3793
3763
  rowCount,
3794
- selectableRowCount,
3795
3764
  page,
3796
3765
  pageSize,
3797
3766
  onPaginationModelChange,
@@ -3817,15 +3786,9 @@ function Component(props, apiRef) {
3817
3786
  const getRowClickHandler = useCallback9(
3818
3787
  (row, rowId) => (e) => {
3819
3788
  onRowClick?.({ row, rowId }, e);
3820
- checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
3789
+ checkboxSelection && !disableSelectionOnClick && onCheckboxChange(e, rowId);
3821
3790
  },
3822
- [
3823
- onRowClick,
3824
- checkboxSelection,
3825
- disableSelectionOnClick,
3826
- onCheckboxChange,
3827
- isRowSelectableCheck
3828
- ]
3791
+ [onRowClick, checkboxSelection, disableSelectionOnClick, onCheckboxChange]
3829
3792
  );
3830
3793
  const getRowFocusHandler = useCallback9(
3831
3794
  (rowId) => () => {
@@ -3840,12 +3803,10 @@ function Component(props, apiRef) {
3840
3803
  []
3841
3804
  );
3842
3805
  const getCheckboxChangeHandler = useCallback9(
3843
- (rowId, row) => (e) => {
3844
- if (isRowSelectableCheck(rowId, row)) {
3845
- onCheckboxChange(e, rowId);
3846
- }
3806
+ (rowId) => (e) => {
3807
+ onCheckboxChange(e, rowId);
3847
3808
  },
3848
- [onCheckboxChange, isRowSelectableCheck]
3809
+ [onCheckboxChange]
3849
3810
  );
3850
3811
  useImperativeHandle2(apiRef, () => ({
3851
3812
  getRowIndexRelativeToVisibleRows(rowId) {
@@ -3883,7 +3844,7 @@ function Component(props, apiRef) {
3883
3844
  justifyContent: "space-between",
3884
3845
  alignItems: "center"
3885
3846
  },
3886
- !!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(
3847
+ !!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(rowCount ?? rows.length), " items")), isTotalSelected && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(rowCount ?? rows.length), " items are selected."), /* @__PURE__ */ React23.createElement(
3887
3848
  Button_default,
3888
3849
  {
3889
3850
  size: "sm",
@@ -3928,7 +3889,6 @@ function Component(props, apiRef) {
3928
3889
  onChange: onAllCheckboxChange,
3929
3890
  checked: isAllSelected,
3930
3891
  indeterminate: (selectionModel || []).length > 0 && !isAllSelected,
3931
- disabled: dataInPage.length > 0 && !selectableRowCount,
3932
3892
  ...checkboxProps
3933
3893
  }
3934
3894
  )
@@ -4006,9 +3966,8 @@ function Component(props, apiRef) {
4006
3966
  RenderCheckbox,
4007
3967
  {
4008
3968
  onClick: getCheckboxClickHandler(),
4009
- onChange: getCheckboxChangeHandler(rowId, row),
3969
+ onChange: getCheckboxChangeHandler(rowId),
4010
3970
  checked: isSelectedRow(rowId),
4011
- disabled: !isRowSelectableCheck(rowId, row),
4012
3971
  ...checkboxProps
4013
3972
  }
4014
3973
  )