From 6e0fa95e6f771e5333dd9241c398237387c2b2ef Mon Sep 17 00:00:00 2001 From: tristanliu <37809633+sevenliu1896@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:18:36 +0800 Subject: [PATCH] [improvement][semantic-fe] Adding permission logic for bulk operations in the indicator market. (#471) * [improvement][semantic-fe] Add model alias setting & Add view permission restrictions to the model permission management tab. [improvement][semantic-fe] Add permission control to the action buttons for the main domain; apply high sensitivity filtering to the authorization of metrics/dimensions. [improvement][semantic-fe] Optimize the editing mode in the dimension/metric/datasource components to use the modelId stored in the database for data, instead of relying on the data from the state manager. * [improvement][semantic-fe] Add time granularity setting in the data source configuration. * [improvement][semantic-fe] Dictionary import for dimension values supported in Q&A visibility * [improvement][semantic-fe] Modification of data source creation prompt wording" * [improvement][semantic-fe] metric market experience optimization * [improvement][semantic-fe] enhance the analysis of metric trends * [improvement][semantic-fe] optimize the presentation of metric trend permissions * [improvement][semantic-fe] add metric trend download functionality * [improvement][semantic-fe] fix the dimension initialization issue in metric correlation * [improvement][semantic-fe] Fix the issue of database changes not taking effect when creating based on an SQL data source. * [improvement][semantic-fe] Optimizing pagination logic and some CSS styles * [improvement][semantic-fe] Fixing the API for the indicator list by changing "current" to "pageNum" * [improvement][semantic-fe] Fixing the default value setting for the indicator list * [improvement][semantic-fe] Adding batch operations for indicators/dimensions/models * [improvement][semantic-fe] Replacing the single status update API for indicators/dimensions with a batch update API * [improvement][semantic-fe] Redesigning the indicator homepage to incorporate trend charts and table functionality for indicators * [improvement][semantic-fe] Optimizing the logic for setting dimension values and editing data sources, and adding system settings functionality * [improvement][semantic-fe] Upgrading antd version to 5.x, extracting the batch operation button component, optimizing the interaction for system settings, and expanding the configuration generation types for list-to-select component. * [improvement][semantic-fe] Adding the ability to filter dimensions based on whether they are tags or not. * [improvement][semantic-fe] Adding the ability to edit relationships between models in the canvas. * [improvement][semantic-fe] Updating the datePicker component to use dayjs instead. * [improvement][semantic-fe] Fixing the issue with passing the model ID for dimensions in the indicator market. * [improvement][semantic-fe] Fixing the abnormal state of the popup when creating a model. * [improvement][semantic-fe] Adding permission logic for bulk operations in the indicator market. --- .../src/pages/SemanticModel/Metric/Market.tsx | 23 ++++++++++++++++--- .../src/pages/SemanticModel/data.d.ts | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx index f4b916fab..cb99b91d1 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx @@ -60,6 +60,8 @@ const ClassMetricTable: React.FC = ({ domainManger, dispatch }) => { const [downloadLoading, setDownloadLoading] = useState(false); + const [hasAllPermission, setHasAllPermission] = useState(true); + const actionRef = useRef(); useEffect(() => { @@ -322,11 +324,25 @@ const ClassMetricTable: React.FC = ({ domainManger, dispatch }) => { const rowSelection = { onChange: (selectedRowKeys: React.Key[]) => { + const permissionList: boolean[] = []; + selectedRowKeys.forEach((id: React.Key) => { + const target = dataSource.find((item) => { + return item.id === id; + }); + if (target) { + permissionList.push(target.hasAdminRes); + } + }); + if (permissionList.includes(false)) { + setHasAllPermission(false); + } else { + setHasAllPermission(true); + } setSelectedRowKeys(selectedRowKeys); }, - getCheckboxProps: (record: ISemantic.IMetricItem) => ({ - disabled: !record.hasAdminRes, - }), + // getCheckboxProps: (record: ISemantic.IMetricItem) => ({ + // disabled: !record.hasAdminRes, + // }), }; const onMenuClick = (key: string) => { @@ -397,6 +413,7 @@ const ClassMetricTable: React.FC = ({ domainManger, dispatch }) => { onDeleteConfirm={() => { queryBatchUpdateStatus(selectedRowKeys, StatusEnum.DELETED); }} + disabledList={hasAllPermission ? [] : ['batchStart', 'batchStop', 'batchDelete']} onMenuClick={onMenuClick} onDownloadDateRangeChange={(searchDateRange, pickerType) => { downloadMetricQuery(selectedRowKeys, searchDateRange, pickerType); diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/data.d.ts b/webapp/packages/supersonic-fe/src/pages/SemanticModel/data.d.ts index 8594a9985..f7ff0923d 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/data.d.ts +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/data.d.ts @@ -194,7 +194,7 @@ export declare namespace ISemantic { domainName: string; modelName: string; modelId: number; - hasAdminRes?: boolean; + hasAdminRes: boolean; type: string; typeParams: ITypeParams; fullPath: string;