From 8137f2eb1466db7af82231e82708e56f36b4116f Mon Sep 17 00:00:00 2001 From: langyong Date: Tue, 10 Dec 2024 21:13:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=AF=E7=94=A8keep?= =?UTF-8?q?ItemSelectionOnPageChange=E6=97=B6=EF=BC=8CselectedChange?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=95=B0=E6=8D=AE=E4=B8=AD=E7=9A=84=20select?= =?UTF-8?q?edItems=20=E4=BB=85=E5=8C=85=E5=90=AB=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E9=A1=B5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/amis/src/renderers/Table/index.tsx | 28 ++++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/amis/src/renderers/Table/index.tsx b/packages/amis/src/renderers/Table/index.tsx index a54f27d44b4..da3d48ab212 100644 --- a/packages/amis/src/renderers/Table/index.tsx +++ b/packages/amis/src/renderers/Table/index.tsx @@ -4,6 +4,7 @@ import {reaction} from 'mobx'; import Sortable from 'sortablejs'; import isEqual from 'lodash/isEqual'; import find from 'lodash/find'; +import uniqBy from 'lodash/uniqBy'; import debounce from 'lodash/debounce'; import intersection from 'lodash/intersection'; import isPlainObject from 'lodash/isPlainObject'; @@ -21,7 +22,6 @@ import { SchemaNode, ActionObject, Schema, - evalExpression, filter, noop, anyChanged, @@ -40,9 +40,6 @@ import { offset, getStyleNumber, getPropValue, - isExpression, - getTree, - resolveVariableAndFilterForAsync, getMatchedEventTargets, loopTooMuch } from 'amis-core'; @@ -1043,7 +1040,14 @@ export default class Table< } async handleCheck(item: IRow, value?: boolean, shift?: boolean) { - const {store, data, dispatchEvent, selectable} = this.props; + const { + data, + dispatchEvent, + keepItemSelectionOnPageChange, + primaryField, + store, + selectable + } = this.props; if (!selectable) { return; @@ -1062,7 +1066,19 @@ export default class Table< const rendererEvent = await dispatchEvent( 'selectedChange', createObject(data, { - selectedItems: store.selectedRows.map(row => row.data), + selectedItems: keepItemSelectionOnPageChange + ? uniqBy( + data.selectedItems + .slice() + .filter((_item: any) => { + return value + ? true + : item.data[primaryField] !== _item[primaryField]; + }) + .concat(store.selectedRows.map(row => row.data)), + (item: any) => item[primaryField] + ) + : store.selectedRows.map(row => row.data), unSelectedItems: store.unSelectedRows.map(row => row.data), item: item.data })