@azrico/reactgrid 1.1.12 → 1.1.14

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.
@@ -1,355 +1,414 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.AzGrid = AzGrid;
7
- exports.default = void 0;
8
- require("@inovua/reactdatagrid-enterprise/index.css");
9
- require("@inovua/reactdatagrid-enterprise/theme/default-dark.css");
10
- require("@inovua/reactdatagrid-enterprise/theme/amber-dark.css");
11
- require("../themes/base_styles.css");
12
- require("../themes/grid.css");
13
- var _controls = require("@azrico/controls");
14
- var _react = _interopRequireDefault(require("react"));
15
- var _helpers = require("../func/helpers");
16
- var _reactdatagridEnterprise = _interopRequireDefault(require("@inovua/reactdatagrid-enterprise"));
17
- var _clsx = _interopRequireDefault(require("clsx"));
18
- var _object = require("@azrico/object");
19
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
- /* -------------------------------------------------------------------------- */
21
- // const defaultfilterTypes: FilterTypes = {
22
- // string: {
23
- // type: 'string',
24
- // emptyValue: '',
25
- // operators: [
26
- // {
27
- // name: 'contains',
28
- // fn: ({ value, filterValue, data }) => {
29
- // console.log('fn');
30
- // return !filterValue ? true : value.indexOf(filterValue) != -1;
31
- // },
32
- // },
33
- // ],
34
- // },
35
- // };
36
- const defaultOptions = {
37
- //filterTypes: defaultfilterTypes,
38
- remoteFilter: false,
39
- remoteSort: false,
40
- rowReorderColumn: false,
41
- resizable: true,
42
- rowIndexColumn: true
43
- };
44
- const forcedOptions = {
45
- idProperty: '__table_id',
46
- nodesProperty: '__children'
47
- };
48
- const defaultColumnOptions = {
49
- draggable: false,
50
- lockable: false
51
- };
52
- const dynamic_option_names = ['selected', 'loading', 'limit', 'skip'];
53
- /* -------------------------------------------------------------------------- */
54
- function AzGrid(props) {
55
- /* -------------------------------------------------------------------------- */
56
- /* Columns */
57
- /* -------------------------------------------------------------------------- */
58
- const cached_columns = _react.default.useMemo(() => {
59
- return ApplyColumnData(props);
60
- }, [props.columns, props.leftColumns, props.rightColumns, props.editableColumns, props.columnExtensions, props.customColumns]);
61
- /* -------------------------------------------------------------------------- */
62
- /* Row changes */
63
- /* -------------------------------------------------------------------------- */
64
- const cached_data = _react.default.useRef();
65
- const last_cache_info = _react.default.useRef();
66
- const dataSource = _react.default.useCallback(async dt => {
67
- let result_data = undefined;
68
- let isUsingCache = false;
69
- const cacheInfo = {
70
- ds: props.dataSource,
71
- skip: dt.skip,
72
- limit: dt.limit
73
- };
74
- //check if we can used cached data
75
- //if the datasource is changed since last render, we should invalidate cache
76
- if (!validateCache(last_cache_info.current, cacheInfo, props.looseCacheCheck)) {
77
- cached_data.current = undefined;
78
- last_cache_info.current = cacheInfo;
79
- }
80
- if (cached_data.current) {
81
- //cache is valid, use the cache
82
- isUsingCache = true;
83
- result_data = cached_data.current;
84
- } else {
85
- //cache is invalid, use the datasource again
86
- isUsingCache = false;
87
- if (typeof props.dataSource === 'function') {
88
- result_data = await props.dataSource(dt);
89
- } else result_data = props.dataSource;
90
- }
91
- //making sure the datasource is a valid object :
92
- if (!result_data) result_data = [];
93
- if (Array.isArray(result_data) || typeof result_data !== 'object') result_data = {
94
- data: result_data
95
- };
96
- if (!Array.isArray(result_data.data)) result_data.data = [result_data.data];
97
- //no need to fix parent/child when using cache (it should be already fixed)
98
- if (!isUsingCache && props.allowChildRows) result_data.data = (0, _helpers.fix_parent_child_relations)(result_data.data);
99
- if (!result_data.count) result_data.count = result_data.data.length;
100
- //update cache
101
- cached_data.current = result_data;
102
- return result_data;
103
- }, [props.dataSource]);
104
- return _react.default.createElement(DataGrid, {
105
- ...props,
106
- columns: cached_columns,
107
- dataSource: dataSource,
108
- highlightedRow: props.highlightedRow
109
- });
110
- }
111
- /* -------------------------------------------------------------------------- */
112
- function DataGrid(props) {
113
- const {
114
- columns,
115
- dataSource,
116
- dark,
117
- contextMenuItems
118
- } = props;
119
- /* -------------------------------------------------------------------------- */
120
- const gridRef = _react.default.useRef(null);
121
- const click_data = _react.default.useRef(null);
122
- const [menuAnchorEl, set_menuAnchorEl] = _react.default.useState(null);
123
- const [menuRow, set_menuRow] = _react.default.useState(null);
124
- _react.default.useEffect(() => {
125
- click_data.current = {};
126
- }, [dataSource]);
127
- /* --------------------------------- events --------------------------------- */
128
- const onRowContextMenu = _react.default.useCallback((rowProps, event) => {
129
- if (_helpers.func_selection.has_selection()) return;
130
- update_menuRow(rowProps.data);
131
- update_menuAnchorEl(_helpers.func_selection.getVirtualElement(event.clientX, event.clientY));
132
- event.preventDefault();
133
- }, []);
134
- const onRowClick = _react.default.useCallback((rowProps, event) => {
135
- const nowDate = Date.now();
136
- const lastclick = click_data.current[get_row_id(rowProps)];
137
- if (lastclick) {
138
- const diffTime = Math.abs(nowDate - lastclick);
139
- if (diffTime < 400) {
140
- props.onRowDoubleClick && props.onRowDoubleClick(rowProps.rowIndex, rowProps.data);
141
- }
142
- }
143
- click_data.current[get_row_id(rowProps)] = nowDate;
144
- props.onRowClick && props.onRowClick(rowProps.rowIndex, rowProps.data);
145
- }, []);
146
- /* ------------------------------- ContextMenu ------------------------------ */
147
- const update_menuAnchorEl = _react.default.useCallback(el => {
148
- if (el) {
149
- set_menuAnchorEl(el);
150
- } else set_menuAnchorEl(null);
151
- }, []);
152
- const update_menuRow = _react.default.useCallback(r => {
153
- if (r) {
154
- set_menuRow(r);
155
- } else set_menuRow(null);
156
- }, []);
157
- /* -------------------------------------------------------------------------- */
158
- /* Create the grid */
159
- /* -------------------------------------------------------------------------- */
160
- const base_gridOptions = _react.default.useMemo(() => {
161
- const firstcolumn = columns[0];
162
- const licenseKey = props.licenseKey || get_default_key();
163
- const events = {
164
- onRowClick: onRowClick,
165
- onSkipChange: props.onSkipChange,
166
- onLimitChange: props.onLimitChange,
167
- onRowContextMenu: onRowContextMenu
168
- };
169
- const extra_ops = {
170
- onSelectionChange: props.onSelectionChange,
171
- licenseKey: licenseKey,
172
- treeColumn: props.allowChildRows ? firstcolumn.name : undefined,
173
- renderRowDetails: props.RowDetail,
174
- theme: dark ? 'amber-dark' : 'default-light'
175
- };
176
- return {
177
- ...defaultOptions,
178
- ...events,
179
- ...extra_ops
180
- };
181
- }, [columns, props.allowChildRows, props.RowDetail]);
182
- const static_gridOptions = _react.default.useMemo(() => {
183
- return {
184
- ...base_gridOptions,
185
- ...props.gridOptions,
186
- ...forcedOptions
187
- };
188
- }, [props.gridOptions, base_gridOptions, forcedOptions]);
189
- const dynamic_gridOptions = _react.default.useMemo(() => {
190
- const res = {};
191
- dynamic_option_names.map(r => {
192
- res[r] = props[r];
193
- });
194
- return res;
195
- }, dynamic_option_names.map(r => props[r]));
196
- // const { width, height, ref: resize_ref } = useResizeDetector();
197
- return _react.default.createElement("div", {
198
- className: (0, _clsx.default)(props.className, 'azgrid-nooverflow', 'azgrid-filler')
199
- }, _react.default.createElement(_reactdatagridEnterprise.default, {
200
- ...static_gridOptions,
201
- ...dynamic_gridOptions,
202
- handle: ref => gridRef.current = ref ? ref.current : null,
203
- className: 'azgrid-filler',
204
- columns: columns,
205
- dataSource: dataSource
206
- }), _react.default.createElement(_controls.ContextMenu, {
207
- menuAnchorEl: menuAnchorEl,
208
- set_menuAnchorEl: update_menuAnchorEl,
209
- menuRow: menuRow,
210
- items: contextMenuItems
211
- }));
212
- }
213
- /* -------------------------------------------------------------------------- */
214
- /* -------------------------------------------------------------------------- */
215
- /* -------------------------------------------------------------------------- */
216
- /* -------------------------------------------------------------------------- */
1
+ import '@inovua/reactdatagrid-enterprise/index.css';
2
+ import '@inovua/reactdatagrid-enterprise/theme/default-dark.css';
3
+ import '@inovua/reactdatagrid-enterprise/theme/amber-dark.css';
4
+ import '../themes/base_styles.css';
5
+ import '../themes/grid.css';
6
+ import { ContextMenu } from '@azrico/controls';
7
+ import React from 'react';
8
+ import { fix_parent_child_relations, func_selection } from '../func/helpers';
9
+ import BoolEditor from '@inovua/reactdatagrid-community/BoolEditor';
10
+ import NumericEditor from '@inovua/reactdatagrid-community/NumericEditor';
11
+ import ReactDataGrid from '@inovua/reactdatagrid-enterprise';
12
+ import SelectEditor from '@inovua/reactdatagrid-community/SelectEditor';
13
+ import clsx from 'clsx';
14
+ import { object_equals } from '@azrico/object';
15
+ /* -------------------------------------------------------------------------- */
16
+ // const defaultfilterTypes: FilterTypes = {
17
+ // string: {
18
+ // type: 'string',
19
+ // emptyValue: '',
20
+ // operators: [
21
+ // {
22
+ // name: 'contains',
23
+ // fn: ({ value, filterValue, data }) => {
24
+ // console.log('fn');
25
+ // return !filterValue ? true : value.indexOf(filterValue) != -1;
26
+ // },
27
+ // },
28
+ // ],
29
+ // },
30
+ // };
31
+ const defaultOptions = {
32
+ //filterTypes: defaultfilterTypes,
33
+ remoteFilter: false,
34
+ remoteSort: false,
35
+ rowReorderColumn: false,
36
+ resizable: true,
37
+ rowIndexColumn: true,
38
+ };
39
+ const forcedOptions = {
40
+ idProperty: '__table_id',
41
+ nodesProperty: '__children',
42
+ };
43
+ const defaultColumnOptions = {
44
+ draggable: false,
45
+ lockable: false,
46
+ };
47
+ const dynamic_option_names = ['selected', 'loading', 'limit', 'skip'];
48
+ /* -------------------------------------------------------------------------- */
49
+ export function AzGrid(props) {
50
+ /* -------------------------------------------------------------------------- */
51
+ /* Columns */
52
+ /* -------------------------------------------------------------------------- */
53
+ const cached_columns = React.useMemo(() => {
54
+ return ApplyColumnData(props);
55
+ }, [
56
+ props.columns,
57
+ props.leftColumns,
58
+ props.rightColumns,
59
+ props.editableColumns,
60
+ props.columnExtensions,
61
+ props.customColumns,
62
+ ]);
63
+ /* -------------------------------------------------------------------------- */
64
+ /* Row changes */
65
+ /* -------------------------------------------------------------------------- */
66
+ const cached_data = React.useRef();
67
+ const last_cache_info = React.useRef();
68
+ const dataSource = React.useCallback(async (dt) => {
69
+ let result_data = undefined;
70
+ let isUsingCache = false;
71
+ const cacheInfo = { ds: props.dataSource, skip: dt.skip, limit: dt.limit };
72
+ //check if we can used cached data
73
+ //if the datasource is changed since last render, we should invalidate cache
74
+ if (!validateCache(last_cache_info.current, cacheInfo, props.looseCacheCheck)) {
75
+ cached_data.current = undefined;
76
+ last_cache_info.current = cacheInfo;
77
+ }
78
+ if (cached_data.current) {
79
+ //cache is valid, use the cache
80
+ isUsingCache = true;
81
+ result_data = cached_data.current;
82
+ }
83
+ else {
84
+ //cache is invalid, use the datasource again
85
+ isUsingCache = false;
86
+ if (typeof props.dataSource === 'function') {
87
+ result_data = await props.dataSource(dt);
88
+ }
89
+ else
90
+ result_data = props.dataSource;
91
+ }
92
+ //making sure the datasource is a valid object :
93
+ if (!result_data)
94
+ result_data = [];
95
+ if (Array.isArray(result_data) || typeof result_data !== 'object')
96
+ result_data = { data: result_data };
97
+ if (!Array.isArray(result_data.data))
98
+ result_data.data = [result_data.data];
99
+ //no need to fix parent/child when using cache (it should be already fixed)
100
+ if (!isUsingCache && props.allowChildRows)
101
+ result_data.data = fix_parent_child_relations(result_data.data);
102
+ if (!result_data.count)
103
+ result_data.count = result_data.data.length;
104
+ //update cache
105
+ cached_data.current = result_data;
106
+ return result_data;
107
+ }, [props.dataSource]);
108
+ return (React.createElement(DataGrid, { ...props, columns: cached_columns, dataSource: dataSource, highlightedRow: props.highlightedRow }));
109
+ }
110
+ /* -------------------------------------------------------------------------- */
111
+ function DataGrid(props) {
112
+ const { columns, dataSource, dark, contextMenuItems } = props;
113
+ /* -------------------------------------------------------------------------- */
114
+ const gridRef = React.useRef(null);
115
+ const click_data = React.useRef(null);
116
+ const [menuAnchorEl, set_menuAnchorEl] = React.useState(null);
117
+ const [menuRow, set_menuRow] = React.useState(null);
118
+ React.useEffect(() => {
119
+ click_data.current = {};
120
+ }, [dataSource]);
121
+ /* --------------------------------- events --------------------------------- */
122
+ const onRowContextMenu = React.useCallback((rowProps, event) => {
123
+ if (func_selection.has_selection())
124
+ return;
125
+ update_menuRow(rowProps.data);
126
+ update_menuAnchorEl(func_selection.getVirtualElement(event.clientX, event.clientY));
127
+ event.preventDefault();
128
+ }, []);
129
+ const onRowClick = React.useCallback((rowProps, event) => {
130
+ const nowDate = Date.now();
131
+ const lastclick = click_data.current[get_row_id(rowProps)];
132
+ if (lastclick) {
133
+ const diffTime = Math.abs(nowDate - lastclick);
134
+ if (diffTime < 400) {
135
+ props.onRowDoubleClick &&
136
+ props.onRowDoubleClick(rowProps.rowIndex, rowProps.data);
137
+ }
138
+ }
139
+ click_data.current[get_row_id(rowProps)] = nowDate;
140
+ props.onRowClick && props.onRowClick(rowProps.rowIndex, rowProps.data);
141
+ }, []);
142
+ /* ------------------------------- ContextMenu ------------------------------ */
143
+ const update_menuAnchorEl = React.useCallback((el) => {
144
+ if (el) {
145
+ set_menuAnchorEl(el);
146
+ }
147
+ else
148
+ set_menuAnchorEl(null);
149
+ }, []);
150
+ const update_menuRow = React.useCallback((r) => {
151
+ if (r) {
152
+ set_menuRow(r);
153
+ }
154
+ else
155
+ set_menuRow(null);
156
+ }, []);
157
+ /* -------------------------------------------------------------------------- */
158
+ /* Create the grid */
159
+ /* -------------------------------------------------------------------------- */
160
+ const base_gridOptions = React.useMemo(() => {
161
+ const firstcolumn = columns[0];
162
+ const licenseKey = props.licenseKey || get_default_key();
163
+ const events = {
164
+ onRowClick: onRowClick,
165
+ onSkipChange: props.onSkipChange,
166
+ onLimitChange: props.onLimitChange,
167
+ onRowContextMenu: onRowContextMenu,
168
+ };
169
+ const extra_ops = {
170
+ onSelectionChange: props.onSelectionChange,
171
+ licenseKey: licenseKey,
172
+ treeColumn: props.allowChildRows ? firstcolumn.name : undefined,
173
+ renderRowDetails: props.RowDetail,
174
+ theme: dark ? 'amber-dark' : 'default-light',
175
+ };
176
+ return { ...defaultOptions, ...events, ...extra_ops };
177
+ }, [columns, props.allowChildRows, props.RowDetail]);
178
+ const static_gridOptions = React.useMemo(() => {
179
+ return { ...base_gridOptions, ...props.gridOptions, ...forcedOptions };
180
+ }, [props.gridOptions, base_gridOptions, forcedOptions]);
181
+ const dynamic_gridOptions = React.useMemo(() => {
182
+ const res = {};
183
+ dynamic_option_names.map((r) => {
184
+ res[r] = props[r];
185
+ });
186
+ return res;
187
+ }, dynamic_option_names.map((r) => props[r]));
188
+ // const { width, height, ref: resize_ref } = useResizeDetector();
189
+ return (React.createElement("div", { className: clsx(props.className, 'azgrid-nooverflow', 'azgrid-filler') },
190
+ React.createElement(ReactDataGrid, { ...static_gridOptions, ...dynamic_gridOptions, handle: (ref) => (gridRef.current = ref ? ref.current : null), className: 'azgrid-filler', columns: columns, dataSource: dataSource }),
191
+ React.createElement(ContextMenu, { menuAnchorEl: menuAnchorEl, set_menuAnchorEl: update_menuAnchorEl, menuRow: menuRow, items: contextMenuItems })));
192
+ }
193
+ /* -------------------------------------------------------------------------- */
194
+ /* -------------------------------------------------------------------------- */
195
+ /* -------------------------------------------------------------------------- */
196
+ /* -------------------------------------------------------------------------- */
197
+ /**
198
+ * merges together all different props for columns
199
+ * to build a single final column data array
200
+ * @param props
201
+ * @returns
202
+ */
203
+ function ApplyColumnData(props) {
204
+ const final_columns = [];
205
+ let mcols = props.columns || [];
206
+ let mcolExts = props.columnExtensions || [];
207
+ let rightColumns = props.rightColumns || [];
208
+ let leftColumns = props.leftColumns || [];
209
+ let editableColumns = props.editableColumns || [];
210
+ let customColumns = props.customColumns || [];
211
+ if (!Array.isArray(mcols))
212
+ return [];
213
+ /* ------------------------------- fix columns ------------------------------ */
214
+ mcols
215
+ .map((r) => {
216
+ if (r == null)
217
+ return null;
218
+ if (typeof r === 'string')
219
+ return { field: r, header: r };
220
+ if (typeof r === 'object') {
221
+ let final_cl = {
222
+ name: get_col_name(r),
223
+ header: get_col_header(r),
224
+ width: r.width || undefined,
225
+ };
226
+ final_cl = {
227
+ ...defaultColumnOptions,
228
+ ...r,
229
+ ...final_cl,
230
+ };
231
+ return final_cl;
232
+ }
233
+ return null;
234
+ })
235
+ .forEach((r) => {
236
+ if (r != null)
237
+ final_columns.push(r);
238
+ });
239
+ /* ---------------------------- apply extensions ---------------------------- */
240
+ if (mcolExts && Array.isArray(mcolExts))
241
+ for (let index = 0; index < mcolExts.length; index++) {
242
+ const ext = mcolExts[index];
243
+ const ext_cl = get_col_name(ext);
244
+ const mcol = final_columns.find((s) => get_col_name(s) === ext_cl);
245
+ if (mcol) {
246
+ for (const key in ext) {
247
+ if (!mcol[key] && key != 'name')
248
+ mcol[key] = ext[key];
249
+ }
250
+ }
251
+ // if (ext.widthGrow) mcol.widthGrow = ext.widthGrow;
252
+ }
253
+ /* ------------------------------- frozen cols ------------------------------ */
254
+ if (Array.isArray(leftColumns)) {
255
+ for (let index = 0; index < leftColumns.length; index++) {
256
+ const r = get_col_name(leftColumns[index]);
257
+ const mcol = final_columns.find((s) => get_col_name(s) === r);
258
+ if (mcol) {
259
+ mcol.locked = 'start';
260
+ }
261
+ }
262
+ }
263
+ if (Array.isArray(rightColumns)) {
264
+ for (let index = 0; index < rightColumns.length; index++) {
265
+ const r = get_col_name(rightColumns[index]);
266
+ const mcol = final_columns.find((s) => get_col_name(s) === r);
267
+ if (mcol) {
268
+ mcol.locked = 'end';
269
+ }
270
+ }
271
+ }
272
+ /* -------------------------------- ediatable ------------------------------- */
273
+ if (Array.isArray(editableColumns)) {
274
+ for (let index = 0; index < editableColumns.length; index++) {
275
+ const r = get_col_name(editableColumns[index]);
276
+ const mcol = final_columns.find((s) => get_col_name(s) === r);
277
+ if (mcol) {
278
+ // mcol.editor = editorWrapper;
279
+ // mcol.editorOptions = {
280
+ // editOnClick: true,
281
+ // };
282
+ }
283
+ }
284
+ }
285
+ for (let index = 0; index < final_columns.length; index++) {
286
+ const col = final_columns[index];
287
+ if (col.type) {
288
+ switch (col.type) {
289
+ case 'combo':
290
+ case 'select':
291
+ col.editor = SelectEditor;
292
+ break;
293
+ case 'number':
294
+ case 'numberic':
295
+ col.editor = NumericEditor;
296
+ break;
297
+ case 'truefalse':
298
+ case 'bool':
299
+ col.editor = BoolEditor;
300
+ break;
301
+ }
302
+ delete col.type;
303
+ }
304
+ if (!col.editorProps)
305
+ col.editorProps = {};
306
+ if (col.items) {
307
+ if (!col.editorProps.idProperty)
308
+ col.editorProps.idProperty = 'id';
309
+ if (!col.editorProps.collapseOnSelect)
310
+ col.editorProps.collapseOnSelect = true;
311
+ col.editorProps.dataSource = to_datasource(col.items, col.editorProps.idProperty);
312
+ delete col.items;
313
+ }
314
+ }
315
+ /* -------------------------------------------------------------------------- */
316
+ if (Array.isArray(customColumns)) {
317
+ for (let index = 0; index < customColumns.length; index++) {
318
+ const r = customColumns[index];
319
+ const rn = get_col_name(r);
320
+ const mcol = final_columns.find((s) => get_col_name(s) === rn);
321
+ if (mcol) {
322
+ //@ts-ignore
323
+ mcol.render = r.render;
324
+ }
325
+ }
326
+ }
327
+ /* ------------------------------ apply renames ----------------------------- */
328
+ for (let index = 0; index < final_columns.length; index++) {
329
+ const col = final_columns[index];
330
+ if (!col.name) {
331
+ col.name = get_col_name(col);
332
+ delete col.field;
333
+ delete col.key;
334
+ delete col.columnName;
335
+ }
336
+ }
337
+ /* -------------------------------------------------------------------------- */
338
+ return final_columns;
339
+ }
340
+ function to_datasource(arr, idProperty) {
341
+ const res = [];
342
+ let index = 0;
343
+ if (Array.isArray(arr)) {
344
+ arr.map((s) => {
345
+ let elem = {};
346
+ elem[idProperty] = '_cid_' + index;
347
+ elem = { ...elem, ...s };
348
+ res.push(elem);
349
+ index++;
350
+ });
351
+ }
352
+ return res;
353
+ }
217
354
  /**
218
355
  * Gets name of a column from its column object
219
356
  * @param obj
220
357
  * @returns
221
- */
222
- function get_col_name(obj) {
223
- if (!obj) return 'default';
224
- if (typeof obj == 'string') return obj;
225
- if (typeof obj != 'object') return 'default';
226
- return obj.name || obj.field || obj.key || obj.columnName || 'default';
227
- }
358
+ */
359
+ function get_col_name(obj) {
360
+ if (!obj)
361
+ return 'default';
362
+ if (typeof obj == 'string')
363
+ return obj;
364
+ if (typeof obj != 'object')
365
+ return 'default';
366
+ return obj.name || obj.field || obj.key || obj.columnName || 'default';
367
+ }
228
368
  /**
229
- * Gets name of a column from its column object
369
+ * Gets header of a column
230
370
  * @param obj
231
371
  * @returns
232
- */
233
- function get_row_id(obj) {
234
- if (!obj) return 'default';
235
- if (typeof obj == 'string') return obj;
236
- if (typeof obj != 'object') return 'default';
237
- return obj.__table_id || obj.id || 'default';
238
- }
372
+ */
373
+ function get_col_header(obj) {
374
+ if (!obj)
375
+ return 'default';
376
+ if (typeof obj == 'string')
377
+ return obj;
378
+ if (typeof obj != 'object')
379
+ return 'default';
380
+ return obj.header || obj.title || get_col_name(obj);
381
+ }
239
382
  /**
240
- * Gets default activation key for grid plugin
383
+ * Gets name of a column from its column object
384
+ * @param obj
241
385
  * @returns
242
- */
243
- function get_default_key() {
244
- return 'ExpiryDate=2999-01-01,Z=1040577552';
245
- }
246
- //check if two cache objects are the same
247
- function validateCache(current, old, looseCheck = false) {
248
- if (!old || !(0, _object.object_equals)(current, old)) return false;
249
- if (looseCheck) return true;
250
- if (current.ds != old.ds) return false;
251
- return true;
252
- }
386
+ */
387
+ function get_row_id(obj) {
388
+ if (!obj)
389
+ return 'default';
390
+ if (typeof obj == 'string')
391
+ return obj;
392
+ if (typeof obj != 'object')
393
+ return 'default';
394
+ return obj.__table_id || obj.id || 'default';
395
+ }
253
396
  /**
254
- * merges together all different props for columns
255
- * to build a single final column data array
256
- * @param props
397
+ * Gets default activation key for grid plugin
257
398
  * @returns
258
- */
259
- function ApplyColumnData(props) {
260
- const final_columns = [];
261
- let mcols = props.columns || [];
262
- let mcolExts = props.columnExtensions || [];
263
- let rightColumns = props.rightColumns || [];
264
- let leftColumns = props.leftColumns || [];
265
- let editableColumns = props.editableColumns || [];
266
- let customColumns = props.customColumns || [];
267
- if (!Array.isArray(mcols)) return [];
268
- /* ------------------------------- fix columns ------------------------------ */
269
- mcols.map(r => {
270
- if (r == null) return null;
271
- if (typeof r === 'string') return {
272
- field: r,
273
- header: r
274
- };
275
- if (typeof r === 'object') {
276
- let final_cl = {
277
- name: get_col_name(r),
278
- header: r.header || r.title || r.name || '-',
279
- width: r.width || undefined
280
- };
281
- delete r.field;
282
- delete r.key;
283
- delete r.columnName;
284
- final_cl = {
285
- ...defaultColumnOptions,
286
- ...r,
287
- ...final_cl
288
- };
289
- return final_cl;
290
- }
291
- return null;
292
- }).forEach(r => {
293
- if (r != null) final_columns.push(r);
294
- });
295
- /* ---------------------------- apply extensions ---------------------------- */
296
- if (mcolExts && Array.isArray(mcolExts)) for (let index = 0; index < mcolExts.length; index++) {
297
- const ext = mcolExts[index];
298
- const ext_cl = get_col_name(ext);
299
- const mcol = final_columns.find(s => s.name === ext_cl);
300
- if (mcol) {
301
- for (const key in ext) {
302
- if (!mcol[key] && key != 'name') mcol[key] = ext[key];
303
- }
304
- }
305
- // if (ext.widthGrow) mcol.widthGrow = ext.widthGrow;
306
- }
307
- /* ------------------------------- frozen cols ------------------------------ */
308
- if (Array.isArray(leftColumns)) {
309
- for (let index = 0; index < leftColumns.length; index++) {
310
- const r = get_col_name(leftColumns[index]);
311
- const mcol = final_columns.find(s => s.name === r);
312
- if (mcol) {
313
- mcol.locked = 'start';
314
- }
315
- }
316
- }
317
- if (Array.isArray(rightColumns)) {
318
- for (let index = 0; index < rightColumns.length; index++) {
319
- const r = get_col_name(rightColumns[index]);
320
- const mcol = final_columns.find(s => s.name === r);
321
- if (mcol) {
322
- mcol.locked = 'end';
323
- }
324
- }
325
- }
326
- /* -------------------------------- ediatable ------------------------------- */
327
- if (Array.isArray(editableColumns)) {
328
- for (let index = 0; index < editableColumns.length; index++) {
329
- const r = get_col_name(editableColumns[index]);
330
- const mcol = final_columns.find(s => s.name === r);
331
- if (mcol) {
332
- // mcol.editor = editorWrapper;
333
- // mcol.editorOptions = {
334
- // editOnClick: true,
335
- // };
336
- }
337
- }
338
- }
339
- if (Array.isArray(customColumns)) {
340
- for (let index = 0; index < customColumns.length; index++) {
341
- const r = customColumns[index];
342
- const rn = get_col_name(r);
343
- const mcol = final_columns.find(s => s.name === rn);
344
- if (mcol) {
345
- //@ts-ignore
346
- mcol.render = r.render;
347
- }
348
- }
349
- }
350
- if (!Array.isArray(final_columns) || final_columns.length <= 0) return [];
351
- return final_columns;
352
- }
353
- /* -------------------------------------------------------------------------- */
354
- var _default = AzGrid;
355
- exports.default = _default;
399
+ */
400
+ function get_default_key() {
401
+ return 'ExpiryDate=2999-01-01,Z=1040577552';
402
+ }
403
+ //check if two cache objects are the same
404
+ function validateCache(current, old, looseCheck = false) {
405
+ if (!old || !object_equals(current, old))
406
+ return false;
407
+ if (looseCheck)
408
+ return true;
409
+ if (current.ds != old.ds)
410
+ return false;
411
+ return true;
412
+ }
413
+ /* -------------------------------------------------------------------------- */
414
+ export default AzGrid;