@addev-be/ui 0.6.9 → 0.6.11

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.6.9",
3
+ "version": "0.6.11",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "watch": "tsc -b --watch",
@@ -34,6 +34,7 @@ export const useDataGrid = <R,>(
34
34
  onSortsChanged,
35
35
  loadCopyRows,
36
36
  onSelectionChange,
37
+ onSelectedRowsChanged,
37
38
  selectable,
38
39
  initialSorts,
39
40
  } = props;
@@ -87,6 +88,9 @@ export const useDataGrid = <R,>(
87
88
  useEffect(() => {
88
89
  onSelectionChange?.(selectedKeys);
89
90
  }, [onSelectionChange, selectedKeys]);
91
+ useEffect(() => {
92
+ onSelectedRowsChanged?.(selectedRows);
93
+ }, [onSelectedRowsChanged, selectedRows]);
90
94
 
91
95
  const toggleSelection = useCallback(
92
96
  (key: string) => {
@@ -1,7 +1,13 @@
1
1
  import * as styles from './styles';
2
2
 
3
- import { Context, useRef } from 'react';
4
- import { DataGridContextProps, DataGridProps } from './types';
3
+ import {
4
+ Context,
5
+ ForwardedRef,
6
+ forwardRef,
7
+ useImperativeHandle,
8
+ useRef,
9
+ } from 'react';
10
+ import { DataGridContextProps, DataGridProps, DataGridRefProps } from './types';
5
11
 
6
12
  import { DataGridFooter } from './DataGridFooter';
7
13
  import { DataGridHeader } from './DataGridHeader';
@@ -12,12 +18,15 @@ import { useDataGrid } from './hooks';
12
18
  /* eslint-disable @typescript-eslint/no-explicit-any */
13
19
  /* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
14
20
 
15
- export const DataGrid = <R,>({
16
- contextOverride,
17
- ...props
18
- }: DataGridProps<R> & {
19
- contextOverride?: Partial<DataGridContextProps<R>>;
20
- }) => {
21
+ export const DataGridInner = <R,>(
22
+ {
23
+ contextOverride,
24
+ ...props
25
+ }: DataGridProps<R> & {
26
+ contextOverride?: Partial<DataGridContextProps<R>>;
27
+ },
28
+ ref: ForwardedRef<DataGridRefProps<R>>
29
+ ) => {
21
30
  const scrollableRef = useRef<HTMLDivElement>(null);
22
31
  const { className } = props;
23
32
  const [contextProps, DataGridContext] = useDataGrid(props, contextOverride);
@@ -28,8 +37,17 @@ export const DataGrid = <R,>({
28
37
  gridTemplateColumns,
29
38
  sortedRows,
30
39
  onVisibleRowsChange,
40
+ refresh,
31
41
  } = contextProps;
32
42
 
43
+ useImperativeHandle(
44
+ ref,
45
+ () => ({
46
+ refresh,
47
+ }),
48
+ [refresh]
49
+ );
50
+
33
51
  const hasFooter = Object.values(columns).some((col) => col.footer);
34
52
 
35
53
  const rowTemplate = DataGridRowTemplate;
@@ -58,3 +76,5 @@ export const DataGrid = <R,>({
58
76
  </DataGridContext.Provider>
59
77
  );
60
78
  };
79
+
80
+ export const DataGrid = forwardRef(DataGridInner);
@@ -73,6 +73,7 @@ export type DataGridProps<R> = {
73
73
  editable?: boolean;
74
74
  onRowDoubleClick?: (row: R, e: MouseEvent) => void;
75
75
  onSelectionChange?: (keys: string[]) => void;
76
+ onSelectedRowsChanged?: (rows: R[]) => void;
76
77
  getAllIds?: () => Promise<string[]>;
77
78
  onFiltersChanged?: (filters: DataGridFilters) => void;
78
79
  onSortsChanged?: (sorts: Record<string, DataGridSort>) => void;
@@ -268,3 +269,5 @@ export type DataGridRowTemplateProps<R> = {
268
269
  toggleSelection?: () => void;
269
270
  context: DataGridContext<R>;
270
271
  };
272
+
273
+ export type DataGridRefProps<R> = Pick<DataGridContextProps<R>, 'refresh'>;
@@ -8,20 +8,33 @@ import {
8
8
  import {
9
9
  DataGridFilters,
10
10
  DataGridFooterFunction,
11
+ DataGridRefProps,
11
12
  DataGridSort,
12
13
  } from '../DataGrid/types';
14
+ import {
15
+ ForwardedRef,
16
+ forwardRef,
17
+ useCallback,
18
+ useEffect,
19
+ useImperativeHandle,
20
+ useMemo,
21
+ useRef,
22
+ useState,
23
+ } from 'react';
13
24
  import _, { debounce } from 'lodash';
14
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
15
25
 
16
26
  import { DataGrid } from '../DataGrid';
17
27
  import { SqlRequestDataGridProps } from './types';
18
28
  import { convertSqlFiltersToConditions } from './helpers';
19
29
  import { isColumnVisible } from '../DataGrid/helpers';
20
30
 
21
- export const SqlRequestDataGrid = <R,>({
22
- onSelectionChange: onSelectionChangeFromProps,
23
- ...props
24
- }: SqlRequestDataGridProps<R>) => {
31
+ export const SqlRequestDataGridInner = <R,>(
32
+ {
33
+ onSelectionChange: onSelectionChangeFromProps,
34
+ ...props
35
+ }: SqlRequestDataGridProps<R>,
36
+ ref: ForwardedRef<DataGridRefProps<R>>
37
+ ) => {
25
38
  const currentRows = useRef<R[]>([]);
26
39
  const [rows, setRows] = useState<R[]>([]);
27
40
  const [start, setStart] = useState(0);
@@ -331,6 +344,14 @@ export const SqlRequestDataGrid = <R,>({
331
344
  [footers, setFooters, footerFunctions]
332
345
  );
333
346
 
347
+ useImperativeHandle(
348
+ ref,
349
+ () => ({
350
+ refresh,
351
+ }),
352
+ [refresh]
353
+ );
354
+
334
355
  return (
335
356
  <DataGrid
336
357
  onVisibleRowsChange={onVisibleRowsChanged}
@@ -349,3 +370,5 @@ export const SqlRequestDataGrid = <R,>({
349
370
  />
350
371
  );
351
372
  };
373
+
374
+ export const SqlRequestDataGrid = forwardRef(SqlRequestDataGridInner);
@@ -5,22 +5,34 @@ import {
5
5
  OrderByDTO,
6
6
  useSqlRequestHandler,
7
7
  } from '../../../services/sqlRequests';
8
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
+ import {
9
+ ForwardedRef,
10
+ forwardRef,
11
+ useCallback,
12
+ useEffect,
13
+ useImperativeHandle,
14
+ useMemo,
15
+ useRef,
16
+ useState,
17
+ } from 'react';
18
+ import { SqlRequestGridProps, SqlRequestGridRefProps } from './types';
9
19
 
10
- import { SqlRequestGridProps } from './types';
11
20
  import { VirtualScroller } from '../VirtualScroller';
12
21
  import { debounce } from 'lodash';
13
22
  import { isColumnVisible } from '../DataGrid/helpers';
14
23
 
15
24
  // eslint-disable-next-line @typescript-eslint/no-empty-object-type
16
- export const SqlRequestGrid = <R, P extends object = {}>({
17
- rowHeight = styles.DEFAULT_ROW_HEIGHT,
18
- itemsPerRow,
19
- itemTemplate,
20
- itemProps,
21
- gap,
22
- ...props
23
- }: SqlRequestGridProps<R, P>) => {
25
+ export const SqlRequestGridInner = <R, P extends object = {}>(
26
+ {
27
+ rowHeight = styles.DEFAULT_ROW_HEIGHT,
28
+ itemsPerRow,
29
+ itemTemplate,
30
+ itemProps,
31
+ gap,
32
+ ...props
33
+ }: SqlRequestGridProps<R, P>,
34
+ ref: ForwardedRef<SqlRequestGridRefProps>
35
+ ) => {
24
36
  const currentRows = useRef<R[]>([]);
25
37
  const [rows, setRows] = useState<R[]>([]);
26
38
  const [start, setStart] = useState(0);
@@ -128,6 +140,21 @@ export const SqlRequestGrid = <R, P extends object = {}>({
128
140
  [length, start]
129
141
  );
130
142
 
143
+ const refresh = useCallback(() => {
144
+ setRows([]);
145
+ setStart(0);
146
+ setLength(50);
147
+ setCount(-1);
148
+ }, []);
149
+
150
+ useImperativeHandle(
151
+ ref,
152
+ () => ({
153
+ refresh,
154
+ }),
155
+ [refresh]
156
+ );
157
+
131
158
  return (
132
159
  <styles.SqlRequestGridContainer>
133
160
  <VirtualScroller
@@ -143,3 +170,5 @@ export const SqlRequestGrid = <R, P extends object = {}>({
143
170
  </styles.SqlRequestGridContainer>
144
171
  );
145
172
  };
173
+
174
+ export const SqlRequestGrid = forwardRef(SqlRequestGridInner);
@@ -44,3 +44,7 @@ export type SqlRequestGridProps<R, P extends object = {}> = {
44
44
  parser?: (row: SqlRequestRow<R>) => R;
45
45
  itemProps: P;
46
46
  };
47
+
48
+ export type SqlRequestGridRefProps = {
49
+ refresh: () => void;
50
+ };
package/src/typings.d.ts CHANGED
@@ -4,3 +4,10 @@
4
4
  export type DeepPartial<T> = {
5
5
  [P in keyof T]?: DeepPartial<T[P]>;
6
6
  };
7
+
8
+ declare module 'react' {
9
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
10
+ function forwardRef<T, P = {}>(
11
+ render: (props: P, ref: React.Ref<T>) => React.ReactNode | null
12
+ ): (props: P & React.RefAttributes<T>) => React.ReactNode | null;
13
+ }