@azrico/reactgrid 1.0.11 → 1.0.13

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.
@@ -50,19 +50,29 @@ const customColumns = [{
50
50
  const contextMenuItems = ['test'];
51
51
  function getData() {
52
52
  const fd = [];
53
- for (let index = 0; index < 5; index++) {
53
+ for (let index = 0; index < 16; index++) {
54
54
  fd.push({
55
55
  __table_id: String(index),
56
56
  username: 'user-' + index,
57
57
  age: 20
58
58
  });
59
59
  if (index % 5 == 0) {
60
+ const sub_selfid = 's' + index;
60
61
  fd.push({
61
- __table_id: 's' + index,
62
+ __table_id: sub_selfid,
62
63
  __parent__table_id: String(index),
63
- username: 'sub-user-' + index,
64
+ username: 'sub-' + index,
64
65
  age: 20
65
66
  });
67
+ if (index % 2 == 0) {
68
+ const sub2_selfid = 'ss' + index;
69
+ fd.push({
70
+ __table_id: sub2_selfid,
71
+ __parent__table_id: sub_selfid,
72
+ username: 'sub2-' + index,
73
+ age: 20
74
+ });
75
+ }
66
76
  }
67
77
  }
68
78
  return fd;
@@ -74,11 +84,17 @@ function ExampleGrid() {
74
84
  return _react.default.createElement("div", null, _react.default.createElement("div", null, 'Test'));
75
85
  };
76
86
  const [selected, setSelected] = _react.default.useState(null);
87
+ const [rows, set_rows] = _react.default.useState([]);
77
88
  const onSelectionChange = _react.default.useCallback(({
78
89
  selected
79
90
  }) => {
80
91
  setSelected(selected);
81
92
  }, []);
93
+ _react.default.useEffect(() => {
94
+ setTimeout(() => {
95
+ set_rows(getData());
96
+ }, 1000);
97
+ }, []);
82
98
  return _react.default.createElement(_DataGrid.default, {
83
99
  dark: true,
84
100
  allowChildRows: true,
@@ -87,7 +103,7 @@ function ExampleGrid() {
87
103
  contextMenuItems: contextMenuItems,
88
104
  customColumns: customColumns,
89
105
  columns: columns,
90
- rows: getData(),
106
+ rows: rows,
91
107
  leftColumns: leftColumns,
92
108
  gridOptions: {
93
109
  rowIndexColumn: true,
File without changes
@@ -5,33 +5,42 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.fix_parent_child_relations = fix_parent_child_relations;
7
7
  exports.func_selection = void 0;
8
+ function get_parentId(obj) {
9
+ return obj.__parent__table_id || obj.parent;
10
+ }
11
+ function get_selfId(obj) {
12
+ return obj.__table_id;
13
+ }
8
14
  //given an array of rows, fixes parent,child relations
9
15
  function fix_parent_child_relations(rows) {
10
16
  if (!Array.isArray(rows)) rows = [];
11
- const child_rows = [];
12
- const parent_rows = [];
13
- for (let index = 0; index < rows.length; index++) {
14
- const r = rows[index];
15
- if (r.__parent__table_id != undefined) child_rows.push(r);else parent_rows.push(r);
16
- }
17
- for (let index = 0; index < parent_rows.length; index++) {
18
- const pr = parent_rows[index];
19
- pr.__children = [];
20
- }
21
- //find parent for these children !
22
- for (let index = 0; index < child_rows.length; index++) {
23
- const child = child_rows[index];
24
- const parentOfChild = parent_rows.find(s => s.__table_id == child.__parent__table_id);
25
- if (!parentOfChild) continue; //no parent :(
26
- //@ts-ignore
27
- parentOfChild.__children.push(child);
17
+ const converted_rows = rows.filter(r => r != null).map(r => {
18
+ return {
19
+ parent: get_parentId(r),
20
+ self: get_selfId(r),
21
+ data: r
22
+ };
23
+ });
24
+ const top_level_rows = converted_rows.filter(r => !r.parent);
25
+ //find children of top-level parents:
26
+ for (let index = 0; index < top_level_rows.length; index++) {
27
+ const mrow = top_level_rows[index];
28
+ assign_children(mrow, converted_rows);
28
29
  }
29
- for (let index = 0; index < parent_rows.length; index++) {
30
- const pr = parent_rows[index];
31
- //@ts-ignore
32
- if (pr.__children.length == 0) pr.__children = undefined;
33
- }
34
- return parent_rows;
30
+ const result = top_level_rows.map(r => r.data);
31
+ console.log(result);
32
+ return result;
33
+ }
34
+ function assign_children(row, all_rows) {
35
+ const my_children = all_rows.filter(s => row.self == s.parent);
36
+ if (my_children.length > 0) {
37
+ //find children of my children:
38
+ for (let index = 0; index < my_children.length; index++) {
39
+ const child = my_children[index];
40
+ assign_children(child, all_rows);
41
+ }
42
+ row.data.__children = my_children.map(r => r.data);
43
+ } else row.data.__children = undefined;
35
44
  }
36
45
  class func_selection {
37
46
  static getVirtualElement(x = 0, y = 0) {
@@ -13,18 +13,20 @@ export type DataRowDefinition = any;
13
13
  export type DataSourceDefinition = TypeDataSource;
14
14
  export type OnSelectionChangeFunc = (config: TypeOnSelectionChangeArg) => void;
15
15
  export type RowDetailsFunc = (rowDetailsInfo: TypeRowDetailsInfo) => React.ReactNode;
16
- type loose_column_fields = {
17
- title: string;
16
+ type loose_column_names = {
18
17
  key: string;
19
18
  field: string;
20
19
  columnName: string;
21
20
  name: string;
22
21
  };
22
+ type loose_column_fields = loose_column_names & {
23
+ title: string;
24
+ };
23
25
  export type LooseColumnDefinition = Partial<loose_column_fields & ColumnDefinition>;
24
26
  type columnOrString = string | LooseColumnDefinition;
25
27
  type customColumnData = {
26
28
  name: string;
27
- render: (cell: any, formatterParams: any, onRendered: any) => React.ReactNode;
29
+ render: (cell: any, formatterParams: any, onRendered: any) => React.ReactNode | undefined | null;
28
30
  };
29
31
  type GridOptions = Partial<TypeDataGridProps>;
30
32
  export type AzGridProps = {
@@ -32,7 +34,9 @@ export type AzGridProps = {
32
34
  rows?: any[];
33
35
  licenseKey?: string;
34
36
  gridOptions?: GridOptions;
35
- tableColumnExtensions?: any[];
37
+ tableColumnExtensions?: Array<{
38
+ name: string;
39
+ } & Partial<ColumnDefinition>>;
36
40
  editableColumns?: string[];
37
41
  leftColumns?: string[];
38
42
  rightColumns?: string[];
@@ -9,7 +9,7 @@ require("@inovua/reactdatagrid-enterprise/index.css");
9
9
  require("@inovua/reactdatagrid-enterprise/theme/default-dark.css");
10
10
  require("../themes/styles.css");
11
11
  var _react = _interopRequireDefault(require("react"));
12
- var _helpers = require("./func/helpers");
12
+ var _helpers = require("../func/helpers");
13
13
  var _controls = require("@azrico/controls");
14
14
  var _reactdatagridEnterprise = _interopRequireDefault(require("@inovua/reactdatagrid-enterprise"));
15
15
  var _clsx = _interopRequireDefault(require("clsx"));
@@ -77,7 +77,9 @@ function AzGrid(props) {
77
77
  const ext_cl = get_col_name(ext);
78
78
  const mcol = final_columns.find(s => s.name === ext_cl);
79
79
  if (!mcol) continue;
80
- // if (ext.width) mcol.width = ext.width;
80
+ if (ext.width) mcol.width = ext.width;
81
+ if (ext.visible) mcol.visible = ext.visible;
82
+ if (ext.draggable) mcol.draggable = ext.draggable;
81
83
  // if (ext.widthGrow) mcol.widthGrow = ext.widthGrow;
82
84
  }
83
85
  /* ------------------------------- frozen cols ------------------------------ */
@@ -131,6 +133,7 @@ function AzGrid(props) {
131
133
  /* -------------------------------------------------------------------------- */
132
134
  _react.default.useEffect(() => {
133
135
  if (pendingChanges <= 0) return;
136
+ console.log('Updated Pending Changes: ', pendingChanges);
134
137
  let new_rows = [];
135
138
  if (typeof props.get_rows === 'function') {
136
139
  new_rows = props.get_rows();
@@ -144,9 +147,11 @@ function AzGrid(props) {
144
147
  set_pendingChanges(0);
145
148
  }, [pendingChanges]);
146
149
  _react.default.useEffect(() => {
150
+ console.log('Rows Changed !');
147
151
  set_pendingChanges(r => r + 1);
148
152
  }, [props.rows]);
149
153
  function onRowsChange(rows, options) {
154
+ console.log('onRowsChange');
150
155
  if (props.onRowsChange) props.onRowsChange(rows, options);
151
156
  set_pendingChanges(r => r + 1); //notify the cache to update rows after we made changes to them
152
157
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azrico/reactgrid",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "main": "dist/index.js",
5
5
  "description": "React Datagrid",
6
6
  "author": "Azrideus <MehrdadTavangar@gmail.com>",
package/src/example.tsx CHANGED
@@ -24,10 +24,15 @@ const customColumns = [
24
24
  const contextMenuItems = ['test'];
25
25
  function getData() {
26
26
  const fd: any[] = [];
27
- for (let index = 0; index < 5; index++) {
27
+ for (let index = 0; index < 16; index++) {
28
28
  fd.push({ __table_id: String(index), username: 'user-' + index, age: 20 });
29
29
  if (index % 5 == 0) {
30
- fd.push({ __table_id: 's' + index, __parent__table_id: String(index), username: 'sub-user-' + index, age: 20 });
30
+ const sub_selfid = 's' + index;
31
+ fd.push({ __table_id: sub_selfid, __parent__table_id: String(index), username: 'sub-' + index, age: 20 });
32
+ if (index % 2 == 0) {
33
+ const sub2_selfid = 'ss' + index;
34
+ fd.push({ __table_id: sub2_selfid, __parent__table_id: sub_selfid, username: 'sub2-' + index, age: 20 });
35
+ }
31
36
  }
32
37
  }
33
38
  return fd;
@@ -42,9 +47,16 @@ export function ExampleGrid() {
42
47
  );
43
48
  };
44
49
  const [selected, setSelected] = React.useState(null);
50
+ const [rows, set_rows] = React.useState<any[]>([]);
45
51
  const onSelectionChange = React.useCallback(({ selected }) => {
46
52
  setSelected(selected);
47
53
  }, []);
54
+
55
+ React.useEffect(() => {
56
+ setTimeout(() => {
57
+ set_rows(getData());
58
+ }, 1000);
59
+ }, []);
48
60
  return (
49
61
  <AzGrid
50
62
  dark
@@ -54,7 +66,7 @@ export function ExampleGrid() {
54
66
  contextMenuItems={contextMenuItems}
55
67
  customColumns={customColumns}
56
68
  columns={columns}
57
- rows={getData()}
69
+ rows={rows}
58
70
  leftColumns={leftColumns}
59
71
  gridOptions={{ rowIndexColumn: true, checkboxColumn: true }}
60
72
  />
@@ -0,0 +1,74 @@
1
+ type mrow = { __parent__table_id: any; __table_id: any; __children?: any[] };
2
+ type converted_row = { parent: any; self: any; data: mrow };
3
+
4
+ function get_parentId(obj) {
5
+ return obj.__parent__table_id || obj.parent;
6
+ }
7
+ function get_selfId(obj) {
8
+ return obj.__table_id;
9
+ }
10
+ //given an array of rows, fixes parent,child relations
11
+ export function fix_parent_child_relations<T extends mrow>(rows: T[]): T[] {
12
+ if (!Array.isArray(rows)) rows = [];
13
+
14
+ const converted_rows: converted_row[] = rows
15
+ .filter((r) => r != null)
16
+ .map((r) => {
17
+ return { parent: get_parentId(r), self: get_selfId(r), data: r };
18
+ });
19
+ const top_level_rows: converted_row[] = converted_rows.filter((r) => !r.parent);
20
+
21
+ //find children of top-level parents:
22
+ for (let index = 0; index < top_level_rows.length; index++) {
23
+ const mrow = top_level_rows[index];
24
+ assign_children(mrow, converted_rows);
25
+ }
26
+ const result = top_level_rows.map((r) => r.data) as T[];
27
+ console.log(result);
28
+ return result;
29
+ }
30
+
31
+ function assign_children(row: converted_row, all_rows: converted_row[]) {
32
+ const my_children = all_rows.filter((s) => row.self == s.parent);
33
+ if (my_children.length > 0) {
34
+ //find children of my children:
35
+ for (let index = 0; index < my_children.length; index++) {
36
+ const child = my_children[index];
37
+ assign_children(child, all_rows);
38
+ }
39
+ row.data.__children = my_children.map((r) => r.data);
40
+ } else row.data.__children = undefined;
41
+ }
42
+ export class func_selection {
43
+ static getVirtualElement(x = 0, y = 0) {
44
+ return () => ({
45
+ getBoundingClientRect: func_selection.generateGetBoundingClientRect(x, y),
46
+ });
47
+ }
48
+ static generateGetBoundingClientRect(x = 0, y = 0) {
49
+ return () => ({
50
+ width: 0,
51
+ height: 0,
52
+ top: y,
53
+ right: x,
54
+ bottom: y,
55
+ left: x,
56
+ });
57
+ }
58
+ static get_selectedText(): string {
59
+ var text: any = '';
60
+ if (window.getSelection) {
61
+ text = window.getSelection()?.toString();
62
+ } else if ((document as any).selection && (document as any).selection.type != 'Control') {
63
+ text = (document as any).selection.createRange()?.text;
64
+ }
65
+ return text || '';
66
+ }
67
+ static has_selection(): boolean {
68
+ const slct = window.getSelection();
69
+ if (slct == null) return false;
70
+ if (slct.type == null) return func_selection.get_selectedText().length !== 0;
71
+ if (slct.type === 'Range') return true;
72
+ return false;
73
+ }
74
+ }
@@ -11,7 +11,7 @@ import {
11
11
  TypeRowProps,
12
12
  TypeRowSelection,
13
13
  } from '@inovua/reactdatagrid-community/types';
14
- import { fix_parent_child_relations, func_selection } from './func/helpers';
14
+ import { fix_parent_child_relations, func_selection } from '../func/helpers';
15
15
 
16
16
  import { ContextMenu } from '@azrico/controls';
17
17
  import ReactDataGrid from '@inovua/reactdatagrid-enterprise';
@@ -35,13 +35,14 @@ export type DataSourceDefinition = TypeDataSource;
35
35
  export type OnSelectionChangeFunc = (config: TypeOnSelectionChangeArg) => void;
36
36
  export type RowDetailsFunc = (rowDetailsInfo: TypeRowDetailsInfo) => React.ReactNode;
37
37
  /* -------------------------------------------------------------------------- */
38
- type loose_column_fields = { title: string; key: string; field: string; columnName: string; name: string };
38
+ type loose_column_names = { key: string; field: string; columnName: string; name: string };
39
+ type loose_column_fields = loose_column_names & { title: string };
39
40
  export type LooseColumnDefinition = Partial<loose_column_fields & ColumnDefinition>;
40
41
  //
41
42
  type columnOrString = string | LooseColumnDefinition;
42
43
  type customColumnData = {
43
44
  name: string;
44
- render: (cell: any, formatterParams, onRendered) => React.ReactNode;
45
+ render: (cell: any, formatterParams, onRendered) => React.ReactNode | undefined | null;
45
46
  };
46
47
  type GridOptions = Partial<TypeDataGridProps>;
47
48
  /* -------------------------------------------------------------------------- */
@@ -52,7 +53,7 @@ export type AzGridProps = {
52
53
 
53
54
  gridOptions?: GridOptions;
54
55
 
55
- tableColumnExtensions?: any[];
56
+ tableColumnExtensions?: Array<{ name: string } & Partial<ColumnDefinition>>;
56
57
  editableColumns?: string[];
57
58
  leftColumns?: string[];
58
59
  rightColumns?: string[];
@@ -152,7 +153,10 @@ export function AzGrid(props: AzGridProps) {
152
153
  const ext_cl = get_col_name(ext);
153
154
  const mcol = final_columns.find((s) => s.name === ext_cl);
154
155
  if (!mcol) continue;
155
- // if (ext.width) mcol.width = ext.width;
156
+ if (ext.width) mcol.width = ext.width;
157
+ if (ext.visible) mcol.visible = ext.visible;
158
+ if (ext.draggable) mcol.draggable = ext.draggable;
159
+
156
160
  // if (ext.widthGrow) mcol.widthGrow = ext.widthGrow;
157
161
  }
158
162
 
@@ -209,6 +213,7 @@ export function AzGrid(props: AzGridProps) {
209
213
  /* -------------------------------------------------------------------------- */
210
214
  React.useEffect(() => {
211
215
  if (pendingChanges <= 0) return;
216
+ console.log('Updated Pending Changes: ', pendingChanges);
212
217
  let new_rows: any[] = [];
213
218
  if (typeof props.get_rows === 'function') {
214
219
  new_rows = props.get_rows();
@@ -224,10 +229,12 @@ export function AzGrid(props: AzGridProps) {
224
229
  }, [pendingChanges]);
225
230
 
226
231
  React.useEffect(() => {
232
+ console.log('Rows Changed !');
227
233
  set_pendingChanges((r) => r + 1);
228
234
  }, [props.rows]);
229
235
 
230
236
  function onRowsChange(rows: any[], options: any) {
237
+ console.log('onRowsChange');
231
238
  if (props.onRowsChange) props.onRowsChange(rows, options);
232
239
  set_pendingChanges((r) => r + 1); //notify the cache to update rows after we made changes to them
233
240
  }
@@ -1,65 +0,0 @@
1
- type mrow = { __parent__table_id: any; __table_id: any; __children?: any[] };
2
- //given an array of rows, fixes parent,child relations
3
- export function fix_parent_child_relations<T extends mrow>(rows: T[]): T[] {
4
- if (!Array.isArray(rows)) rows = [];
5
- const child_rows: T[] = [];
6
- const parent_rows: T[] = [];
7
- for (let index = 0; index < rows.length; index++) {
8
- const r = rows[index];
9
- if (r.__parent__table_id != undefined) child_rows.push(r);
10
- else parent_rows.push(r);
11
- }
12
- for (let index = 0; index < parent_rows.length; index++) {
13
- const pr = parent_rows[index];
14
- pr.__children = [];
15
- }
16
- //find parent for these children !
17
- for (let index = 0; index < child_rows.length; index++) {
18
- const child = child_rows[index];
19
- const parentOfChild = parent_rows.find((s) => s.__table_id == child.__parent__table_id);
20
- if (!parentOfChild) continue; //no parent :(
21
- //@ts-ignore
22
- parentOfChild.__children.push(child);
23
- }
24
-
25
- for (let index = 0; index < parent_rows.length; index++) {
26
- const pr = parent_rows[index];
27
- //@ts-ignore
28
- if (pr.__children.length == 0) pr.__children = undefined;
29
- }
30
-
31
- return parent_rows;
32
- }
33
- export class func_selection {
34
- static getVirtualElement(x = 0, y = 0) {
35
- return () => ({
36
- getBoundingClientRect: func_selection.generateGetBoundingClientRect(x, y),
37
- });
38
- }
39
- static generateGetBoundingClientRect(x = 0, y = 0) {
40
- return () => ({
41
- width: 0,
42
- height: 0,
43
- top: y,
44
- right: x,
45
- bottom: y,
46
- left: x,
47
- });
48
- }
49
- static get_selectedText(): string {
50
- var text: any = '';
51
- if (window.getSelection) {
52
- text = window.getSelection()?.toString();
53
- } else if ((document as any).selection && (document as any).selection.type != 'Control') {
54
- text = (document as any).selection.createRange()?.text;
55
- }
56
- return text || '';
57
- }
58
- static has_selection(): boolean {
59
- const slct = window.getSelection();
60
- if (slct == null) return false;
61
- if (slct.type == null) return func_selection.get_selectedText().length !== 0;
62
- if (slct.type === 'Range') return true;
63
- return false;
64
- }
65
- }