@ceed/ads 1.26.0 → 1.27.0
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/hooks.d.ts +1 -1
- package/dist/components/DataTable/types.d.ts +10 -0
- package/dist/components/DataTable/utils.d.ts +2 -2
- package/dist/components/data-display/DataTable.md +100 -0
- package/dist/index.browser.js +2 -2
- package/dist/index.browser.js.map +3 -3
- package/dist/index.cjs +78 -35
- package/dist/index.js +78 -35
- package/framer/index.js +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ export declare function useColumnWidths<T>(columnsByField: {
|
|
|
5
5
|
headerRef: React.RefObject<HTMLTableCellElement>;
|
|
6
6
|
};
|
|
7
7
|
}): Record<string, number>;
|
|
8
|
-
export declare function useDataTableRenderer<T extends Record<PropertyKey, unknown>, GetId extends ((row: T) => any) | undefined = undefined>({ rows: _rows, columns: columnsProp, pinnedColumns, rowCount: totalRowsProp, initialState, pagination, paginationMode, paginationModel, onPaginationModelChange, sortModel: controlledSortModel, sortOrder: _sortOrder, selectionModel, onSortModelChange, onSelectionModelChange, editMode, getId: _getId, isTotalSelected: _isTotalSelected, isRowSelectable, columnGroupingModel, }: DataTableProps<T, GetId>): {
|
|
8
|
+
export declare function useDataTableRenderer<T extends Record<PropertyKey, unknown>, GetId extends ((row: T) => any) | undefined = undefined>({ rows: _rows, columns: columnsProp, pinnedColumns, rowCount: totalRowsProp, initialState, pagination, paginationMode, paginationModel, onPaginationModelChange, sortModel: controlledSortModel, sortOrder: _sortOrder, selectionModel, onSortModelChange, onSelectionModelChange, editMode, getId: _getId, isTotalSelected: _isTotalSelected, isRowSelectable, columnGroupingModel, columnVisibilityModel, onColumnVisibilityModelChange, }: DataTableProps<T, GetId>): {
|
|
9
9
|
rowCount: number;
|
|
10
10
|
selectableRowCount: number;
|
|
11
11
|
page: number;
|
|
@@ -148,6 +148,7 @@ export type ActionsColumnDef<T extends Record<PropertyKey, string>, ID> = BaseCo
|
|
|
148
148
|
}) => ReactNode[];
|
|
149
149
|
};
|
|
150
150
|
export type ColumnDef<T extends Record<PropertyKey, any>, ID = unknown> = AutocompleteColumnDef<T, ID> | CurrencyColumnDef<T, ID> | DateColumnDef<T, ID> | NumberColumnDef<T, ID> | TextColumnDef<T, ID> | LongTextColumnDef<T, ID> | LinkColumnDef<T, ID> | SelectColumnDef<T, ID> | ActionsColumnDef<T, ID>;
|
|
151
|
+
export type ColumnVisibilityModel = Record<string, boolean>;
|
|
151
152
|
export type Sort = 'asc' | 'desc' | null;
|
|
152
153
|
export type SortModel<T extends Record<PropertyKey, any>> = {
|
|
153
154
|
[K in keyof T]: {
|
|
@@ -165,6 +166,12 @@ export type DataTableProps<T extends Record<PropertyKey, any>, GetId extends ((r
|
|
|
165
166
|
columns: ColumnDef<T, InferredIdType<T, GetId>>[];
|
|
166
167
|
pinnedColumns?: PinnedColumns;
|
|
167
168
|
columnGroupingModel?: ColumnGroupingModel<T, InferredIdType<T, GetId>>;
|
|
169
|
+
/**
|
|
170
|
+
* 컬럼의 표시/숨김 상태를 제어한다. field를 key로, boolean을 value로 사용한다.
|
|
171
|
+
* false로 설정된 컬럼만 숨겨지며, 모델에 포함되지 않은 컬럼은 기본적으로 표시된다.
|
|
172
|
+
*/
|
|
173
|
+
columnVisibilityModel?: ColumnVisibilityModel;
|
|
174
|
+
onColumnVisibilityModelChange?: (model: ColumnVisibilityModel) => void;
|
|
168
175
|
editMode?: boolean;
|
|
169
176
|
/**
|
|
170
177
|
* 체크박스가 있는 경우, 체크박스를 클릭했을 때 선택된 row의 index를 지정한다.
|
|
@@ -188,6 +195,9 @@ export type DataTableProps<T extends Record<PropertyKey, any>, GetId extends ((r
|
|
|
188
195
|
sorting: Partial<{
|
|
189
196
|
sortModel: SortModel<T>[];
|
|
190
197
|
}>;
|
|
198
|
+
columns: Partial<{
|
|
199
|
+
columnVisibilityModel: ColumnVisibilityModel;
|
|
200
|
+
}>;
|
|
191
201
|
}>;
|
|
192
202
|
pagination?: boolean;
|
|
193
203
|
paginationMode?: 'client' | 'server';
|
|
@@ -3,8 +3,8 @@ export declare function extractFieldsFromGroupingModel<T extends Record<Property
|
|
|
3
3
|
export declare function reorderColumnsByGroupingModel<T extends Record<PropertyKey, any>, ID>(columns: ColumnDef<T, ID>[], columnGroupingModel: ColumnGroupingModel<T, ID>): ColumnDef<T, ID>[];
|
|
4
4
|
export declare function flattenColumnGroups<T extends Record<PropertyKey, any>, ID>(items: ColumnGroupingModel<T, ID> | ColumnDef<T, ID>[], groupPath?: string[], columnIndex?: {
|
|
5
5
|
current: number;
|
|
6
|
-
}): FlattenedColumn<T, ID>[];
|
|
7
|
-
export declare function calculateColumnGroups<T extends Record<PropertyKey, any>, ID>(columnGroupingModel: ColumnGroupingModel<T, ID>, columns: ColumnDef<T, ID>[]): {
|
|
6
|
+
}, visibleFields?: Set<string>): FlattenedColumn<T, ID>[];
|
|
7
|
+
export declare function calculateColumnGroups<T extends Record<PropertyKey, any>, ID>(columnGroupingModel: ColumnGroupingModel<T, ID>, columns: ColumnDef<T, ID>[], visibleFields?: Set<string>): {
|
|
8
8
|
groups: ProcessedColumnGroup[][];
|
|
9
9
|
maxLevel: number;
|
|
10
10
|
fieldsInGroupingModel: Set<keyof T>;
|
|
@@ -865,6 +865,106 @@ const columnGroupingModel = [
|
|
|
865
865
|
<DataTable rows={rows} columns={columns} columnGroupingModel={columnGroupingModel} />;
|
|
866
866
|
```
|
|
867
867
|
|
|
868
|
+
### Column Visibility
|
|
869
|
+
|
|
870
|
+
You can control which columns are visible using `columnVisibilityModel`.
|
|
871
|
+
Columns set to `false` are hidden. Columns not in the model are visible by default.
|
|
872
|
+
Hidden columns are completely removed from the DOM for optimal rendering performance.
|
|
873
|
+
|
|
874
|
+
```tsx
|
|
875
|
+
<Stack spacing={2}>
|
|
876
|
+
<Stack direction="row" spacing={1} sx={{
|
|
877
|
+
flexWrap: 'wrap'
|
|
878
|
+
}}>
|
|
879
|
+
{allColumns.map(col => <label key={col.field as string} style={{
|
|
880
|
+
display: 'flex',
|
|
881
|
+
alignItems: 'center',
|
|
882
|
+
gap: 4
|
|
883
|
+
}}>
|
|
884
|
+
<input type="checkbox" checked={visibilityModel[col.field as string] !== false} onChange={e => setVisibilityModel(prev => ({
|
|
885
|
+
...prev,
|
|
886
|
+
[col.field as string]: e.target.checked
|
|
887
|
+
}))} />
|
|
888
|
+
{col.headerName}
|
|
889
|
+
</label>)}
|
|
890
|
+
</Stack>
|
|
891
|
+
<DataTable rows={rows2} columns={allColumns} columnVisibilityModel={visibilityModel} onColumnVisibilityModelChange={setVisibilityModel} noWrap />
|
|
892
|
+
</Stack>
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
#### Controlled Mode
|
|
896
|
+
|
|
897
|
+
```tsx
|
|
898
|
+
const [visibilityModel, setVisibilityModel] = useState({ fat: false });
|
|
899
|
+
|
|
900
|
+
<DataTable
|
|
901
|
+
rows={rows}
|
|
902
|
+
columns={columns}
|
|
903
|
+
columnVisibilityModel={visibilityModel}
|
|
904
|
+
onColumnVisibilityModelChange={setVisibilityModel}
|
|
905
|
+
/>
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
#### Uncontrolled Mode (initialState)
|
|
909
|
+
|
|
910
|
+
```tsx
|
|
911
|
+
<DataTable
|
|
912
|
+
rows={rows}
|
|
913
|
+
columns={columns}
|
|
914
|
+
initialState={{
|
|
915
|
+
columns: { columnVisibilityModel: { fat: false, carbs: false } },
|
|
916
|
+
}}
|
|
917
|
+
/>
|
|
918
|
+
```
|
|
919
|
+
|
|
920
|
+
#### Column Visibility with Column Groups
|
|
921
|
+
|
|
922
|
+
```tsx
|
|
923
|
+
<Stack spacing={2}>
|
|
924
|
+
<Stack direction="row" spacing={1} sx={{
|
|
925
|
+
flexWrap: 'wrap'
|
|
926
|
+
}}>
|
|
927
|
+
{columns.map(col => <label key={col.field as string} style={{
|
|
928
|
+
display: 'flex',
|
|
929
|
+
alignItems: 'center',
|
|
930
|
+
gap: 4
|
|
931
|
+
}}>
|
|
932
|
+
<input type="checkbox" checked={visibilityModel[col.field as string] !== false} onChange={e => setVisibilityModel(prev => ({
|
|
933
|
+
...prev,
|
|
934
|
+
[col.field as string]: e.target.checked
|
|
935
|
+
}))} />
|
|
936
|
+
{col.headerName}
|
|
937
|
+
</label>)}
|
|
938
|
+
</Stack>
|
|
939
|
+
<DataTable rows={rows4} columns={columns} columnGroupingModel={[{
|
|
940
|
+
groupId: 'group1',
|
|
941
|
+
headerName: 'Group 1',
|
|
942
|
+
children: [{
|
|
943
|
+
field: 'id'
|
|
944
|
+
}, {
|
|
945
|
+
field: 'number'
|
|
946
|
+
}, {
|
|
947
|
+
field: 'string'
|
|
948
|
+
}]
|
|
949
|
+
}, {
|
|
950
|
+
groupId: 'group2',
|
|
951
|
+
headerName: 'Group 2',
|
|
952
|
+
children: [{
|
|
953
|
+
field: 'date'
|
|
954
|
+
}, {
|
|
955
|
+
field: 'object'
|
|
956
|
+
}]
|
|
957
|
+
}]} columnVisibilityModel={visibilityModel} onColumnVisibilityModelChange={setVisibilityModel} noWrap />
|
|
958
|
+
</Stack>
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
#### Notes
|
|
962
|
+
|
|
963
|
+
- Hidden columns are completely removed from the DOM for optimal performance.
|
|
964
|
+
- Sorting on hidden columns is preserved — row order is maintained even if the sort column is hidden.
|
|
965
|
+
- Works with column grouping: hidden columns reduce group colspan, and fully hidden groups disappear.
|
|
966
|
+
- Works with pinned columns: hidden pinned columns are excluded from sticky position calculations.
|
|
967
|
+
|
|
868
968
|
### Column Resizing
|
|
869
969
|
|
|
870
970
|
Setting `resizable: true` on a column allows you to adjust the column width by dragging.
|