@addev-be/ui 0.20.3 → 0.20.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.
- package/package.json +2 -2
- package/src/components/data/DataGrid/DataGridCell.tsx +13 -11
- package/src/components/data/DataGrid/types.ts +9 -6
- package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +16 -21
- package/src/components/forms/Form/Checkbox.tsx +1 -1
- package/src/components/ui/Tab/types.ts +17 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@addev-be/ui",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"watch": "tsc -b --watch",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"update-version": "../../node/update-version.mjs"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@addev-be/framework-utils": "^0.20.
|
|
23
|
+
"@addev-be/framework-utils": "^0.20.4",
|
|
24
24
|
"@types/lodash": "^4",
|
|
25
25
|
"@types/react": "^18.3.3",
|
|
26
26
|
"@types/react-dom": "^18.3.0",
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
|
|
3
2
|
|
|
4
3
|
import * as styles from './styles';
|
|
5
4
|
|
|
6
|
-
import {
|
|
7
|
-
import { MouseEvent, useCallback } from 'react';
|
|
5
|
+
import { MouseEvent, useCallback, useMemo } from 'react';
|
|
8
6
|
|
|
7
|
+
import { DataGridCellProps } from './types';
|
|
9
8
|
import { DataGridEditableCell } from './DataGridEditableCell';
|
|
10
9
|
import { useDataGridContext } from './hooks';
|
|
11
10
|
|
|
12
|
-
const defaultRender =
|
|
13
|
-
const value = col.getter(row);
|
|
14
|
-
return !value ? '' : String(value);
|
|
15
|
-
};
|
|
11
|
+
const defaultRender = (value: any) => (!value ? '' : String(value));
|
|
16
12
|
|
|
17
|
-
export const DataGridCell = <R
|
|
13
|
+
export const DataGridCell = <R, T>({
|
|
18
14
|
row,
|
|
19
15
|
rowIndex,
|
|
20
16
|
columnKey,
|
|
@@ -22,7 +18,7 @@ export const DataGridCell = <R,>({
|
|
|
22
18
|
column,
|
|
23
19
|
context,
|
|
24
20
|
style,
|
|
25
|
-
}: DataGridCellProps<R>) => {
|
|
21
|
+
}: DataGridCellProps<R, T>) => {
|
|
26
22
|
const {
|
|
27
23
|
name,
|
|
28
24
|
editable,
|
|
@@ -31,11 +27,17 @@ export const DataGridCell = <R,>({
|
|
|
31
27
|
onRowDoubleClick,
|
|
32
28
|
userSelect,
|
|
33
29
|
} = useDataGridContext(context);
|
|
34
|
-
const isEditable =
|
|
30
|
+
const isEditable =
|
|
31
|
+
!!editable &&
|
|
32
|
+
'editable' in column &&
|
|
33
|
+
!!column.editable &&
|
|
34
|
+
!!column.editComponent;
|
|
35
35
|
const isEditing =
|
|
36
36
|
isEditable && editingCell[0] === rowIndex && editingCell[1] === columnIndex;
|
|
37
37
|
const DataGridCellComponent = column.component ?? styles.DataGridCell;
|
|
38
38
|
|
|
39
|
+
const value = useMemo(() => column.getter(row), [column, row]);
|
|
40
|
+
|
|
39
41
|
const onDoubleClick = useCallback(
|
|
40
42
|
(e: MouseEvent) => {
|
|
41
43
|
e.stopPropagation();
|
|
@@ -71,7 +73,7 @@ export const DataGridCell = <R,>({
|
|
|
71
73
|
$color={column.color}
|
|
72
74
|
$textAlign={column.textAlign}
|
|
73
75
|
>
|
|
74
|
-
{(column.render ?? defaultRender)(row, column)}
|
|
76
|
+
{(column.render ?? defaultRender)(value, row, column)}
|
|
75
77
|
</DataGridCellComponent>
|
|
76
78
|
);
|
|
77
79
|
};
|
|
@@ -58,7 +58,11 @@ type CommonGridColumnProps<R, T> = {
|
|
|
58
58
|
name: ReactNode;
|
|
59
59
|
order?: number;
|
|
60
60
|
getter: (row: R) => T;
|
|
61
|
-
render?: (
|
|
61
|
+
render?: (
|
|
62
|
+
value: T,
|
|
63
|
+
row: R,
|
|
64
|
+
column: CommonGridColumnProps<R, T>
|
|
65
|
+
) => ReactNode | string;
|
|
62
66
|
resizable?: boolean;
|
|
63
67
|
sortGetter?: (row: R) => string | number;
|
|
64
68
|
width?: number;
|
|
@@ -246,21 +250,20 @@ export type DataGridSettingsTuple = [string, DataGridSetting];
|
|
|
246
250
|
export type DataGridSettingsArray = DataGridSettingsTuple[];
|
|
247
251
|
export type DataGridColumnKeyValuePair<R> = [string, DataGridColumn<R>];
|
|
248
252
|
|
|
249
|
-
export type DataGridCellProps<R> = {
|
|
253
|
+
export type DataGridCellProps<R, T> = {
|
|
250
254
|
row: R;
|
|
251
255
|
rowIndex: number;
|
|
252
256
|
columnKey: string;
|
|
253
257
|
columnIndex: number;
|
|
254
|
-
column:
|
|
258
|
+
column: CommonGridColumnProps<R, T> | EditableDataGridColumn<R, T>;
|
|
255
259
|
context: DataGridContext<R>;
|
|
256
260
|
className?: string;
|
|
257
261
|
style?: CSSProperties;
|
|
258
262
|
userSelect?: boolean;
|
|
259
263
|
color?: ThemeColor;
|
|
260
264
|
};
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
};
|
|
265
|
+
|
|
266
|
+
export type EditableDataGridCellProps<R, T> = DataGridCellProps<R, T> & {};
|
|
264
267
|
|
|
265
268
|
export type DataGridHeaderCellProps<R> = {
|
|
266
269
|
columnKey: string;
|
|
@@ -44,7 +44,7 @@ export const sqlTextColumn = <R extends Record<string, any>>(
|
|
|
44
44
|
key,
|
|
45
45
|
type: 'text',
|
|
46
46
|
name: title,
|
|
47
|
-
render: (
|
|
47
|
+
render: (value) => value ?? '',
|
|
48
48
|
getter: (row) => row[key] ?? '',
|
|
49
49
|
sortGetter: (row) => row[key] ?? '',
|
|
50
50
|
filter: { ...textFilter(key), getter: (value) => value[key] ?? '' },
|
|
@@ -64,7 +64,7 @@ export const sqlMailColumn = <R extends Record<string, any>>(
|
|
|
64
64
|
key,
|
|
65
65
|
type: 'text',
|
|
66
66
|
name: title,
|
|
67
|
-
render: (
|
|
67
|
+
render: (value) => <a href={`mailto:${value}`}>{value ?? ''}</a>,
|
|
68
68
|
getter: (row) => row[key] ?? '',
|
|
69
69
|
sortGetter: (row) => row[key] ?? '',
|
|
70
70
|
filter: { ...textFilter(key), getter: (value) => value[key] ?? '' },
|
|
@@ -84,7 +84,7 @@ export const sqlPhoneColumn = <R extends Record<string, any>>(
|
|
|
84
84
|
key,
|
|
85
85
|
type: 'text',
|
|
86
86
|
name: title,
|
|
87
|
-
render: (
|
|
87
|
+
render: (value) => <a href={`tel:${value}`}>{value ?? ''}</a>,
|
|
88
88
|
getter: (row) => row[key] ?? '',
|
|
89
89
|
sortGetter: (row) => row[key] ?? '',
|
|
90
90
|
filter: { ...textFilter(key), getter: (value) => value[key] ?? '' },
|
|
@@ -104,7 +104,7 @@ export const sqlDateColumn = <R extends Record<string, any>>(
|
|
|
104
104
|
key,
|
|
105
105
|
name: title,
|
|
106
106
|
type: 'date',
|
|
107
|
-
render: (
|
|
107
|
+
render: (value) => formatDate(value),
|
|
108
108
|
getter: (row) => row[key] ?? '',
|
|
109
109
|
sortGetter: (row) => row[key] ?? '',
|
|
110
110
|
excelOptions: {
|
|
@@ -133,7 +133,7 @@ export const sqlDateTimeColumn = <R extends Record<string, any>>(
|
|
|
133
133
|
key,
|
|
134
134
|
name: title,
|
|
135
135
|
type: 'date',
|
|
136
|
-
render: (
|
|
136
|
+
render: (value) => formatDateTime(value),
|
|
137
137
|
getter: (row) => row[key] ?? '',
|
|
138
138
|
sortGetter: (row) => row[key] ?? '',
|
|
139
139
|
excelOptions: {
|
|
@@ -162,7 +162,7 @@ export const sqlMonthColumn = <R extends Record<string, any>>(
|
|
|
162
162
|
key,
|
|
163
163
|
type: 'text',
|
|
164
164
|
name: title,
|
|
165
|
-
render: (
|
|
165
|
+
render: (value) => (value ? `${value} mois ` : ''),
|
|
166
166
|
getter: (row) => row[key] ?? '',
|
|
167
167
|
sortGetter: (row) => row[key] ?? '',
|
|
168
168
|
filter: { ...textFilter(key), getter: (value) => value[key] ?? '' },
|
|
@@ -183,7 +183,7 @@ export const sqlNumberColumn = <R extends Record<string, any>>(
|
|
|
183
183
|
type: 'number',
|
|
184
184
|
decimals,
|
|
185
185
|
textAlign: 'right',
|
|
186
|
-
render: (
|
|
186
|
+
render: (value) => formatNumber(value, decimals) ?? '',
|
|
187
187
|
excelOptions: {
|
|
188
188
|
formatter: () => buildExcelFormat(decimals),
|
|
189
189
|
valueGetter: (value) => formatNumberInvariant(value, decimals),
|
|
@@ -232,8 +232,8 @@ export const sqlMoneyColumn = <R extends Record<string, any>>(
|
|
|
232
232
|
textAlign: 'right',
|
|
233
233
|
render:
|
|
234
234
|
typeof currency === 'function'
|
|
235
|
-
? (row) => formatMoney(
|
|
236
|
-
: (
|
|
235
|
+
? (value, row) => formatMoney(value, decimals, currency(row)) ?? ''
|
|
236
|
+
: (value) => formatMoney(value, decimals, currency) ?? '',
|
|
237
237
|
excelOptions: {
|
|
238
238
|
formatter:
|
|
239
239
|
typeof currency === 'function'
|
|
@@ -280,7 +280,7 @@ export const sqlPercentageColumn = <R extends Record<string, any>>(
|
|
|
280
280
|
key,
|
|
281
281
|
name: title,
|
|
282
282
|
type: 'number',
|
|
283
|
-
render: (
|
|
283
|
+
render: (value) => formatPercentage(value) ?? '',
|
|
284
284
|
excelOptions: {
|
|
285
285
|
formatter: () => buildExcelFormat(decimals, '%'),
|
|
286
286
|
valueGetter: (value) => formatNumberInvariant(value, decimals),
|
|
@@ -314,8 +314,7 @@ export const sqlCheckboxColumn = <R extends Record<string, any>>(
|
|
|
314
314
|
key,
|
|
315
315
|
name: title,
|
|
316
316
|
type: 'checkbox',
|
|
317
|
-
render: (
|
|
318
|
-
const value = !!+(row[key] ?? 0);
|
|
317
|
+
render: (value) => {
|
|
319
318
|
return (
|
|
320
319
|
<>
|
|
321
320
|
<input type="checkbox" checked={value} readOnly />
|
|
@@ -343,12 +342,10 @@ export const sqlImageColumn = <R extends Record<string, any>>(
|
|
|
343
342
|
key,
|
|
344
343
|
type: 'text',
|
|
345
344
|
name: title,
|
|
346
|
-
render: (
|
|
345
|
+
render: (value) => (
|
|
347
346
|
<SqlImageWrapper>
|
|
348
347
|
<SqlImage
|
|
349
|
-
src={
|
|
350
|
-
row[key] ? `${urlPrefix}${row[key]}` : `${urlPrefix}no-image.png`
|
|
351
|
-
}
|
|
348
|
+
src={value ? `${urlPrefix}${value}` : `${urlPrefix}no-image.png`}
|
|
352
349
|
alt={title}
|
|
353
350
|
/>
|
|
354
351
|
</SqlImageWrapper>
|
|
@@ -370,10 +367,8 @@ export const sqlColorColumn = <R extends Record<string, any>>(
|
|
|
370
367
|
key,
|
|
371
368
|
type: 'text',
|
|
372
369
|
name: title,
|
|
373
|
-
render: (
|
|
374
|
-
<div
|
|
375
|
-
style={{ position: 'absolute', inset: 0, backgroundColor: row[key] }}
|
|
376
|
-
>
|
|
370
|
+
render: (value) => (
|
|
371
|
+
<div style={{ position: 'absolute', inset: 0, backgroundColor: value }}>
|
|
377
372
|
|
|
378
373
|
</div>
|
|
379
374
|
),
|
|
@@ -441,7 +436,7 @@ export const sqlForeignListColumn = <
|
|
|
441
436
|
type: 'foreignList',
|
|
442
437
|
getter: (row) => row[key] ?? '',
|
|
443
438
|
sortGetter: (row) => row[key] ?? '',
|
|
444
|
-
render: (row) => (
|
|
439
|
+
render: (value, row) => (
|
|
445
440
|
<ItemTemplate
|
|
446
441
|
item={convertRowToItem<R, T>(row, columnMapping)}
|
|
447
442
|
index={0}
|
|
@@ -6,7 +6,7 @@ import { StyledCheckbox } from './styles';
|
|
|
6
6
|
export const Checkbox: FC<
|
|
7
7
|
FormRowProps & InputHTMLAttributes<HTMLInputElement>
|
|
8
8
|
> = ({ label, icon, ...props }) => (
|
|
9
|
-
<FormRow label={label} icon={icon}>
|
|
9
|
+
<FormRow label={label} icon={icon} readOnly={props.readOnly}>
|
|
10
10
|
<StyledCheckbox {...props} />
|
|
11
11
|
</FormRow>
|
|
12
12
|
);
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { ThemeColor, ThemeColorWithIntensity } from '../../../providers';
|
|
2
|
-
|
|
3
|
-
import { IconFC } from '../../../Icons';
|
|
4
|
-
import { ReactNode } from 'react';
|
|
5
|
-
|
|
6
|
-
export type Tab = {
|
|
7
|
-
color?: ThemeColorWithIntensity | ThemeColor;
|
|
8
|
-
content: ReactNode;
|
|
9
|
-
icon?: IconFC;
|
|
10
|
-
key?: string;
|
|
11
|
-
tabName: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export type TabProps = {
|
|
15
|
-
tabs: Tab[];
|
|
16
|
-
overflow?: boolean;
|
|
17
|
-
};
|
|
1
|
+
import { ThemeColor, ThemeColorWithIntensity } from '../../../providers';
|
|
2
|
+
|
|
3
|
+
import { IconFC } from '../../../Icons';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
|
|
6
|
+
export type Tab = {
|
|
7
|
+
color?: ThemeColorWithIntensity | ThemeColor;
|
|
8
|
+
content: ReactNode;
|
|
9
|
+
icon?: IconFC;
|
|
10
|
+
key?: string;
|
|
11
|
+
tabName: string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type TabProps = {
|
|
15
|
+
tabs: Tab[];
|
|
16
|
+
overflow?: boolean;
|
|
17
|
+
};
|