@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@addev-be/ui",
3
- "version": "0.20.3",
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.3",
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 { DataGridCellProps, DataGridColumn } from './types';
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 = <R,>(row: R, col: DataGridColumn<R>) => {
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 = !!editable && !!column.editable && !!column.editComponent;
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?: (row: R, column: DataGridColumn<R>) => ReactNode | string;
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: DataGridColumn<R>;
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
- export type EditableDataGridCellProps<R, T> = DataGridCellProps<R> & {
262
- column: EditableDataGridColumn<R, T>;
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: (row) => row[key] ?? '',
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: (row) => <a href={`mailto:${row[key]}`}>{row[key] ?? ''}</a>,
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: (row) => <a href={`tel:${row[key]}`}>{row[key] ?? ''}</a>,
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: (row) => formatDate(row[key]),
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: (row) => formatDateTime(row[key]),
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: (row) => (row[key] ? `${row[key]} mois ` : ''),
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: (row) => formatNumber(row[key], decimals) ?? '',
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(row[key], decimals, currency(row)) ?? ''
236
- : (row) => formatMoney(row[key], decimals, currency) ?? '',
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: (row) => formatPercentage(row[key]) ?? '',
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: (row) => {
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: (row) => (
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: (row) => (
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
  &nbsp;
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
+ };