mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 19:51:00 +00:00
* [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
113 lines
2.7 KiB
TypeScript
113 lines
2.7 KiB
TypeScript
import React, { useState, useRef, useEffect } from 'react';
|
|
import { Tabs } from 'antd';
|
|
import SqlDetail, { DataSourceSubmitData } from './SqlDetail';
|
|
|
|
import styles from '../style.less';
|
|
|
|
type Panes = {
|
|
title: string;
|
|
key: string;
|
|
type: 'add' | 'edit';
|
|
scriptId?: number;
|
|
sql?: string;
|
|
isSave?: boolean; // 暂存提示保存
|
|
};
|
|
|
|
type TableRef = {
|
|
current?: {
|
|
fetchSqlList: () => void;
|
|
upDateActiveItem: (key: any) => void;
|
|
};
|
|
};
|
|
|
|
type Props = {
|
|
initialValues: any;
|
|
onSubmitSuccess?: (dataSourceInfo: DataSourceSubmitData) => void;
|
|
};
|
|
|
|
const { TabPane } = Tabs;
|
|
const LIST_KEY = 'list';
|
|
|
|
const SqlSide: React.FC<Props> = ({ initialValues, onSubmitSuccess }) => {
|
|
const defaultPanes: Panes[] = [
|
|
{
|
|
key: '数据源查询',
|
|
title: initialValues?.name || '数据源查询',
|
|
type: 'add',
|
|
isSave: true,
|
|
},
|
|
];
|
|
|
|
const [activeKey, setActiveKey] = useState('数据源查询');
|
|
const [panes, setPanes] = useState<Panes[]>(defaultPanes);
|
|
const tableRef: TableRef = useRef();
|
|
const panesRef = useRef<Panes[]>(defaultPanes);
|
|
|
|
const updatePane = (list: Panes[]) => {
|
|
setPanes(list);
|
|
panesRef.current = list;
|
|
};
|
|
|
|
// 更新脚本内容
|
|
const updateTabSql = (sql: string, targetKey: string) => {
|
|
const newPanes = panesRef.current.slice();
|
|
const index = newPanes.findIndex((item) => item.key === targetKey);
|
|
const targetItem = newPanes[index];
|
|
newPanes.splice(index, 1, {
|
|
...targetItem,
|
|
sql,
|
|
isSave: false,
|
|
});
|
|
updatePane(newPanes);
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (initialValues) {
|
|
updateTabSql(initialValues?.datasourceDetail?.sqlQuery || '', '数据源查询');
|
|
}
|
|
}, [initialValues]);
|
|
|
|
const onChange = (key: string) => {
|
|
setActiveKey(key);
|
|
tableRef?.current?.upDateActiveItem(key);
|
|
if (key === LIST_KEY) {
|
|
tableRef?.current?.fetchSqlList();
|
|
}
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<div className={styles.outside}>
|
|
<Tabs
|
|
type="editable-card"
|
|
hideAdd={true}
|
|
activeKey={activeKey}
|
|
onChange={onChange}
|
|
className={styles.middleArea}
|
|
>
|
|
{panes.map((pane) => {
|
|
return (
|
|
<TabPane
|
|
tab={<div className={styles.paneName}>{pane.title}</div>}
|
|
closable={false}
|
|
key={pane.key}
|
|
>
|
|
<SqlDetail
|
|
onSubmitSuccess={onSubmitSuccess}
|
|
dataSourceItem={initialValues}
|
|
onUpdateSql={(sql: string) => {
|
|
updateTabSql(sql, pane.key);
|
|
}}
|
|
sql={pane.sql}
|
|
/>
|
|
</TabPane>
|
|
);
|
|
})}
|
|
</Tabs>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default SqlSide;
|