@addev-be/ui 0.1.20 → 0.1.24

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.
Files changed (25) hide show
  1. package/package.json +1 -1
  2. package/src/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.ts +102 -0
  3. package/src/components/data/AdvancedRequestDataGrid/helpers/columns.tsx +223 -0
  4. package/src/components/data/AdvancedRequestDataGrid/helpers/filters.ts +19 -0
  5. package/src/components/data/AdvancedRequestDataGrid/helpers/index.ts +3 -0
  6. package/src/components/data/{DataGrid/AdvancedRequestDataGrid.tsx → AdvancedRequestDataGrid/index.tsx} +47 -38
  7. package/src/components/data/AdvancedRequestDataGrid/types.ts +44 -0
  8. package/src/components/data/DataGrid/DataGridCell.tsx +3 -6
  9. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +2 -2
  10. package/src/components/data/DataGrid/DataGridFooter.tsx +4 -4
  11. package/src/components/data/DataGrid/DataGridHeader.tsx +11 -14
  12. package/src/components/data/DataGrid/VirtualScroller.tsx +2 -7
  13. package/src/components/data/DataGrid/helpers/columns.tsx +33 -94
  14. package/src/components/data/DataGrid/helpers/filters.ts +16 -28
  15. package/src/components/data/DataGrid/helpers/index.ts +1 -2
  16. package/src/components/data/DataGrid/hooks/index.ts +1 -1
  17. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +40 -4
  18. package/src/components/data/DataGrid/index.tsx +15 -27
  19. package/src/components/data/DataGrid/styles.ts +19 -4
  20. package/src/components/data/DataGrid/types.ts +68 -65
  21. package/src/components/data/index.ts +3 -2
  22. package/src/components/forms/IconButton.tsx +0 -1
  23. package/src/components/forms/IndeterminateCheckbox.tsx +1 -1
  24. package/src/services/advancedRequests.ts +1 -0
  25. package/src/components/data/DataGrid/helpers/advancedRequests.tsx +0 -61
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@addev-be/ui",
3
- "version": "0.1.20",
3
+ "version": "0.1.24",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "watch": "tsc -b --watch",
@@ -0,0 +1,102 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import {
4
+ AdvancedRequestDTO,
5
+ ConditionDTO,
6
+ OrderByDTO,
7
+ } from '../../../../services/advancedRequests';
8
+ import {
9
+ AdvancedRequestDataGridColumns,
10
+ AdvancedRequestDataGridFilters,
11
+ } from '../types';
12
+
13
+ import { DataGridColumns } from '../../DataGrid/types';
14
+ import _ from 'lodash';
15
+
16
+ export const getAdvancedRequestDto = <R>({
17
+ type,
18
+ columns,
19
+ conditions = [],
20
+ orderBy = [],
21
+ start = 0,
22
+ length = 100,
23
+ getTotal = false,
24
+ addIdColumn = true,
25
+ }: {
26
+ type: string;
27
+ columns: DataGridColumns<R>;
28
+ conditions?: ConditionDTO[];
29
+ orderBy?: OrderByDTO[];
30
+ start?: number;
31
+ length?: number;
32
+ getTotal?: boolean;
33
+ addIdColumn?: boolean;
34
+ }): AdvancedRequestDTO => ({
35
+ fields: [
36
+ ...(Object.keys(columns).includes('Id') || addIdColumn === false
37
+ ? []
38
+ : [{ fieldName: 'Id' }]),
39
+ ...Object.keys(columns).map((key) =>
40
+ columns[key].field
41
+ ? {
42
+ ...columns[key].field,
43
+ fieldName: columns[key].field?.fieldName ?? key,
44
+ fieldAlias: key,
45
+ }
46
+ : {
47
+ fieldName: key,
48
+ fieldAlias: key,
49
+ }
50
+ ),
51
+ ],
52
+ conditions: [
53
+ ...conditions,
54
+ {
55
+ field: {
56
+ fieldName: 'DeletedAt',
57
+ },
58
+ operator: 'isNull' as const,
59
+ },
60
+ ],
61
+ orderBy,
62
+ type,
63
+ start,
64
+ length,
65
+ getTotal,
66
+ });
67
+
68
+ export const convertFiltersToConditions = <R>(
69
+ filters: AdvancedRequestDataGridFilters,
70
+ columns: DataGridColumns<R>
71
+ ): Record<string, ConditionDTO> =>
72
+ _.mapValues(filters, (filter, columnKey) => ({
73
+ field: filter.field ??
74
+ columns[columnKey].field ?? {
75
+ fieldName: columnKey,
76
+ },
77
+ operator: filter.operator,
78
+ value: ['inArray', 'inRange'].includes(filter.operator)
79
+ ? filter.values
80
+ : _.castArray<string | number | null>(filter.values)[0],
81
+ }));
82
+
83
+ export const parseJsonObjectFields = <R>(
84
+ rows: any[],
85
+ columns: AdvancedRequestDataGridColumns<R>,
86
+ parser?: (row: any) => R
87
+ ): R[] => {
88
+ const jsonColumns = Object.keys(columns).filter(
89
+ (key) => columns[key].field?.operator === 'jsonObject'
90
+ );
91
+ const parsedRows =
92
+ jsonColumns.length === 0
93
+ ? rows
94
+ : rows.map((row) => {
95
+ const parsedRow = { ...row };
96
+ jsonColumns.forEach((key) => {
97
+ parsedRow[key] = JSON.parse(parsedRow[key] ?? '{}');
98
+ });
99
+ return parsedRow;
100
+ });
101
+ return parser ? parsedRows.map(parser) : parsedRows;
102
+ };
@@ -0,0 +1,223 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import {
4
+ AdvancedRequestDataGridColumn,
5
+ AdvancedRequestDataGridColumns,
6
+ } from '../types';
7
+ import { advancedNumberFilter, advancedTextFilter } from './filters';
8
+ import {
9
+ formatMoney,
10
+ formatNumber,
11
+ formatPercentage,
12
+ } from '../../../../helpers/numbers';
13
+
14
+ import { DataGridSettings } from '../../DataGrid/types';
15
+ import _ from 'lodash';
16
+ import moment from 'moment';
17
+
18
+ export const isColumnVisible = <R,>(
19
+ obj: AdvancedRequestDataGridColumn<R> | DataGridSettings
20
+ ): boolean => {
21
+ return obj?.order !== -1;
22
+ };
23
+
24
+ export const withGroupBy = <R extends Record<string, any>>(
25
+ columns: AdvancedRequestDataGridColumns<R>
26
+ ): AdvancedRequestDataGridColumns<R> =>
27
+ _.mapValues(columns, (column, key) => ({
28
+ ...column,
29
+ field: {
30
+ ...(column.field ?? { fieldName: key }),
31
+ groupBy: true,
32
+ },
33
+ }));
34
+
35
+ export const advancedTextColumn = <R extends Record<string, any>>(
36
+ key: string,
37
+ title: string,
38
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
39
+ ): AdvancedRequestDataGridColumns<R> => ({
40
+ [key]: {
41
+ name: title,
42
+ render: (row) => row[key] ?? '',
43
+ getter: (row) => row[key] ?? '',
44
+ sortGetter: (row) => row[key] ?? '',
45
+ filter: advancedTextFilter(key),
46
+ ...options,
47
+ },
48
+ });
49
+
50
+ /**
51
+ * Creates a column with a composed value from multiple fields,
52
+ * and filtered by a text filter on the first field
53
+ */
54
+ export const advancedComposedColumn = <R extends Record<string, any>>(
55
+ key: string,
56
+ title: string,
57
+ fields: string[],
58
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
59
+ ): AdvancedRequestDataGridColumns<R> => ({
60
+ [key]: {
61
+ field: {
62
+ fieldAlias: key,
63
+ operator: 'jsonObject',
64
+ operands: fields.flatMap((field) => [
65
+ { constantValue: field },
66
+ { fieldName: field },
67
+ ]),
68
+ },
69
+ name: title,
70
+ render: (row) => row[key] ?? '',
71
+ getter: (row) => row[key] ?? '',
72
+ sortGetter: (row) => row[key] ?? '',
73
+ filter: advancedTextFilter(fields[0]),
74
+ ...options,
75
+ },
76
+ });
77
+
78
+ export const advancedMailColumn = <R extends Record<string, any>>(
79
+ key: string,
80
+ title: string,
81
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
82
+ ): AdvancedRequestDataGridColumns<R> => ({
83
+ [key]: {
84
+ name: title,
85
+ render: (row) => <a href={`mailto:${row[key]}`}>{row[key] ?? ''}</a>,
86
+ getter: (row) => row[key] ?? '',
87
+ sortGetter: (row) => row[key] ?? '',
88
+ filter: advancedTextFilter(key),
89
+ ...options,
90
+ },
91
+ });
92
+
93
+ export const advancedPhoneColumn = <R extends Record<string, any>>(
94
+ key: string,
95
+ title: string,
96
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
97
+ ): AdvancedRequestDataGridColumns<R> => ({
98
+ [key]: {
99
+ name: title,
100
+ render: (row) => <a href={`tel:${row[key]}`}>{row[key] ?? ''}</a>,
101
+ getter: (row) => row[key] ?? '',
102
+ sortGetter: (row) => row[key] ?? '',
103
+ filter: advancedTextFilter(key),
104
+ ...options,
105
+ },
106
+ });
107
+
108
+ export const advancedDateColumn = <R extends Record<string, any>>(
109
+ key: string,
110
+ title: string,
111
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
112
+ ): AdvancedRequestDataGridColumns<R> => ({
113
+ [key]: {
114
+ name: title,
115
+ render: (row) => moment(row[key]).format('DD/MM/YYYY') ?? '',
116
+ getter: (row) => row[key] ?? '',
117
+ sortGetter: (row) => row[key] ?? '',
118
+ filter: advancedTextFilter(key),
119
+ ...options,
120
+ },
121
+ });
122
+
123
+ export const advancedMonthColumn = <R extends Record<string, any>>(
124
+ key: string,
125
+ title: string,
126
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
127
+ ): AdvancedRequestDataGridColumns<R> => ({
128
+ [key]: {
129
+ name: title,
130
+ render: (row) => (row[key] ? `${row[key]} mois ` : ''),
131
+ getter: (row) => row[key] ?? '',
132
+ sortGetter: (row) => row[key] ?? '',
133
+ filter: advancedTextFilter(key),
134
+ ...options,
135
+ },
136
+ });
137
+
138
+ export const advancedNumberColumn = <R extends Record<string, any>>(
139
+ key: string,
140
+ title: string,
141
+ decimals = 2,
142
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
143
+ ): AdvancedRequestDataGridColumns<R> => ({
144
+ [key]: {
145
+ name: title,
146
+ render: (row) => formatNumber(row[key], decimals) ?? '',
147
+ excelFormatter: () => '#',
148
+ getter: (row) => row[key] ?? '',
149
+ sortGetter: (row) => row[key] ?? '',
150
+ filter: advancedNumberFilter(key),
151
+ ...options,
152
+ },
153
+ });
154
+
155
+ export const advancedMoneyColumn = <R extends Record<string, any>>(
156
+ key: string,
157
+ title: string,
158
+ decimals = 2,
159
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
160
+ ): AdvancedRequestDataGridColumns<R> => ({
161
+ [key]: {
162
+ name: title,
163
+ render: (row) => formatMoney(row[key], decimals) ?? '',
164
+ excelFormatter: () => '#0.00',
165
+ getter: (row) => row[key] ?? '',
166
+ sortGetter: (row) => row[key] ?? '',
167
+ filter: advancedNumberFilter(key),
168
+ ...options,
169
+ },
170
+ });
171
+
172
+ export const advancedPercentageColumn = <R extends Record<string, any>>(
173
+ key: string,
174
+ title: string,
175
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
176
+ ): AdvancedRequestDataGridColumns<R> => ({
177
+ [key]: {
178
+ name: title,
179
+ render: (row) => formatPercentage(row[key]) ?? '',
180
+ excelFormatter: () => '#0.00',
181
+ getter: (row) => row[key] ?? '',
182
+ sortGetter: (row) => row[key] ?? '',
183
+ filter: advancedNumberFilter(key),
184
+ ...options,
185
+ },
186
+ });
187
+
188
+ export const advancedCheckboxColumn = <R extends Record<string, any>>(
189
+ key: string,
190
+ title: string,
191
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
192
+ ): AdvancedRequestDataGridColumns<R> => ({
193
+ [key]: {
194
+ name: title,
195
+ render: (row) => (
196
+ <>
197
+ <input type="checkbox" checked={row[key]} />
198
+ <span>{row[key] ? ' Oui' : ' Non'}</span>
199
+ </>
200
+ ),
201
+ getter: (row) => row[key] ?? '',
202
+ sortGetter: (row) => row[key] ?? '',
203
+ filter: advancedNumberFilter(key),
204
+ ...options,
205
+ },
206
+ });
207
+
208
+ export const advancedColorColumn = <R extends Record<string, any>>(
209
+ key: string,
210
+ title: string,
211
+ options?: Partial<AdvancedRequestDataGridColumn<R>>
212
+ ): AdvancedRequestDataGridColumns<R> => ({
213
+ [key]: {
214
+ name: title,
215
+ render: (row) => (
216
+ <div style={{ backgroundColor: row[key] }}>{row[key] ?? ''}</div>
217
+ ),
218
+ getter: (row) => row[key] ?? '',
219
+ sortGetter: (row) => row[key] ?? '',
220
+ filter: advancedTextFilter(key),
221
+ ...options,
222
+ },
223
+ });
@@ -0,0 +1,19 @@
1
+ import { numberFilter, textFilter } from '../../DataGrid/helpers';
2
+
3
+ import { AdvancedRequestDataGridFilter } from '../types';
4
+
5
+ export const advancedTextFilter = (
6
+ key: string
7
+ ): AdvancedRequestDataGridFilter<'text'> => ({
8
+ ...textFilter(key),
9
+ field: { fieldName: key },
10
+ getter: (value) => value[key] ?? '',
11
+ });
12
+
13
+ export const advancedNumberFilter = (
14
+ key: string
15
+ ): AdvancedRequestDataGridFilter<'number'> => ({
16
+ ...numberFilter(key),
17
+ field: { fieldName: key },
18
+ getter: (value) => value[key] ?? 0,
19
+ });
@@ -0,0 +1,3 @@
1
+ export * from './advancedRequests';
2
+ export * from './columns';
3
+ export * from './filters';
@@ -1,5 +1,4 @@
1
1
  import {
2
- AdvancedRequestRow,
3
2
  ConditionDTO,
4
3
  FieldDTO,
5
4
  OrderByDTO,
@@ -8,22 +7,18 @@ import {
8
7
  import {
9
8
  DataGridColumns,
10
9
  DataGridFilters,
11
- DataGridProps,
12
10
  DataGridSort,
13
- } from './types';
14
- import { convertFiltersToConditions, getAdvancedRequestDto } from './helpers';
11
+ } from '../DataGrid/types';
12
+ import _, { debounce } from 'lodash';
13
+ import {
14
+ convertFiltersToConditions,
15
+ getAdvancedRequestDto,
16
+ parseJsonObjectFields,
17
+ } from './helpers';
15
18
  import { useCallback, useEffect, useRef, useState } from 'react';
16
19
 
17
- import { DataGrid } from '.';
18
- import { debounce } from 'lodash';
19
-
20
- export type AdvancedRequestDataGridProps<R> = Omit<DataGridProps<R>, 'rows'> & {
21
- type: string;
22
- orderBy?: OrderByDTO[];
23
- conditions?: ConditionDTO[];
24
- addIdColumn?: boolean;
25
- parser?: (row: AdvancedRequestRow<R>) => R;
26
- };
20
+ import { AdvancedRequestDataGridProps } from './types';
21
+ import { DataGrid } from '../DataGrid';
27
22
 
28
23
  const getColumnField = <R,>(
29
24
  columns: DataGridColumns<R>,
@@ -53,7 +48,9 @@ export const AdvancedRequestDataGrid = <R,>(
53
48
  const [total, setTotal] = useState(-1);
54
49
  const advancedRequest = useAdvancedRequestHandler<R>();
55
50
 
56
- const [conditions, setConditions] = useState<ConditionDTO[]>([]);
51
+ const [conditions, setConditions] = useState<Record<string, ConditionDTO>>(
52
+ {}
53
+ );
57
54
  const [orderBy, setOrderBy] = useState<OrderByDTO[]>(
58
55
  props.orderBy ?? [
59
56
  {
@@ -70,17 +67,17 @@ export const AdvancedRequestDataGrid = <R,>(
70
67
  setTotal(-1);
71
68
  }, []);
72
69
 
73
- const onFiltersChanged = useCallback((filters: DataGridFilters<R>) => {
74
- console.log('filters changed', filters);
75
- const newConditions = convertFiltersToConditions(filters);
76
- console.log('new conditions:', newConditions);
77
- setTotal(-1);
78
- setConditions(newConditions);
79
- }, []);
70
+ const onFiltersChanged = useCallback(
71
+ (filters: DataGridFilters) => {
72
+ const newConditions = convertFiltersToConditions(filters, props.columns);
73
+ setTotal(-1);
74
+ setConditions(newConditions);
75
+ },
76
+ [props.columns]
77
+ );
80
78
 
81
79
  const onSortsChanged = useCallback(
82
80
  (sorts: Record<string, DataGridSort>) => {
83
- console.log('sorts changed', sorts);
84
81
  refresh();
85
82
  setOrderBy(
86
83
  Object.entries(sorts).map(
@@ -120,8 +117,10 @@ export const AdvancedRequestDataGrid = <R,>(
120
117
  currentRows.current = Array(response.total).fill(null);
121
118
  if (getTotal) setTotal(response.total ?? 0);
122
119
  }
123
- const parsedRows = response.data.map(
124
- props.parser ?? ((row) => row as R)
120
+ const parsedRows = parseJsonObjectFields(
121
+ response.data,
122
+ columns,
123
+ props.parser
125
124
  );
126
125
  currentRows.current.splice(start, length, ...parsedRows);
127
126
  setRows([...currentRows.current]);
@@ -135,13 +134,16 @@ export const AdvancedRequestDataGrid = <R,>(
135
134
  (columnKey: string) => {
136
135
  return advancedRequest({
137
136
  fields: [
138
- {
139
- fieldName: columnKey,
140
- },
137
+ props.columns[columnKey].filter?.field ??
138
+ props.columns[columnKey].field ?? {
139
+ fieldName: columnKey,
140
+ },
141
141
  ],
142
142
  conditions: [
143
143
  ...(props.conditions ?? []),
144
- ...conditions,
144
+ ...Object.values(
145
+ _.pickBy(conditions, (condition, key) => key !== columnKey)
146
+ ),
145
147
  {
146
148
  field: {
147
149
  fieldName: 'DeletedAt',
@@ -155,26 +157,30 @@ export const AdvancedRequestDataGrid = <R,>(
155
157
  ),
156
158
  orderBy: [
157
159
  {
158
- field: { fieldName: columnKey },
160
+ field: props.columns[columnKey].filter?.field ??
161
+ props.columns[columnKey].field ?? {
162
+ fieldName: columnKey,
163
+ },
159
164
  direction: 'ASC',
160
165
  },
161
166
  ],
162
167
  type: props.type,
163
168
  getTotal: false,
164
169
  unique: true,
165
- }).then((response) => {
166
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
- return response.data.map((row: any) => row[columnKey]);
168
- });
170
+ }).then((response) =>
171
+ response.data.map(
172
+ (row) => props.columns[columnKey].filter?.getter?.(row) ?? null
173
+ )
174
+ );
169
175
  },
170
- [advancedRequest, conditions, props.conditions, props.type]
176
+ [advancedRequest, conditions, props.columns, props.conditions, props.type]
171
177
  );
172
178
 
173
179
  useEffect(
174
180
  () =>
175
181
  loadRows.current(
176
182
  props.columns,
177
- [...(props.conditions ?? []), ...(conditions ?? [])],
183
+ [...(props.conditions ?? []), ...(Object.values(conditions) ?? [])],
178
184
  orderBy,
179
185
  start,
180
186
  length,
@@ -189,13 +195,16 @@ export const AdvancedRequestDataGrid = <R,>(
189
195
  getAdvancedRequestDto({
190
196
  type: props.type,
191
197
  columns: props.columns,
192
- conditions: [...(props.conditions ?? []), ...(conditions ?? [])],
198
+ conditions: [
199
+ ...(props.conditions ?? []),
200
+ ...(Object.values(conditions) ?? []),
201
+ ],
193
202
  orderBy,
194
203
  start: 0,
195
204
  length: total,
196
205
  })
197
206
  ).then((response) =>
198
- response.data.map(props.parser ?? ((row) => row as R))
207
+ parseJsonObjectFields(response.data, props.columns, props.parser)
199
208
  ),
200
209
  [
201
210
  advancedRequest,
@@ -0,0 +1,44 @@
1
+ import {
2
+ AdvancedRequestRow,
3
+ ConditionDTO,
4
+ FieldDTO,
5
+ OrderByDTO,
6
+ } from '../../../services/advancedRequests';
7
+ import {
8
+ DataGridColumn,
9
+ DataGridFilter,
10
+ DataGridFilterType,
11
+ DataGridProps,
12
+ } from '../DataGrid/types';
13
+
14
+ export type AdvancedRequestDataGridFilter<
15
+ T extends DataGridFilterType = DataGridFilterType
16
+ > = DataGridFilter<T> & {
17
+ field?: FieldDTO;
18
+ };
19
+
20
+ export type AdvancedRequestDataGridFilters = Record<
21
+ string,
22
+ AdvancedRequestDataGridFilter
23
+ >;
24
+
25
+ export type AdvancedRequestDataGridColumn<R> = DataGridColumn<R> & {
26
+ filter?: AdvancedRequestDataGridFilter;
27
+ };
28
+
29
+ export type AdvancedRequestDataGridColumns<R> = Record<
30
+ string,
31
+ AdvancedRequestDataGridColumn<R>
32
+ >;
33
+
34
+ export type AdvancedRequestDataGridProps<R> = Omit<
35
+ DataGridProps<R>,
36
+ 'rows' | 'columns'
37
+ > & {
38
+ columns: AdvancedRequestDataGridColumns<R>;
39
+ type: string;
40
+ orderBy?: OrderByDTO[];
41
+ conditions?: ConditionDTO[];
42
+ addIdColumn?: boolean;
43
+ parser?: (row: AdvancedRequestRow<R>) => R;
44
+ };
@@ -3,17 +3,14 @@
3
3
 
4
4
  import * as styles from './styles';
5
5
 
6
- import { DataGridCellProps, DataGridColumn, DataGridFilterType } from './types';
6
+ import { DataGridCellProps, DataGridColumn } from './types';
7
7
  import { MouseEvent, useCallback } from 'react';
8
8
 
9
9
  import { DataGridEditableCell } from './DataGridEditableCell';
10
10
  import { join } from 'lodash';
11
11
  import { useDataGridContext } from './hooks';
12
12
 
13
- const defaultRender = <R,>(
14
- col: DataGridColumn<R, DataGridFilterType | undefined>,
15
- row: R
16
- ) => {
13
+ const defaultRender = <R,>(row: R, col: DataGridColumn<R>) => {
17
14
  const value = col.propertyName ? row[col.propertyName] : '';
18
15
  return !value ? '' : String(value);
19
16
  };
@@ -72,7 +69,7 @@ export const DataGridCell = <R,>({
72
69
  onDoubleClick={onDoubleClick}
73
70
  style={style}
74
71
  >
75
- {(column.render ?? defaultRender)(column, row)}
72
+ {(column.render ?? defaultRender)(row, column)}
76
73
  </styles.DataGridCell>
77
74
  );
78
75
  };
@@ -3,6 +3,7 @@
3
3
 
4
4
  import * as styles from './styles';
5
5
 
6
+ import { DataGridContext, MysqlJsonObject } from '../types';
6
7
  import { FilterIcon, FilterSlashIcon, MagnifierIcon } from '../../../../Icons';
7
8
  import { applyFilters, getDateGroups } from '../helpers';
8
9
  import { intersection, uniq, without } from 'lodash';
@@ -15,7 +16,6 @@ import {
15
16
  useState,
16
17
  } from 'react';
17
18
 
18
- import { DataGridContext } from '../types';
19
19
  import { FilterValuesScroller } from '../FilterValuesScroller';
20
20
  import { Input } from '../../../forms';
21
21
  import { useFilterModal } from './hooks';
@@ -45,7 +45,7 @@ export const DataGridFilterMenu = <R,>({
45
45
  const [textFilter, setTextFilter] = useState('');
46
46
 
47
47
  const [availableValues, setAvailableValues] = useState<
48
- (string | number | null)[]
48
+ (string | number | null | MysqlJsonObject)[]
49
49
  >([]);
50
50
 
51
51
  useEffect(() => {
@@ -36,13 +36,13 @@ export const DataGridFooter = <R,>({
36
36
  }}
37
37
  >
38
38
  {!!selectable && (
39
- <th
39
+ <div
40
40
  // className="inline-block w-12 select-none"
41
41
  key="__select_checkbox__"
42
- ></th>
42
+ ></div>
43
43
  )}
44
44
  {visibleColumns.map(([key, col]) => (
45
- <th
45
+ <div
46
46
  key={key}
47
47
  className={join(
48
48
  [
@@ -56,7 +56,7 @@ export const DataGridFooter = <R,>({
56
56
  style={{ width: (col.width ?? 150) + 'px' }}
57
57
  >
58
58
  {col.footer?.(rows, sortedRows, selectedRows)}
59
- </th>
59
+ </div>
60
60
  ))}
61
61
  </tr>
62
62
  </tfoot>