diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricFieldFormTable.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricFieldFormTable.tsx index 4da89399b..06bf488bf 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricFieldFormTable.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricFieldFormTable.tsx @@ -67,26 +67,41 @@ const MetricFieldFormTable: React.FC = ({ }, ]; + const handleUpdateKeys = (updateKeys: Record) => { + setSelectedKeysMap(updateKeys); + const selectedKeys: string[] = []; + const fieldList = Object.entries(updateKeys).reduce((list: any[], item) => { + const [fieldName, selected] = item; + if (selected) { + selectedKeys.push(fieldName); + list.push({ fieldName }); + } + return list; + }, []); + setSelectedKeys(selectedKeys); + onFieldChange(fieldList); + }; + const rowSelection = { selectedRowKeys: selectedKeys, onSelect: (record: ISemantic.IFieldTypeParamsItem, selected: boolean) => { const updateKeys = { ...selectedKeysMap, [record.fieldName]: selected }; - const selectedKeys: string[] = []; - setSelectedKeysMap(updateKeys); - const fieldList = Object.entries(updateKeys).reduce((list: any[], item) => { - const [fieldName, selected] = item; - if (selected) { - selectedKeys.push(fieldName); - list.push({ fieldName }); - } - return list; - }, []); - setSelectedKeys(selectedKeys); - onFieldChange(fieldList); + handleUpdateKeys(updateKeys); + }, + onSelectAll: ( + selected: boolean, + selectedRows: ISemantic.IFieldTypeParamsItem[], + changeRows: ISemantic.IFieldTypeParamsItem[], + ) => { + const updateKeys = changeRows.reduce( + (keyMap: Record, item: ISemantic.IFieldTypeParamsItem) => { + keyMap[item.fieldName] = selected; + return keyMap; + }, + {}, + ); + handleUpdateKeys({ ...selectedKeysMap, ...updateKeys }); }, - // onChange: (_selectedRowKeys: any[]) => { - // setSelectedKeys([..._selectedRowKeys]); - // }, }; return ( diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMeasuresFormTable.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMeasuresFormTable.tsx index a28442d07..6f8719e54 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMeasuresFormTable.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMeasuresFormTable.tsx @@ -106,34 +106,52 @@ const MetricMeasuresFormTable: React.FC = ({ }, ]; + const handleUpdateKeys = (updateKeys: Record) => { + const datasource = + datasourceId && Array.isArray(measuresList) + ? measuresList.filter((item) => item.datasourceId === datasourceId) + : measuresList; + setSelectedKeysMap(updateKeys); + const selectedKeys: string[] = []; + const measures = datasource.reduce( + (list: any[], { bizName, name, expr, datasourceId, agg }) => { + if (updateKeys[bizName] === true) { + selectedKeys.push(bizName); + list.push({ + bizName, + name, + expr, + agg, + datasourceId, + }); + } + return list; + }, + [], + ); + setSelectedKeys(selectedKeys); + onFieldChange(measures); + }; + const rowSelection = { selectedRowKeys: selectedKeys, onSelect: (record: ISemantic.IMeasure, selected: boolean) => { - const datasource = - datasourceId && Array.isArray(measuresList) - ? measuresList.filter((item) => item.datasourceId === datasourceId) - : measuresList; const updateKeys = { ...selectedKeysMap, [record.bizName]: selected }; - setSelectedKeysMap(updateKeys); - const selectedKeys: string[] = []; - const measures = datasource.reduce( - (list: any[], { bizName, name, expr, datasourceId, agg }) => { - if (updateKeys[bizName] === true) { - selectedKeys.push(bizName); - list.push({ - bizName, - name, - expr, - agg, - datasourceId, - }); - } - return list; + handleUpdateKeys(updateKeys); + }, + onSelectAll: ( + selected: boolean, + selectedRows: ISemantic.IMeasure[], + changeRows: ISemantic.IMeasure[], + ) => { + const updateKeys = changeRows.reduce( + (keyMap: Record, item: ISemantic.IMeasure) => { + keyMap[item.bizName] = selected; + return keyMap; }, - [], + {}, ); - setSelectedKeys(selectedKeys); - onFieldChange(measures); + handleUpdateKeys({ ...selectedKeysMap, ...updateKeys }); }, }; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMetricFormTable.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMetricFormTable.tsx index 39a2c434c..c9659c6c9 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMetricFormTable.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/MetricMetricFormTable.tsx @@ -74,25 +74,43 @@ const MetricMetricFormTable: React.FC = ({ }, ]; + const handleUpdateKeys = (updateKeys: Record) => { + setSelectedKeysMap(updateKeys); + const selectedKeys: string[] = []; + const metrics = metricList.reduce((list: any[], item) => { + const { bizName, id } = item; + if (updateKeys[bizName] === true) { + selectedKeys.push(bizName); + list.push({ + bizName, + id, + }); + } + return list; + }, []); + setSelectedKeys(selectedKeys); + onFieldChange(metrics); + }; + const rowSelection = { selectedRowKeys: selectedKeys, onSelect: (record: ISemantic.IMeasure, selected: boolean) => { const updateKeys = { ...selectedKeysMap, [record.bizName]: selected }; - setSelectedKeysMap(updateKeys); - const selectedKeys: string[] = []; - const metrics = metricList.reduce((list: any[], item) => { - const { bizName, id } = item; - if (updateKeys[bizName] === true) { - selectedKeys.push(bizName); - list.push({ - bizName, - id, - }); - } - return list; - }, []); - setSelectedKeys(selectedKeys); - onFieldChange(metrics); + handleUpdateKeys(updateKeys); + }, + onSelectAll: ( + selected: boolean, + selectedRows: ISemantic.IMetricItem[], + changeRows: ISemantic.IMetricItem[], + ) => { + const updateKeys = changeRows.reduce( + (keyMap: Record, item: ISemantic.IMetricItem) => { + keyMap[item.bizName] = selected; + return keyMap; + }, + {}, + ); + handleUpdateKeys({ ...selectedKeysMap, ...updateKeys }); }, };