From 5c7c89ceb0dea692e85f28ff0c0c96874e7ee73f Mon Sep 17 00:00:00 2001 From: Wink <809097465@qq.com> Date: Thu, 27 Feb 2025 10:28:40 +0800 Subject: [PATCH] [Fix] Fixed the issue that the historical version was not refreshed after the task was pushed (#4265) --- .../src/components/VersionList/index.tsx | 10 +++--- .../SqlTask/HistoryVersion.tsx | 35 +++++++++---------- .../CenterTabContent/SqlTask/index.tsx | 30 +++++++++++++++- dinky-web/src/services/endpoints.tsx | 1 + dinky-web/src/types/Studio/data.d.ts | 4 +-- 5 files changed, 54 insertions(+), 26 deletions(-) diff --git a/dinky-web/src/components/VersionList/index.tsx b/dinky-web/src/components/VersionList/index.tsx index 11d32882d7..7866bc577e 100644 --- a/dinky-web/src/components/VersionList/index.tsx +++ b/dinky-web/src/components/VersionList/index.tsx @@ -25,20 +25,20 @@ import { ListItemTypeProps } from 'antd/es/list/Item'; export type TaskVersionListItem = { id: number; - taskId?: number; + taskId: number; name?: string; dialect?: string; type?: string; statement: string; - versionId?: string; + versionId: number; createTime?: string; isLatest?: boolean; }; export interface VersionListProps { data: TaskVersionListItem[]; - onSelectListen?: (value: TaskVersionListItem) => void; - onDeleteListen?: (value: TaskVersionListItem) => void; - onRollBackListen?: (value: TaskVersionListItem) => void; + onSelectListen: (value: TaskVersionListItem) => void; + onDeleteListen: (value: TaskVersionListItem) => void; + onRollBackListen: (value: TaskVersionListItem) => void; loading?: boolean; header?: string; options?: ListItemTypeProps; diff --git a/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/HistoryVersion.tsx b/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/HistoryVersion.tsx index 8b9e685848..19abc02c28 100644 --- a/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/HistoryVersion.tsx +++ b/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/HistoryVersion.tsx @@ -18,7 +18,7 @@ */ import { API_CONSTANTS } from '@/services/endpoints'; -import React, { useRef, useState } from 'react'; +import React, { useCallback, useRef, useState } from 'react'; import { TaskVersionListItem } from '@/types/Studio/data'; import { l } from '@/utils/intl'; import moment from 'moment'; @@ -30,13 +30,22 @@ import { handleOption, handleRemoveById } from '@/services/BusinessCrud'; import VersionList from '@/components/VersionList'; import { useRequest } from '@umijs/max'; -export const HistoryVersion = (props: { taskId: number; statement: string; updateTime: Date }) => { - const { taskId, statement, updateTime } = props; +export const HistoryVersion = (props: { + taskId: number; + statement: string; + updateTime: Date; + lastVersionId: number; + rollbackTask: (taskId: number, versionId: number) => void; +}) => { + const { taskId, statement, updateTime, lastVersionId, rollbackTask } = props; - const { data, refresh, loading } = useRequest({ - url: API_CONSTANTS.GET_JOB_VERSION, - params: { taskId: taskId } - }); + const { data, refresh, loading } = useRequest( + { + url: API_CONSTANTS.GET_JOB_VERSION, + params: { taskId: taskId } + }, + { refreshDeps: [lastVersionId] } + ); const [versionDiffVisible, setVersionDiffVisible] = useState(false); const [versionDiffRow, setVersionDiffRow] = useState(); @@ -113,17 +122,7 @@ export const HistoryVersion = (props: { taskId: number; statement: string; updat }), okText: l('button.confirm'), cancelText: l('button.cancel'), - onOk: async () => { - const TaskVersionRollbackItem = { - taskId: row.taskId, - versionId: row.versionId - }; - await handleOption( - 'api/task/rollbackTask', - l('pages.datastudio.label.version.rollback.flinksql'), - TaskVersionRollbackItem - ); - } + onOk: async () => rollbackTask(row.taskId, row.versionId) }); }; diff --git a/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/index.tsx b/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/index.tsx index 6821013302..ea2424d17b 100644 --- a/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/index.tsx +++ b/dinky-web/src/pages/DataStudio/CenterTabContent/SqlTask/index.tsx @@ -194,6 +194,7 @@ export const SqlTask = memo((props: FlinkSqlProps & any) => { subscribeTopic: model.subscribeTopic })); const [isRunning, setIsRunning] = useState(false); + const [lastVersion, setLastVersion] = useState(currentState.versionId); const [pushDolphinState, setPushDolphinState] = useState<{ modalVisible: boolean; @@ -401,6 +402,25 @@ export const SqlTask = memo((props: FlinkSqlProps & any) => { taskOwnerLockingStrategy ); + const handleRollbackVersion = async (taskId: number, versionId: number) => { + const result = await handleOption( + API_CONSTANTS.ROLLBACK_TASK, + l('pages.datastudio.label.version.rollback.flinksql'), + { + taskId, + versionId + } + ); + if (result && result.success) { + // 更新当前编辑器内的sql语句 + const task = await getTaskDetails(taskId); + if (task) { + setOriginStatementValue(task.statement); + setCurrentState((prevState) => ({ ...prevState, ...task })); + } + } + }; + const rightToolbarItem: TabsProps['items'] = []; if ( isSql(currentState.dialect) || @@ -429,6 +449,8 @@ export const SqlTask = memo((props: FlinkSqlProps & any) => { taskId={currentState.taskId} statement={currentState.statement} updateTime={currentState.updateTime} + lastVersionId={lastVersion} + rollbackTask={handleRollbackVersion} /> ) }); @@ -649,11 +671,17 @@ export const SqlTask = memo((props: FlinkSqlProps & any) => { currentState.step = JOB_LIFE_CYCLE.DEVELOP; } else { await handleSave(); - await changeTaskLife( + const result = await changeTaskLife( l('global.table.lifecycle.publishing'), currentState.taskId, JOB_LIFE_CYCLE.PUBLISH ); + if (result.success) { + const taskDetails = await getTaskDetails(currentState.taskId); + if (taskDetails) { + setLastVersion(taskDetails.versionId); + } + } currentState.step = JOB_LIFE_CYCLE.PUBLISH; } setCurrentState((prevState) => ({ ...prevState, step: currentState.step })); diff --git a/dinky-web/src/services/endpoints.tsx b/dinky-web/src/services/endpoints.tsx index d67ff6084e..0ea92eda62 100644 --- a/dinky-web/src/services/endpoints.tsx +++ b/dinky-web/src/services/endpoints.tsx @@ -283,6 +283,7 @@ export enum API_CONSTANTS { CATALOGUE_GET_CATALOGUE_SORT_TYPE_DATA = '/api/catalogue/getCatalogueSortType', GET_JOB_VERSION = '/api/task/version', RESTART_TASK = '/api/task/restartTask', + ROLLBACK_TASK = '/api/task/rollbackTask', SAVEPOINT = '/api/task/savepoint', RESTART_TASK_FROM_CHECKPOINT = '/api/task/selectSavePointRestartTask', LIST_FLINK_SQL_ENV = '/api/task/listFlinkSQLEnv', diff --git a/dinky-web/src/types/Studio/data.d.ts b/dinky-web/src/types/Studio/data.d.ts index c8eea45e91..d4d6fceda8 100644 --- a/dinky-web/src/types/Studio/data.d.ts +++ b/dinky-web/src/types/Studio/data.d.ts @@ -110,12 +110,12 @@ export type SavePoint = { export type TaskVersionListItem = { id: number; - taskId?: number; + taskId: number; name?: string; dialect?: string; type?: string; statement: string; - versionId?: string; + versionId: number; createTime?: string; isLatest?: boolean; };