amis 1.4.1 → 1.4.2-beta.1
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/README.md +1 -1
- package/lib/Schema.d.ts +17 -0
- package/lib/Schema.js.map +1 -1
- package/lib/components/Alert.js +3 -1
- package/lib/components/Alert.js.map +2 -2
- package/lib/components/Badge.d.ts +2 -2
- package/lib/components/Badge.js +12 -6
- package/lib/components/Badge.js.map +2 -2
- package/lib/components/Collapse.js +1 -1
- package/lib/components/Collapse.js.map +2 -2
- package/lib/components/DatePicker.js +1 -1
- package/lib/components/DatePicker.js.map +2 -2
- package/lib/components/DateRangePicker.js +1 -1
- package/lib/components/DateRangePicker.js.map +2 -2
- package/lib/components/InputBox.js +1 -1
- package/lib/components/InputBox.js.map +2 -2
- package/lib/components/Link.d.ts +91 -0
- package/lib/components/Link.js +44 -0
- package/lib/components/Link.js.map +13 -0
- package/lib/components/MonthRangePicker.js +1 -1
- package/lib/components/MonthRangePicker.js.map +2 -2
- package/lib/components/RichText.js +17 -53
- package/lib/components/RichText.js.map +2 -2
- package/lib/components/Select.js +3 -0
- package/lib/components/Select.js.map +2 -2
- package/lib/components/SparkLine.d.ts +85 -84
- package/lib/components/SparkLine.js +2 -2
- package/lib/components/SparkLine.js.map +2 -2
- package/lib/components/Toast.js +2 -2
- package/lib/components/Toast.js.map +2 -2
- package/lib/components/Tree.js +5 -3
- package/lib/components/Tree.js.map +2 -2
- package/lib/components/icons.js +12 -0
- package/lib/components/icons.js.map +2 -2
- package/lib/icons/clock.js +10 -0
- package/lib/icons/status-close.js +11 -0
- package/lib/icons/status-fail.js +11 -0
- package/lib/icons/status-info.js +10 -0
- package/lib/icons/status-success.js +11 -0
- package/lib/icons/status-warning.js +10 -0
- package/lib/index.js +1 -1
- package/lib/locale/de-DE.js +2 -0
- package/lib/locale/de-DE.js.map +2 -2
- package/lib/locale/en-US.js +2 -0
- package/lib/locale/en-US.js.map +2 -2
- package/lib/locale/zh-CN.js +3 -1
- package/lib/locale/zh-CN.js.map +2 -2
- package/lib/renderers/Action.d.ts +7 -0
- package/lib/renderers/Action.js.map +2 -2
- package/lib/renderers/CRUD.js +21 -6
- package/lib/renderers/CRUD.js.map +2 -2
- package/lib/renderers/Collapse.js +2 -2
- package/lib/renderers/Collapse.js.map +2 -2
- package/lib/renderers/Dialog.js +0 -3
- package/lib/renderers/Dialog.js.map +2 -2
- package/lib/renderers/Drawer.js +0 -3
- package/lib/renderers/Drawer.js.map +2 -2
- package/lib/renderers/DropDownButton.d.ts +5 -1
- package/lib/renderers/DropDownButton.js +8 -6
- package/lib/renderers/DropDownButton.js.map +2 -2
- package/lib/renderers/Form/Checkbox.d.ts +5 -0
- package/lib/renderers/Form/Checkbox.js +4 -0
- package/lib/renderers/Form/Checkbox.js.map +2 -2
- package/lib/renderers/Form/Combo.js +2 -2
- package/lib/renderers/Form/Combo.js.map +2 -2
- package/lib/renderers/Form/InputFile.js +2 -2
- package/lib/renderers/Form/InputFile.js.map +2 -2
- package/lib/renderers/Form/InputImage.js +5 -3
- package/lib/renderers/Form/InputImage.js.map +2 -2
- package/lib/renderers/Form/Options.js +6 -3
- package/lib/renderers/Form/Options.js.map +2 -2
- package/lib/renderers/Form/Picker.js +2 -2
- package/lib/renderers/Form/Picker.js.map +2 -2
- package/lib/renderers/Form/wrapControl.js +2 -2
- package/lib/renderers/Form/wrapControl.js.map +2 -2
- package/lib/renderers/IFrame.js +2 -2
- package/lib/renderers/IFrame.js.map +2 -2
- package/lib/renderers/Image.d.ts +1 -0
- package/lib/renderers/Image.js +15 -1
- package/lib/renderers/Image.js.map +2 -2
- package/lib/renderers/Link.d.ts +16 -3
- package/lib/renderers/Link.js +16 -13
- package/lib/renderers/Link.js.map +2 -2
- package/lib/renderers/Log.d.ts +2 -2
- package/lib/renderers/Log.js +7 -1
- package/lib/renderers/Log.js.map +2 -2
- package/lib/renderers/Nav.d.ts +62 -36
- package/lib/renderers/Nav.js +248 -90
- package/lib/renderers/Nav.js.map +2 -2
- package/lib/renderers/SparkLine.d.ts +4 -0
- package/lib/renderers/SparkLine.js.map +2 -2
- package/lib/renderers/Table/ColumnToggler.d.ts +113 -0
- package/lib/renderers/Table/ColumnToggler.js +216 -0
- package/lib/renderers/Table/ColumnToggler.js.map +13 -0
- package/lib/renderers/Table/ItemActionsWrapper.d.ts +11 -0
- package/lib/renderers/Table/ItemActionsWrapper.js +31 -0
- package/lib/renderers/Table/ItemActionsWrapper.js.map +13 -0
- package/lib/renderers/Table/TableBody.d.ts +4 -0
- package/lib/renderers/Table/TableCell.js +3 -1
- package/lib/renderers/Table/TableCell.js.map +2 -2
- package/lib/renderers/Table/index.d.ts +14 -1
- package/lib/renderers/Table/index.js +116 -36
- package/lib/renderers/Table/index.js.map +2 -2
- package/lib/store/table.d.ts +257 -1
- package/lib/store/table.js +41 -6
- package/lib/store/table.js.map +2 -2
- package/lib/themes/ang-ie11.css +393 -90
- package/lib/themes/ang.css +393 -90
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +393 -90
- package/lib/themes/antd.css +393 -90
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +904 -263
- package/lib/themes/cxd.css +904 -263
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +393 -90
- package/lib/themes/dark.css +393 -90
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +904 -263
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/api.js +4 -4
- package/lib/utils/api.js.map +2 -2
- package/lib/utils/handleAction.d.ts +7 -0
- package/lib/utils/handleAction.js +30 -0
- package/lib/utils/handleAction.js.map +13 -0
- package/lib/utils/helper.d.ts +1 -1
- package/lib/utils/helper.js +3 -3
- package/lib/utils/helper.js.map +2 -2
- package/lib/utils/tpl-builtin.d.ts +1 -1
- package/lib/utils/tpl-builtin.js +25 -15
- package/lib/utils/tpl-builtin.js.map +2 -2
- package/package.json +1 -1
- package/schema.json +322 -261
- package/scss/_properties.scss +39 -4
- package/scss/_utilities.scss +4 -0
- package/scss/components/_button.scss +4 -5
- package/scss/components/_collapse.scss +26 -8
- package/scss/components/_column-toggler.scss +234 -0
- package/scss/components/_dropdown.scss +2 -1
- package/scss/components/_images.scss +2 -1
- package/scss/components/_link.scss +6 -0
- package/scss/components/_nav.scss +231 -223
- package/scss/components/_page.scss +5 -4
- package/scss/components/_progress.scss +2 -0
- package/scss/components/_steps.scss +1 -1
- package/scss/components/_table.scss +25 -1
- package/scss/components/form/_color.scss +1 -0
- package/scss/components/form/_date-range.scss +2 -0
- package/scss/components/form/_date.scss +2 -0
- package/scss/components/form/_fieldset.scss +1 -2
- package/scss/components/form/_file.scss +5 -4
- package/scss/components/form/_image.scss +7 -2
- package/scss/components/form/_list.scss +1 -0
- package/scss/components/form/_location.scss +1 -1
- package/scss/components/form/_text.scss +13 -0
- package/scss/components/form/_textarea.scss +10 -0
- package/scss/components/form/_transfer.scss +2 -0
- package/scss/themes/_common.scss +2 -0
- package/scss/themes/_cxd-colors.scss +56 -0
- package/scss/themes/_cxd-variables.scss +215 -90
- package/scss/themes/cxd.scss +366 -0
- package/sdk/ang-ie11.css +569 -235
- package/sdk/ang.css +512 -151
- package/sdk/antd-ie11.css +558 -224
- package/sdk/antd.css +512 -151
- package/sdk/charts.js +13 -13
- package/sdk/color-picker.js +67 -67
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +1506 -870
- package/sdk/cxd.css +1064 -324
- package/sdk/dark-ie11.css +569 -235
- package/sdk/dark.css +512 -151
- package/sdk/exceljs.js +1 -1
- package/sdk/ie11-patch.css +1 -0
- package/sdk/locale/de-DE.js +2 -0
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +22 -22
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +1506 -870
- package/sdk/sdk.css +1064 -324
- package/sdk/sdk.js +1138 -1118
- package/sdk/thirds/hls.js/hls.js +1 -1
- package/sdk/thirds/mpegts.js/mpegts.js +1 -1
- package/sdk/tinymce.js +57 -57
- package/src/Schema.ts +18 -0
- package/src/components/Alert.tsx +3 -1
- package/src/components/Badge.tsx +36 -24
- package/src/components/Collapse.tsx +14 -9
- package/src/components/DatePicker.tsx +1 -1
- package/src/components/DateRangePicker.tsx +23 -11
- package/src/components/InputBox.tsx +1 -1
- package/src/components/Link.tsx +94 -0
- package/src/components/MonthRangePicker.tsx +10 -2
- package/src/components/RichText.tsx +17 -57
- package/src/components/Select.tsx +3 -0
- package/src/components/SparkLine.tsx +4 -1
- package/src/components/Toast.tsx +5 -5
- package/src/components/Tree.tsx +6 -8
- package/src/components/icons.tsx +13 -0
- package/src/icons/clock.svg +1 -0
- package/src/icons/status-close.svg +10 -0
- package/src/icons/status-fail.svg +10 -0
- package/src/icons/status-info.svg +8 -0
- package/src/icons/status-success.svg +10 -0
- package/src/icons/status-warning.svg +8 -0
- package/src/locale/de-DE.ts +2 -0
- package/src/locale/en-US.ts +2 -0
- package/src/locale/zh-CN.ts +3 -1
- package/src/renderers/Action.tsx +5 -0
- package/src/renderers/CRUD.tsx +31 -26
- package/src/renderers/Collapse.tsx +1 -1
- package/src/renderers/Dialog.tsx +0 -4
- package/src/renderers/Drawer.tsx +0 -4
- package/src/renderers/DropDownButton.tsx +19 -14
- package/src/renderers/Form/Checkbox.tsx +8 -0
- package/src/renderers/Form/Combo.tsx +2 -3
- package/src/renderers/Form/InputFile.tsx +2 -1
- package/src/renderers/Form/InputImage.tsx +5 -2
- package/src/renderers/Form/Options.tsx +16 -5
- package/src/renderers/Form/Picker.tsx +3 -2
- package/src/renderers/Form/wrapControl.tsx +2 -2
- package/src/renderers/IFrame.tsx +2 -1
- package/src/renderers/Image.tsx +10 -0
- package/src/renderers/Link.tsx +36 -11
- package/src/renderers/Log.tsx +16 -3
- package/src/renderers/Nav.tsx +255 -100
- package/src/renderers/SparkLine.tsx +5 -0
- package/src/renderers/Table/ColumnToggler.tsx +544 -0
- package/src/renderers/Table/ItemActionsWrapper.tsx +44 -0
- package/src/renderers/Table/TableCell.tsx +16 -1
- package/src/renderers/Table/index.tsx +179 -47
- package/src/store/table.ts +57 -6
- package/src/utils/api.ts +13 -4
- package/src/utils/handleAction.ts +41 -0
- package/src/utils/helper.ts +4 -4
- package/src/utils/tpl-builtin.ts +48 -17
- package/sdk.zip +0 -0
@@ -5,6 +5,7 @@ import {SchemaNode, Action, Schema} from '../../types';
|
|
5
5
|
import forEach from 'lodash/forEach';
|
6
6
|
import {filter} from '../../utils/tpl';
|
7
7
|
import DropDownButton from '../DropDownButton';
|
8
|
+
import './ColumnToggler';
|
8
9
|
import Checkbox from '../../components/Checkbox';
|
9
10
|
import Button from '../../components/Button';
|
10
11
|
import {TableStore, ITableStore, IColumn, IRow} from '../../store/table';
|
@@ -16,7 +17,9 @@ import {
|
|
16
17
|
autobind,
|
17
18
|
isArrayChildrenModified,
|
18
19
|
getVariable,
|
19
|
-
removeHTMLTag
|
20
|
+
removeHTMLTag,
|
21
|
+
eachTree,
|
22
|
+
isObject
|
20
23
|
} from '../../utils/helper';
|
21
24
|
import {
|
22
25
|
isPureVariable,
|
@@ -50,6 +53,9 @@ import {TableBody} from './TableBody';
|
|
50
53
|
import {TplSchema} from '../Tpl';
|
51
54
|
import {MappingSchema} from '../Mapping';
|
52
55
|
import {isAlive, getSnapshot} from 'mobx-state-tree';
|
56
|
+
import ItemActionsWrapper from './ItemActionsWrapper';
|
57
|
+
import ColumnToggler from './ColumnToggler';
|
58
|
+
import {BadgeSchema} from '../../components/Badge';
|
53
59
|
|
54
60
|
/**
|
55
61
|
* 表格列,不指定类型时默认为文本类型。
|
@@ -98,7 +104,7 @@ export type TableColumnObject = {
|
|
98
104
|
/**
|
99
105
|
* 是否可快速搜索
|
100
106
|
*/
|
101
|
-
searchable?: boolean;
|
107
|
+
searchable?: boolean | SchemaObject;
|
102
108
|
|
103
109
|
/**
|
104
110
|
* 配置是否默认展示
|
@@ -278,6 +284,16 @@ export interface TableSchema extends BaseSchema {
|
|
278
284
|
* 行样式表表达式
|
279
285
|
*/
|
280
286
|
rowClassNameExpr?: string;
|
287
|
+
|
288
|
+
/**
|
289
|
+
* 行角标
|
290
|
+
*/
|
291
|
+
itemBadge?: BadgeSchema;
|
292
|
+
|
293
|
+
/**
|
294
|
+
* 开启查询区域,会根据列元素的searchable属性值,自动生成查询条件表单
|
295
|
+
*/
|
296
|
+
autoGenerateFilter?: boolean;
|
281
297
|
}
|
282
298
|
|
283
299
|
export interface TableProps extends RendererProps {
|
@@ -345,6 +361,7 @@ export interface TableProps extends RendererProps {
|
|
345
361
|
popOverContainer?: any;
|
346
362
|
canAccessSuperData?: boolean;
|
347
363
|
reUseRow?: boolean;
|
364
|
+
itemBadge?: BadgeSchema;
|
348
365
|
}
|
349
366
|
|
350
367
|
type ExportExcelToolbar = SchemaNode & {
|
@@ -404,7 +421,8 @@ export default class Table extends React.Component<TableProps, object> {
|
|
404
421
|
'popOverContainer',
|
405
422
|
'headerToolbarClassName',
|
406
423
|
'toolbarClassName',
|
407
|
-
'footerToolbarClassName'
|
424
|
+
'footerToolbarClassName',
|
425
|
+
'itemBadge'
|
408
426
|
];
|
409
427
|
static defaultProps: Partial<TableProps> = {
|
410
428
|
className: '',
|
@@ -477,6 +495,8 @@ export default class Table extends React.Component<TableProps, object> {
|
|
477
495
|
this.handleMouseMove = this.handleMouseMove.bind(this);
|
478
496
|
this.handleMouseLeave = this.handleMouseLeave.bind(this);
|
479
497
|
this.subFormRef = this.subFormRef.bind(this);
|
498
|
+
this.handleColumnToggle = this.handleColumnToggle.bind(this);
|
499
|
+
this.renderAutoFilterForm = this.renderAutoFilterForm.bind(this);
|
480
500
|
|
481
501
|
const {
|
482
502
|
store,
|
@@ -655,8 +675,12 @@ export default class Table extends React.Component<TableProps, object> {
|
|
655
675
|
) {
|
656
676
|
Table.syncRows(store, props, prevProps) && this.syncSelected();
|
657
677
|
} else if (isArrayChildrenModified(prevProps.selected!, props.selected!)) {
|
678
|
+
const prevSelectedRows = store.selectedRows
|
679
|
+
.map(item => item.id)
|
680
|
+
.join(',');
|
658
681
|
store.updateSelected(props.selected || [], props.valueField);
|
659
|
-
|
682
|
+
const selectedRows = store.selectedRows.map(item => item.id).join(',');
|
683
|
+
prevSelectedRows !== selectedRows && this.syncSelected();
|
660
684
|
}
|
661
685
|
|
662
686
|
this.updateTableInfoLazy();
|
@@ -1111,7 +1135,7 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1111
1135
|
|
1112
1136
|
handleMouseMove(e: React.MouseEvent<any>) {
|
1113
1137
|
const tr: HTMLElement = (e.target as HTMLElement).closest(
|
1114
|
-
'tr[data-
|
1138
|
+
'tr[data-id]'
|
1115
1139
|
) as HTMLElement;
|
1116
1140
|
|
1117
1141
|
if (!tr) {
|
@@ -1129,20 +1153,20 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1129
1153
|
return;
|
1130
1154
|
}
|
1131
1155
|
|
1132
|
-
const
|
1156
|
+
const id = tr.getAttribute('data-id') as string;
|
1157
|
+
const row = store.hoverRow;
|
1133
1158
|
|
1134
|
-
if (
|
1159
|
+
if (row?.id === id) {
|
1135
1160
|
return;
|
1136
1161
|
}
|
1137
|
-
store.rows
|
1162
|
+
eachTree<IRow>(store.rows, (item: IRow) => item.setIsHover(item.id === id));
|
1138
1163
|
}
|
1139
1164
|
|
1140
1165
|
handleMouseLeave() {
|
1141
1166
|
const store = this.props.store;
|
1167
|
+
const row = store.hoverRow;
|
1142
1168
|
|
1143
|
-
|
1144
|
-
store.rows[store.hoverIndex].setIsHover(false);
|
1145
|
-
}
|
1169
|
+
row?.setIsHover(false);
|
1146
1170
|
}
|
1147
1171
|
|
1148
1172
|
draggingTr: HTMLTableRowElement;
|
@@ -1346,6 +1370,111 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1346
1370
|
document.removeEventListener('mouseup', this.handleColResizeMouseUp);
|
1347
1371
|
}
|
1348
1372
|
|
1373
|
+
handleColumnToggle(columns: Array<IColumn>) {
|
1374
|
+
const {store} = this.props;
|
1375
|
+
|
1376
|
+
store.update({columns});
|
1377
|
+
}
|
1378
|
+
|
1379
|
+
renderAutoFilterForm(): React.ReactNode {
|
1380
|
+
const {
|
1381
|
+
render,
|
1382
|
+
store,
|
1383
|
+
onSearchableFromReset,
|
1384
|
+
onSearchableFromSubmit,
|
1385
|
+
onSearchableFromInit,
|
1386
|
+
classnames: cx,
|
1387
|
+
translate: __
|
1388
|
+
} = this.props;
|
1389
|
+
const searchableColumns = store.searchableColumns;
|
1390
|
+
const activedSearchableColumns = store.activedSearchableColumns;
|
1391
|
+
|
1392
|
+
if (!searchableColumns.length) {
|
1393
|
+
return null;
|
1394
|
+
}
|
1395
|
+
|
1396
|
+
const groupedSearchableColumns: Array<Record<string, any>> = [
|
1397
|
+
{body: [], md: 4},
|
1398
|
+
{body: [], md: 4},
|
1399
|
+
{body: [], md: 4}
|
1400
|
+
];
|
1401
|
+
|
1402
|
+
activedSearchableColumns.forEach((column, index) => {
|
1403
|
+
groupedSearchableColumns[index % 3].body.push({
|
1404
|
+
...column.searchable,
|
1405
|
+
name: column.searchable?.name ?? column.name,
|
1406
|
+
label: column.searchable?.label ?? column.label,
|
1407
|
+
mode: 'horizontal'
|
1408
|
+
});
|
1409
|
+
});
|
1410
|
+
|
1411
|
+
return render(
|
1412
|
+
'searchable-form',
|
1413
|
+
{
|
1414
|
+
type: 'form',
|
1415
|
+
api: null,
|
1416
|
+
title: '',
|
1417
|
+
mode: 'normal',
|
1418
|
+
submitText: __('search'),
|
1419
|
+
body: [
|
1420
|
+
{
|
1421
|
+
type: 'grid',
|
1422
|
+
columns: groupedSearchableColumns
|
1423
|
+
}
|
1424
|
+
],
|
1425
|
+
actions: [
|
1426
|
+
{
|
1427
|
+
type: 'dropdown-button',
|
1428
|
+
label: __('Table.searchFields'),
|
1429
|
+
className: cx('Table-searchableForm-dropdown', 'mr-2'),
|
1430
|
+
level: 'link',
|
1431
|
+
trigger: 'click',
|
1432
|
+
size: 'sm',
|
1433
|
+
align: 'right',
|
1434
|
+
buttons: searchableColumns.map(column => {
|
1435
|
+
return {
|
1436
|
+
type: 'checkbox',
|
1437
|
+
className: cx('Table-searchableForm-checkbox'),
|
1438
|
+
name: `__search_${column.searchable?.name ?? column.name}`,
|
1439
|
+
option: column.searchable?.label ?? column.label,
|
1440
|
+
value: column.enableSearch,
|
1441
|
+
badge: {
|
1442
|
+
offset: [-10, 5],
|
1443
|
+
visibleOn: `${
|
1444
|
+
column.toggable && !column.toggled && column.enableSearch
|
1445
|
+
}`
|
1446
|
+
},
|
1447
|
+
onChange: (value: boolean) => {
|
1448
|
+
column.setEnableSearch(value);
|
1449
|
+
}
|
1450
|
+
};
|
1451
|
+
})
|
1452
|
+
},
|
1453
|
+
{
|
1454
|
+
type: 'submit',
|
1455
|
+
label: __('search'),
|
1456
|
+
level: 'primary',
|
1457
|
+
className: 'w-18'
|
1458
|
+
},
|
1459
|
+
{
|
1460
|
+
type: 'reset',
|
1461
|
+
label: __('reset'),
|
1462
|
+
className: 'w-18'
|
1463
|
+
}
|
1464
|
+
]
|
1465
|
+
},
|
1466
|
+
{
|
1467
|
+
key: 'searchable-form',
|
1468
|
+
panelClassName: cx('Table-searchableForm'),
|
1469
|
+
actionsClassName: cx('Table-searchableForm-footer'),
|
1470
|
+
onReset: onSearchableFromReset,
|
1471
|
+
onSubmit: onSearchableFromSubmit,
|
1472
|
+
onInit: onSearchableFromInit,
|
1473
|
+
formStore: undefined
|
1474
|
+
}
|
1475
|
+
);
|
1476
|
+
}
|
1477
|
+
|
1349
1478
|
renderHeading() {
|
1350
1479
|
let {
|
1351
1480
|
title,
|
@@ -1435,7 +1564,8 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1435
1564
|
render,
|
1436
1565
|
classPrefix: ns,
|
1437
1566
|
resizable,
|
1438
|
-
classnames: cx
|
1567
|
+
classnames: cx,
|
1568
|
+
autoGenerateFilter
|
1439
1569
|
} = this.props;
|
1440
1570
|
|
1441
1571
|
if (column.type === '__checkme') {
|
@@ -1482,7 +1612,7 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1482
1612
|
|
1483
1613
|
let affix = null;
|
1484
1614
|
|
1485
|
-
if (column.searchable && column.name) {
|
1615
|
+
if (column.searchable && column.name && !autoGenerateFilter) {
|
1486
1616
|
affix = (
|
1487
1617
|
<HeadCellSearchDropDown
|
1488
1618
|
{...this.props}
|
@@ -1635,7 +1765,8 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1635
1765
|
classnames: cx,
|
1636
1766
|
checkOnItemClick,
|
1637
1767
|
popOverContainer,
|
1638
|
-
canAccessSuperData
|
1768
|
+
canAccessSuperData,
|
1769
|
+
itemBadge
|
1639
1770
|
} = this.props;
|
1640
1771
|
|
1641
1772
|
if (column.name && item.rowSpans[column.name] === 0) {
|
@@ -1723,7 +1854,13 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1723
1854
|
quickEditFormRef: this.subFormRef,
|
1724
1855
|
prefix,
|
1725
1856
|
onImageEnlarge: this.handleImageEnlarge,
|
1726
|
-
canAccessSuperData
|
1857
|
+
canAccessSuperData,
|
1858
|
+
row: item,
|
1859
|
+
itemBadge,
|
1860
|
+
showBadge:
|
1861
|
+
!props.isHead &&
|
1862
|
+
itemBadge &&
|
1863
|
+
store.firstToggledColumnIndex === props.colIndex
|
1727
1864
|
};
|
1728
1865
|
delete subProps.label;
|
1729
1866
|
|
@@ -1958,23 +2095,29 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1958
2095
|
}
|
1959
2096
|
|
1960
2097
|
return (
|
1961
|
-
<
|
2098
|
+
<ColumnToggler
|
1962
2099
|
{...rest}
|
1963
|
-
|
2100
|
+
{...(isObject(config) ? config : {})}
|
2101
|
+
tooltip={config?.tooltip || __('Table.columnsVisibility')}
|
1964
2102
|
tooltipContainer={
|
1965
2103
|
env && env.getModalContainer ? env.getModalContainer : undefined
|
1966
2104
|
}
|
1967
|
-
align={config
|
2105
|
+
align={config?.align ?? 'left'}
|
1968
2106
|
isActived={store.hasColumnHidden()}
|
1969
2107
|
classnames={cx}
|
1970
2108
|
classPrefix={ns}
|
1971
2109
|
key="columns-toggable"
|
1972
|
-
size=
|
1973
|
-
label={
|
2110
|
+
size={config?.size || 'sm'}
|
2111
|
+
label={
|
2112
|
+
config?.label || <Icon icon="columns" className="icon m-r-none" />
|
2113
|
+
}
|
2114
|
+
draggable={config?.draggable}
|
2115
|
+
columns={store.columnsData}
|
2116
|
+
onColumnToggle={this.handleColumnToggle}
|
1974
2117
|
>
|
1975
2118
|
{store.toggableColumns.map(column => (
|
1976
2119
|
<li
|
1977
|
-
className={cx('
|
2120
|
+
className={cx('ColumnToggler-menuItem')}
|
1978
2121
|
key={column.index}
|
1979
2122
|
onClick={column.toggleToggle}
|
1980
2123
|
>
|
@@ -1983,7 +2126,7 @@ export default class Table extends React.Component<TableProps, object> {
|
|
1983
2126
|
</Checkbox>
|
1984
2127
|
</li>
|
1985
2128
|
))}
|
1986
|
-
</
|
2129
|
+
</ColumnToggler>
|
1987
2130
|
);
|
1988
2131
|
}
|
1989
2132
|
|
@@ -2450,27 +2593,9 @@ export default class Table extends React.Component<TableProps, object> {
|
|
2450
2593
|
if (!finalActions.length) {
|
2451
2594
|
return null;
|
2452
2595
|
}
|
2453
|
-
const rowIndex = store.hoverIndex;
|
2454
|
-
const heights = this.heights;
|
2455
|
-
let height = 40;
|
2456
|
-
let top = 0;
|
2457
|
-
|
2458
|
-
if (heights && heights[rowIndex]) {
|
2459
|
-
height = heights[rowIndex];
|
2460
|
-
top += heights.header;
|
2461
|
-
for (let i = rowIndex - 1; i >= 0; i--) {
|
2462
|
-
top += heights[i];
|
2463
|
-
}
|
2464
|
-
}
|
2465
2596
|
|
2466
2597
|
return (
|
2467
|
-
<
|
2468
|
-
className={cx('Table-itemActions-wrap')}
|
2469
|
-
style={{
|
2470
|
-
top,
|
2471
|
-
height
|
2472
|
-
}}
|
2473
|
-
>
|
2598
|
+
<ItemActionsWrapper store={store} classnames={cx}>
|
2474
2599
|
<div className={cx('Table-itemActions')}>
|
2475
2600
|
{finalActions.map((action, index) =>
|
2476
2601
|
render(
|
@@ -2481,14 +2606,14 @@ export default class Table extends React.Component<TableProps, object> {
|
|
2481
2606
|
},
|
2482
2607
|
{
|
2483
2608
|
key: index,
|
2484
|
-
item: store.
|
2485
|
-
data: store.
|
2486
|
-
rowIndex
|
2609
|
+
item: store.hoverRow,
|
2610
|
+
data: store.hoverRow!.locals,
|
2611
|
+
rowIndex: store.hoverRow!.index
|
2487
2612
|
}
|
2488
2613
|
)
|
2489
2614
|
)}
|
2490
2615
|
</div>
|
2491
|
-
</
|
2616
|
+
</ItemActionsWrapper>
|
2492
2617
|
);
|
2493
2618
|
}
|
2494
2619
|
|
@@ -2551,7 +2676,13 @@ export default class Table extends React.Component<TableProps, object> {
|
|
2551
2676
|
}
|
2552
2677
|
|
2553
2678
|
render() {
|
2554
|
-
const {
|
2679
|
+
const {
|
2680
|
+
className,
|
2681
|
+
store,
|
2682
|
+
classnames: cx,
|
2683
|
+
affixColumns,
|
2684
|
+
autoGenerateFilter
|
2685
|
+
} = this.props;
|
2555
2686
|
|
2556
2687
|
this.renderedToolbars = []; // 用来记录哪些 toolbar 已经渲染了,已经渲染了就不重复渲染了。
|
2557
2688
|
const heading = this.renderHeading();
|
@@ -2569,6 +2700,7 @@ export default class Table extends React.Component<TableProps, object> {
|
|
2569
2700
|
'Table--unsaved': !!store.modified || !!store.moved
|
2570
2701
|
})}
|
2571
2702
|
>
|
2703
|
+
{autoGenerateFilter ? this.renderAutoFilterForm() : null}
|
2572
2704
|
{header}
|
2573
2705
|
{heading}
|
2574
2706
|
<div
|
@@ -2602,7 +2734,7 @@ export default class Table extends React.Component<TableProps, object> {
|
|
2602
2734
|
: null}
|
2603
2735
|
</div>
|
2604
2736
|
{this.renderTableContent()}
|
2605
|
-
{
|
2737
|
+
{store.hoverRow ? this.renderItemActions() : null}
|
2606
2738
|
</div>
|
2607
2739
|
{this.renderAffixHeader(tableClassName)}
|
2608
2740
|
{footer}
|
package/src/store/table.ts
CHANGED
@@ -45,6 +45,7 @@ export const Column = types
|
|
45
45
|
checkdisable: false,
|
46
46
|
isPrimary: false,
|
47
47
|
searchable: types.maybe(types.frozen()),
|
48
|
+
enableSearch: true,
|
48
49
|
sortable: false,
|
49
50
|
filterable: types.optional(types.frozen(), undefined),
|
50
51
|
fixed: '',
|
@@ -66,8 +67,13 @@ export const Column = types
|
|
66
67
|
|
67
68
|
table.persistSaveToggledColumns();
|
68
69
|
},
|
70
|
+
|
69
71
|
setToggled(value: boolean) {
|
70
72
|
self.toggled = value;
|
73
|
+
},
|
74
|
+
|
75
|
+
setEnableSearch(value: boolean) {
|
76
|
+
self.enableSearch = value;
|
71
77
|
}
|
72
78
|
}));
|
73
79
|
|
@@ -292,6 +298,10 @@ export const TableStore = iRendererStore
|
|
292
298
|
keepItemSelectionOnPageChange: false
|
293
299
|
})
|
294
300
|
.views(self => {
|
301
|
+
function getColumnsExceptBuiltinTypes() {
|
302
|
+
return self.columns.filter(item => !/^__/.test(item.type));
|
303
|
+
}
|
304
|
+
|
295
305
|
function getForms() {
|
296
306
|
return self.formsRef.map(item => ({
|
297
307
|
store: getStoreById(item.id) as IFormStore,
|
@@ -414,8 +424,8 @@ export const TableStore = iRendererStore
|
|
414
424
|
return getMovedRows().length;
|
415
425
|
}
|
416
426
|
|
417
|
-
function
|
418
|
-
return self.rows.
|
427
|
+
function getHovedRow(): IRow | undefined {
|
428
|
+
return flattenTree<IRow>(self.rows).find((item: IRow) => item.isHover);
|
419
429
|
}
|
420
430
|
|
421
431
|
function getUnSelectedRows() {
|
@@ -499,11 +509,46 @@ export const TableStore = iRendererStore
|
|
499
509
|
});
|
500
510
|
}
|
501
511
|
|
512
|
+
function getFirstToggledColumnIndex() {
|
513
|
+
const column = self.columns.find(
|
514
|
+
column => !/^__/.test(column.type) && column.toggled
|
515
|
+
);
|
516
|
+
|
517
|
+
return column == null ? null : column.index;
|
518
|
+
}
|
519
|
+
|
520
|
+
function getSearchableColumns() {
|
521
|
+
return self.columns.filter(
|
522
|
+
column => column.searchable && isObject(column.searchable)
|
523
|
+
);
|
524
|
+
}
|
525
|
+
|
526
|
+
function getActivedSearchableColumns() {
|
527
|
+
return self.columns.filter(
|
528
|
+
column =>
|
529
|
+
column.searchable &&
|
530
|
+
isObject(column.searchable) &&
|
531
|
+
column.enableSearch
|
532
|
+
);
|
533
|
+
}
|
534
|
+
|
502
535
|
return {
|
536
|
+
get columnsData() {
|
537
|
+
return getColumnsExceptBuiltinTypes();
|
538
|
+
},
|
539
|
+
|
503
540
|
get forms() {
|
504
541
|
return getForms();
|
505
542
|
},
|
506
543
|
|
544
|
+
get searchableColumns() {
|
545
|
+
return getSearchableColumns();
|
546
|
+
},
|
547
|
+
|
548
|
+
get activedSearchableColumns() {
|
549
|
+
return getSearchableColumns().filter(column => column.enableSearch);
|
550
|
+
},
|
551
|
+
|
507
552
|
get filteredColumns() {
|
508
553
|
return getFilteredColumns();
|
509
554
|
},
|
@@ -583,8 +628,8 @@ export const TableStore = iRendererStore
|
|
583
628
|
return getMovedRows();
|
584
629
|
},
|
585
630
|
|
586
|
-
get
|
587
|
-
return
|
631
|
+
get hoverRow() {
|
632
|
+
return getHovedRow();
|
588
633
|
},
|
589
634
|
|
590
635
|
get disabledHeadCheckbox() {
|
@@ -598,6 +643,10 @@ export const TableStore = iRendererStore
|
|
598
643
|
return maxLength === selectedLength;
|
599
644
|
},
|
600
645
|
|
646
|
+
get firstToggledColumnIndex() {
|
647
|
+
return getFirstToggledColumnIndex();
|
648
|
+
},
|
649
|
+
|
601
650
|
getData,
|
602
651
|
|
603
652
|
get columnGroup() {
|
@@ -1031,8 +1080,10 @@ export const TableStore = iRendererStore
|
|
1031
1080
|
if (idx === -1) {
|
1032
1081
|
// 如果上一个是选中状态,则将之间的所有 check 都变成可选
|
1033
1082
|
if (lastCheckedRow.checked) {
|
1034
|
-
if (maxLength
|
1035
|
-
self.selectedRows.
|
1083
|
+
if (maxLength) {
|
1084
|
+
if (self.selectedRows.length < maxLength) {
|
1085
|
+
self.selectedRows.push(rowItem);
|
1086
|
+
}
|
1036
1087
|
} else {
|
1037
1088
|
self.selectedRows.push(rowItem);
|
1038
1089
|
}
|
package/src/utils/api.ts
CHANGED
@@ -82,7 +82,9 @@ export function buildApi(
|
|
82
82
|
);
|
83
83
|
api.url =
|
84
84
|
tokenize(api.url.substring(0, idx + 1), data, '| url_encode') +
|
85
|
-
qsstringify(
|
85
|
+
qsstringify(
|
86
|
+
(api.query = dataMapping(params, data, undefined, api.convertKeyToPath))
|
87
|
+
) +
|
86
88
|
(~hashIdx ? api.url.substring(hashIdx) : '');
|
87
89
|
} else {
|
88
90
|
api.url = tokenize(api.url, data, '| url_encode');
|
@@ -93,7 +95,12 @@ export function buildApi(
|
|
93
95
|
}
|
94
96
|
|
95
97
|
if (api.data) {
|
96
|
-
api.body = api.data = dataMapping(
|
98
|
+
api.body = api.data = dataMapping(
|
99
|
+
api.data,
|
100
|
+
data,
|
101
|
+
undefined,
|
102
|
+
api.convertKeyToPath
|
103
|
+
);
|
97
104
|
} else if (api.method === 'post' || api.method === 'put') {
|
98
105
|
api.body = api.data = cloneObject(data);
|
99
106
|
}
|
@@ -138,7 +145,7 @@ export function buildApi(
|
|
138
145
|
}
|
139
146
|
|
140
147
|
if (api.headers) {
|
141
|
-
api.headers = dataMapping(api.headers, data);
|
148
|
+
api.headers = dataMapping(api.headers, data, undefined, false);
|
142
149
|
}
|
143
150
|
|
144
151
|
if (api.requestAdaptor && typeof api.requestAdaptor === 'string') {
|
@@ -248,7 +255,9 @@ export function responseAdaptor(ret: fetcherResult, api: ApiObject) {
|
|
248
255
|
items: payload.data
|
249
256
|
}
|
250
257
|
: payload.data) || {}
|
251
|
-
)
|
258
|
+
),
|
259
|
+
undefined,
|
260
|
+
api.convertKeyToPath
|
252
261
|
);
|
253
262
|
}
|
254
263
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/**
|
2
|
+
* 后续好多地方可能都要支持 action,所以提取公共功能
|
3
|
+
*/
|
4
|
+
|
5
|
+
import {RendererProps} from '../factory';
|
6
|
+
import {ActionSchema, AjaxActionSchema} from '../renderers/Action';
|
7
|
+
import {normalizeApi, str2function} from './api';
|
8
|
+
|
9
|
+
export default function handleAction(
|
10
|
+
e: React.MouseEvent<any>,
|
11
|
+
action: ActionSchema,
|
12
|
+
props: RendererProps,
|
13
|
+
data?: any
|
14
|
+
) {
|
15
|
+
// https://reactjs.org/docs/legacy-event-pooling.html
|
16
|
+
e.persist();
|
17
|
+
|
18
|
+
const onAction = props.onAction;
|
19
|
+
let onClick: any = action.onClick;
|
20
|
+
|
21
|
+
if (typeof onClick === 'string') {
|
22
|
+
onClick = str2function(onClick, 'event', 'props');
|
23
|
+
}
|
24
|
+
const result: any = onClick && onClick(e, props);
|
25
|
+
|
26
|
+
if (e.isDefaultPrevented() || result === false || !onAction) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
|
30
|
+
e.preventDefault();
|
31
|
+
|
32
|
+
// download 是一种 ajax 的简写
|
33
|
+
if (action.actionType === 'download') {
|
34
|
+
action.actionType = 'ajax';
|
35
|
+
const api = normalizeApi((action as AjaxActionSchema).api);
|
36
|
+
api.responseType = 'blob';
|
37
|
+
(action as AjaxActionSchema).api = api;
|
38
|
+
}
|
39
|
+
|
40
|
+
onAction(e, action, data || props.data);
|
41
|
+
}
|
package/src/utils/helper.ts
CHANGED
@@ -181,7 +181,8 @@ export function getVariable(
|
|
181
181
|
export function setVariable(
|
182
182
|
data: {[propName: string]: any},
|
183
183
|
key: string,
|
184
|
-
value: any
|
184
|
+
value: any,
|
185
|
+
convertKeyToPath?: boolean
|
185
186
|
) {
|
186
187
|
data = data || {};
|
187
188
|
|
@@ -190,7 +191,7 @@ export function setVariable(
|
|
190
191
|
return;
|
191
192
|
}
|
192
193
|
|
193
|
-
const parts = keyToPath(key);
|
194
|
+
const parts = convertKeyToPath !== false ? keyToPath(key) : [key];
|
194
195
|
const last = parts.pop() as string;
|
195
196
|
|
196
197
|
while (parts.length) {
|
@@ -507,7 +508,6 @@ export function isDisabled(
|
|
507
508
|
);
|
508
509
|
}
|
509
510
|
|
510
|
-
|
511
511
|
export function hasAbility(
|
512
512
|
schema: any,
|
513
513
|
ability: string,
|
@@ -1618,7 +1618,7 @@ export function detectPropValueChanged<
|
|
1618
1618
|
|
1619
1619
|
// 去掉字符串中的 html 标签,不完全准确但效率比较高
|
1620
1620
|
export function removeHTMLTag(str: string) {
|
1621
|
-
return str.replace(/<\/?[^>]+(>|$)/g, '');
|
1621
|
+
return typeof str === 'string' ? str.replace(/<\/?[^>]+(>|$)/g, '') : str;
|
1622
1622
|
}
|
1623
1623
|
|
1624
1624
|
/**
|