@@ -621,6 +662,24 @@ exports[`GlobalDashboard should render workflow tab by default 1`] = `
>
状态
+
+ |
+ -
+ |
+
+ 2026-04-13 10:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 12:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 13:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 14:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 15:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 16:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 17:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 18:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 19:00:00
+ |
+
+ -
+ |
|
+
+ -
+ |
+
+ 2026-04-13 20:00:00
+ |
+
+ -
+ |
{
+ beforeEach(() => {
+ MockDate.set('2026-04-13 12:00:00');
+ });
+
+ afterEach(() => {
+ MockDate.reset();
+ });
+
it('should render fallback priority tag for unknown priority', () => {
const columns = workflowPanelColumns();
const priorityRender = columns[5].render as (value?: string) => any;
@@ -57,4 +66,98 @@ describe('GlobalDashboard/WorkflowPanel/column', () => {
expect(screen.getByText('-')).toBeInTheDocument();
});
+
+ describe('create_user_name column (index 7)', () => {
+ it('should render CustomAvatar when create_user_name is provided', () => {
+ const columns = workflowPanelColumns();
+ const render = columns[7].render as (name: string | undefined) => any;
+
+ superRender(<>{render('admin')}>);
+
+ // CustomAvatar renders the uppercased first letter of the name
+ expect(screen.getByText('A')).toBeInTheDocument();
+ });
+
+ it('should render dash when create_user_name is empty', () => {
+ const columns = workflowPanelColumns();
+ const render = columns[7].render as (name: string | undefined) => any;
+
+ superRender(<>{render(undefined)}>);
+
+ expect(screen.getByText('-')).toBeInTheDocument();
+ });
+
+ it('should have filterCustomType select and correct filterKey', () => {
+ const columns = workflowPanelColumns();
+ const col = columns[7];
+
+ expect(col.filterCustomType).toBe('select');
+ expect(col.filterKey).toBe('filter_create_user_id');
+ expect(col.filterLabel).toBe('发起人');
+ });
+ });
+
+ describe('created_at column (index 8)', () => {
+ it('should render formatted time when created_at is provided', () => {
+ const columns = workflowPanelColumns();
+ const render = columns[8].render as (time: string | undefined) => any;
+
+ superRender(<>{render('2026-04-13 10:00:00')}>);
+
+ expect(screen.getByText('2026-04-13 10:00:00')).toBeInTheDocument();
+ });
+
+ it('should render dash when created_at is empty', () => {
+ const columns = workflowPanelColumns();
+ const render = columns[8].render as (time: string | undefined) => any;
+
+ superRender(<>{render(undefined)}>);
+
+ expect(screen.getByText('-')).toBeInTheDocument();
+ });
+
+ it('should have filterCustomType date-range and correct filterKey array', () => {
+ const columns = workflowPanelColumns();
+ const col = columns[8];
+
+ expect(col.filterCustomType).toBe('date-range');
+ expect(col.filterKey).toEqual([
+ 'filter_create_time_from',
+ 'filter_create_time_to'
+ ]);
+ expect(col.filterLabel).toBe('创建时间');
+ });
+ });
+
+ describe('updated_at column (index 9)', () => {
+ it('should render formatted time when updated_at is provided', () => {
+ const columns = workflowPanelColumns();
+ const render = columns[9].render as (time: string | undefined) => any;
+
+ superRender(<>{render('2026-04-13 16:00:00')}>);
+
+ expect(screen.getByText('2026-04-13 16:00:00')).toBeInTheDocument();
+ });
+
+ it('should render dash when updated_at is empty', () => {
+ const columns = workflowPanelColumns();
+ const render = columns[9].render as (time: string | undefined) => any;
+
+ superRender(<>{render(undefined)}>);
+
+ expect(screen.getByText('-')).toBeInTheDocument();
+ });
+
+ it('should have filterCustomType date-range and correct filterKey array', () => {
+ const columns = workflowPanelColumns();
+ const col = columns[9];
+
+ expect(col.filterCustomType).toBe('date-range');
+ expect(col.filterKey).toEqual([
+ 'filter_update_time_from',
+ 'filter_update_time_to'
+ ]);
+ expect(col.filterLabel).toBe('最后操作时间');
+ });
+ });
});
diff --git a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/__tests__/index.test.tsx b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/__tests__/index.test.tsx
index bac2cc644..294b03c98 100644
--- a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/__tests__/index.test.tsx
+++ b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/__tests__/index.test.tsx
@@ -3,18 +3,23 @@ import WorkflowPanel from '..';
import { superRender } from '@actiontech/shared/lib/testUtil/superRender';
import { mockUseCurrentProject } from '@actiontech/shared/lib/testUtil/mockHook/mockUseCurrentProject';
import { mockUseCurrentUser } from '@actiontech/shared/lib/testUtil/mockHook/mockUseCurrentUser';
-import { sqleMockApi } from '@actiontech/shared/lib/testUtil/mockApi';
+import {
+ sqleMockApi,
+ baseMockApi
+} from '@actiontech/shared/lib/testUtil/mockApi';
import {
createSpyErrorResponse,
createSpySuccessResponse
} from '@actiontech/shared/lib/testUtil/mockApi/common';
import { GlobalWorkflowListItemWorkflowTypeEnum } from '@actiontech/shared/lib/api/sqle/service/common.enum';
import { mockGlobalWorkflowStatisticsData } from '@actiontech/shared/lib/testUtil/mockApi/sqle/globalDashboard/data';
+import { GetGlobalWorkflowListV2FilterCardEnum } from '@actiontech/shared/lib/api/sqle/service/GlobalDashboard/index.enum';
describe('GlobalDashboard/WorkflowPanel', () => {
const openSpy = jest.spyOn(window, 'open').mockImplementation(jest.fn());
let getGlobalWorkflowStatisticsSpy: jest.SpyInstance;
let getGlobalWorkflowListSpy: jest.SpyInstance;
+ let getUserListSpy: jest.SpyInstance;
beforeEach(() => {
jest.useFakeTimers();
@@ -24,6 +29,7 @@ describe('GlobalDashboard/WorkflowPanel', () => {
sqleMockApi.globalDashboard.getGlobalWorkflowStatistics();
getGlobalWorkflowListSpy =
sqleMockApi.globalDashboard.getGlobalWorkflowList();
+ getUserListSpy = baseMockApi.userCenter.getUserList();
});
afterEach(() => {
@@ -145,31 +151,129 @@ describe('GlobalDashboard/WorkflowPanel', () => {
expect(getGlobalWorkflowListSpy).toHaveBeenCalledTimes(1);
});
- it('should update workflow type filter and then clear to all', async () => {
+ it('should call User.ListUsers on mount with page_size 9999', async () => {
+ superRender();
+
+ await act(async () => jest.advanceTimersByTime(3000));
+
+ expect(getUserListSpy).toHaveBeenCalledWith({ page_size: 9999 });
+ });
+
+ it('should render filter button in toolbar', async () => {
+ superRender();
+ await act(async () => jest.advanceTimersByTime(3000));
+
+ expect(
+ document.querySelector('.actiontech-filter-button-namespace')
+ ).toBeInTheDocument();
+ });
+
+ it('should show status and createdAt and updatedAt filters in TableFilterContainer after clicking filter button', async () => {
superRender();
await act(async () => jest.advanceTimersByTime(3000));
fireEvent.click(
- document.querySelector(
- '.custom-segmented-filter-wrapper .ant-segmented-item-label[title="SQL上线工单"]'
- ) as Element
+ document.querySelector('.actiontech-filter-button-namespace') as Element
);
await act(async () => jest.advanceTimersByTime(0));
- expect(getGlobalWorkflowListSpy).toHaveBeenLastCalledWith(
- expect.objectContaining({ workflow_type: 'sql_release' })
- );
+ // After clicking filter button all filters are toggled on.
+ // "状态" / "创建时间" / "最后操作时间" appear in both table headers and filter container,
+ // so we verify at least one instance is in the filter container namespace.
+ expect(
+ document.querySelector('.actiontech-table-filter-container-namespace')
+ ).toBeInTheDocument();
+
+ const filterContainer = document.querySelector(
+ '.actiontech-table-filter-container-namespace'
+ ) as Element;
+ expect(filterContainer.textContent).toContain('状态');
+ expect(filterContainer.textContent).toContain('创建时间');
+ expect(filterContainer.textContent).toContain('最后操作时间');
+ });
+
+ it('should call workflow list with filter_status when status filter is applied', async () => {
+ superRender();
+ await act(async () => jest.advanceTimersByTime(3000));
+
+ // Enable all filters
fireEvent.click(
- document.querySelector(
- '.custom-segmented-filter-wrapper .ant-segmented-item-label[title="全部"]'
- ) as Element
+ document.querySelector('.actiontech-filter-button-namespace') as Element
);
await act(async () => jest.advanceTimersByTime(0));
- const lastCallArgs = (getGlobalWorkflowListSpy as jest.Mock).mock.calls[
- (getGlobalWorkflowListSpy as jest.Mock).mock.calls.length - 1
- ][0];
- expect(lastCallArgs).not.toHaveProperty('workflow_type');
+ // Find the status select inside the filter container (first select = status filter)
+ const filterContainer = document.querySelector(
+ '.actiontech-table-filter-container-namespace'
+ ) as Element;
+ const statusSelect = filterContainer.querySelector(
+ '.ant-select-selector'
+ ) as Element;
+ fireEvent.mouseDown(statusSelect);
+ await act(async () => jest.advanceTimersByTime(0));
+
+ // Select '待处理' (pending_action) from dropdown
+ const dropdownOptions = document.querySelectorAll(
+ '.ant-select-item-option-content'
+ );
+ const pendingActionOption = Array.from(dropdownOptions).find(
+ (el) => el.textContent === '待处理'
+ );
+ fireEvent.click(pendingActionOption as Element);
+ await act(async () => jest.advanceTimersByTime(3000));
+
+ expect(getGlobalWorkflowListSpy).toHaveBeenLastCalledWith(
+ expect.objectContaining({ filter_status: 'pending_action' })
+ );
+ });
+
+ it('should render create_user_name and created_at and updated_at columns in table', async () => {
+ getGlobalWorkflowListSpy.mockImplementation(() =>
+ createSpySuccessResponse({
+ data: {
+ total_nums: 1,
+ has_more: false,
+ next_cursor: '',
+ workflows: [
+ {
+ workflow_id: 'workflow-col-test',
+ workflow_name: 'Column Test Workflow',
+ workflow_type: GlobalWorkflowListItemWorkflowTypeEnum.sql_release,
+ create_user_name: 'admin',
+ created_at: '2026-04-13 10:00:00',
+ updated_at: '2026-04-13 18:00:00',
+ project_uid: '1'
+ }
+ ]
+ }
+ })
+ );
+
+ superRender();
+ await act(async () => jest.advanceTimersByTime(3000));
+
+ expect(screen.getByText('发起人')).toBeInTheDocument();
+ expect(screen.getByText('创建时间')).toBeInTheDocument();
+ expect(screen.getByText('最后操作时间')).toBeInTheDocument();
+ // CustomAvatar renders the uppercased first letter of user name
+ expect(screen.getByText('A')).toBeInTheDocument();
+ expect(screen.getByText('2026-04-13 10:00:00')).toBeInTheDocument();
+ expect(screen.getByText('2026-04-13 18:00:00')).toBeInTheDocument();
+ });
+
+ it('should render initialCard prop and request with the correct filter_card', async () => {
+ superRender(
+
+ );
+ await act(async () => jest.advanceTimersByTime(3000));
+
+ expect(getGlobalWorkflowListSpy).toHaveBeenCalledWith(
+ expect.objectContaining({
+ filter_card: 'initiated_by_me'
+ })
+ );
});
it('should keep cursor when requesting page greater than one', async () => {
diff --git a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/action.ts b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/action.ts
index 9c70accf2..79c275296 100644
--- a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/action.ts
+++ b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/action.ts
@@ -38,7 +38,8 @@ export const workflowPanelTableActions = (
permissions: () =>
filterCard ===
GetGlobalWorkflowListV2FilterCardEnum.initiated_by_me ||
- filterCard === GetGlobalWorkflowListV2FilterCardEnum.archived
+ filterCard === GetGlobalWorkflowListV2FilterCardEnum.archived ||
+ filterCard === GetGlobalWorkflowListV2FilterCardEnum.view_all
}
]
};
diff --git a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/column.tsx b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/column.tsx
index 59a5546c9..7ba789953 100644
--- a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/column.tsx
+++ b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/column.tsx
@@ -2,6 +2,7 @@ import {
BasicTag,
BasicTagProps,
CustomAvatar,
+ formatTime,
ROUTE_PATHS
} from '@actiontech/dms-kit';
import { TypedLink } from '@actiontech/shared';
@@ -226,6 +227,9 @@ export const workflowPanelColumns = (): ActiontechTableColumn<
{
dataIndex: 'status',
title: t('globalDashboard.workflow.column.status'),
+ filterCustomType: 'select',
+ filterKey: 'filter_status',
+ filterLabel: t('globalDashboard.workflow.filter.status'),
render: (status) =>
status ? (
@@ -234,6 +238,30 @@ export const workflowPanelColumns = (): ActiontechTableColumn<
) : (
'-'
)
+ },
+ {
+ dataIndex: 'create_user_name',
+ title: t('globalDashboard.workflow.column.createUser'),
+ filterCustomType: 'select',
+ filterKey: 'filter_create_user_id',
+ filterLabel: t('globalDashboard.workflow.column.createUser'),
+ render: (name) => (name ? : '-')
+ },
+ {
+ dataIndex: 'created_at',
+ title: t('globalDashboard.workflow.column.createdAt'),
+ filterCustomType: 'date-range',
+ filterKey: ['filter_create_time_from', 'filter_create_time_to'],
+ filterLabel: t('globalDashboard.workflow.column.createdAt'),
+ render: (time) => formatTime(time, '-')
+ },
+ {
+ dataIndex: 'updated_at',
+ title: t('globalDashboard.workflow.column.updatedAt'),
+ filterCustomType: 'date-range',
+ filterKey: ['filter_update_time_from', 'filter_update_time_to'],
+ filterLabel: t('globalDashboard.workflow.column.updatedAt'),
+ render: (time) => formatTime(time, '-')
}
];
};
diff --git a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/data.ts b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/data.ts
index bc8c7ea55..bb450bb42 100644
--- a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/data.ts
+++ b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/data.ts
@@ -1,4 +1,7 @@
-import { GetGlobalWorkflowListV2WorkflowTypeEnum } from '@actiontech/shared/lib/api/sqle/service/GlobalDashboard/index.enum';
+import {
+ GetGlobalWorkflowListV2FilterStatusEnum,
+ GetGlobalWorkflowListV2WorkflowTypeEnum
+} from '@actiontech/shared/lib/api/sqle/service/GlobalDashboard/index.enum';
import { t } from '../../../../locale';
export const workflowTypeLabelDictionary = () => ({
@@ -9,3 +12,42 @@ export const workflowTypeLabelDictionary = () => ({
'globalDashboard.workflow.workflowTypeLabel.data_export'
)
});
+
+export const workflowFilterStatusOptions = () => [
+ {
+ label: t('globalDashboard.workflow.statusLabel.pending_approval'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.pending_approval
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.pending_action'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.pending_action
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.in_progress'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.in_progress
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.exporting'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.exporting
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.rejected'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.rejected
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.cancelled'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.cancelled
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.failed'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.failed
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.completed'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.completed
+ },
+ {
+ label: t('globalDashboard.workflow.statusLabel.unknown'),
+ value: GetGlobalWorkflowListV2FilterStatusEnum.unknown
+ }
+];
diff --git a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx
index fa32022f2..6f4dca596 100644
--- a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx
+++ b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx
@@ -1,11 +1,15 @@
import {
ActiontechTable,
ActiontechTableWrapper,
+ CustomAvatar,
CustomSegmentedFilter,
getErrorMessage,
ROUTE_PATHS,
TableToolbar,
- useTableRequestParams
+ useTableRequestParams,
+ useTableFilterContainer,
+ TableFilterContainer,
+ FilterCustomProps
} from '@actiontech/dms-kit';
import {
CheckboxMultipleBlankFilled,
@@ -14,7 +18,7 @@ import {
ProfileSquareFilled
} from '@actiontech/icons';
import { useRequest } from 'ahooks';
-import { message } from 'antd';
+import { message, Space, Typography } from 'antd';
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { StatCardsStyleWrapper, StatCardItemStyleWrapper } from '../../style';
@@ -30,25 +34,33 @@ import useThemeStyleData from '../../../../hooks/useThemeStyleData';
import { GlobalDashboardService } from '@actiontech/shared/lib/api/sqle';
import { GlobalWorkflowListItemWorkflowTypeEnum } from '@actiontech/shared/lib/api/sqle/service/common.enum';
import { parse2ReactRouterPath } from '@actiontech/shared';
-import { workflowTypeLabelDictionary } from './data';
+import {
+ workflowFilterStatusOptions,
+ workflowTypeLabelDictionary
+} from './data';
+import { UserService } from '@actiontech/shared/lib/api/base';
type WorkflowPanelProps = {
projectId?: string;
instanceId?: string;
refreshSignal?: number;
+ initialCard?: GetGlobalWorkflowListV2FilterCardEnum;
};
const WorkflowPanel: React.FC = ({
projectId,
instanceId,
- refreshSignal
+ refreshSignal,
+ initialCard
}) => {
const { t } = useTranslation();
const { sqleTheme } = useThemeStyleData();
const [messageApi, messageContextHolder] = message.useMessage();
+ const [workflowType, setWorkflowType] =
+ useState(null);
const [workflowCard, setWorkflowCard] =
useState(
- GetGlobalWorkflowListV2FilterCardEnum.pending_for_me
+ initialCard ?? GetGlobalWorkflowListV2FilterCardEnum.pending_for_me
);
const cursor = useRef(undefined);
@@ -100,6 +112,7 @@ const WorkflowPanel: React.FC = ({
filter_instance_id: instanceId,
cursor: cursor.current ?? undefined,
...tableFilterInfo,
+ workflow_type: workflowType ?? undefined,
keyword: searchKeyword?.trim() || undefined
});
},
@@ -118,13 +131,52 @@ const WorkflowPanel: React.FC = ({
instanceId,
workflowCard,
refreshSignal,
- tableFilterInfo
+ tableFilterInfo,
+ workflowType
]
}
);
+ const { data: userListData } = useRequest(() =>
+ UserService.ListUsers({ page_size: 9999 })
+ );
+
+ const userOptions = useMemo(() => {
+ return (userListData?.data?.data ?? []).map((u) => ({
+ value: u.uid,
+ label: (
+
+
+ {u.name}
+
+ ),
+ text: u.name
+ }));
+ }, [userListData]);
+
const columns = useMemo(() => workflowPanelColumns(), []);
+ const { filterButtonMeta, filterContainerMeta, updateAllSelectedFilterItem } =
+ useTableFilterContainer<
+ IGlobalWorkflowListItem,
+ GlobalDashboardWorkflowTableFilterParam
+ >(columns, updateTableFilterInfo);
+
+ const filterCustomProps = useMemo(
+ () =>
+ new Map([
+ ['status', { options: workflowFilterStatusOptions() }],
+ ['updated_at', { showTime: false }],
+ ['create_user_name', { options: userOptions }],
+ ['created_at', { showTime: false }]
+ ]),
+ [userOptions]
+ );
+
const openWorkflow = useCallback(
(record: IGlobalWorkflowListItem) => {
const getGlobalWorkflowDetailPath = (): string | null => {
@@ -247,6 +299,10 @@ const WorkflowPanel: React.FC = ({
refresh: workflowList.refresh,
disabled: tableLoading
}}
+ filterButton={{
+ filterButtonMeta,
+ updateAllSelectedFilterItem
+ }}
searchInput={{
placeholder: t(
'globalDashboard.workflow.toolbar.searchPlaceholder'
@@ -258,13 +314,9 @@ const WorkflowPanel: React.FC = ({
}}
>
- value={tableFilterInfo.workflow_type ?? null}
+ value={workflowType}
onChange={(val) => {
- updateTableFilterInfo(() =>
- val == null
- ? ({} as GlobalDashboardWorkflowTableFilterParam)
- : { workflow_type: val }
- );
+ setWorkflowType(val);
}}
labelDictionary={workflowTypeLabelDictionary()}
options={[
@@ -274,6 +326,12 @@ const WorkflowPanel: React.FC = ({
withAll
/>
+
;
diff --git a/packages/sqle/src/page/GlobalDashboard/index.tsx b/packages/sqle/src/page/GlobalDashboard/index.tsx
index 90cd83660..60cf3c7c6 100644
--- a/packages/sqle/src/page/GlobalDashboard/index.tsx
+++ b/packages/sqle/src/page/GlobalDashboard/index.tsx
@@ -12,6 +12,7 @@ import { DashboardTabKey } from './constants';
import WorkflowPanel from './components/WorkflowPanel';
import SqlGovernancePanel from './components/SqlGovernancePanel';
import AccountPanel from './components/AccountPanel';
+import { GetGlobalWorkflowListV2FilterCardEnum } from '@actiontech/shared/lib/api/sqle/service/GlobalDashboard/index.enum';
import { useTypedNavigate, useTypedQuery } from '@actiontech/shared';
const GlobalDashBoard = () => {
@@ -22,6 +23,9 @@ const GlobalDashBoard = () => {
const [activeTab, setActiveTab] = useState(
DashboardTabKey.Workflow
);
+ const [initialWorkflowCard, setInitialWorkflowCard] = useState<
+ GetGlobalWorkflowListV2FilterCardEnum | undefined
+ >(undefined);
const [refreshSignals, setRefreshSignals] = useState({
[DashboardTabKey.Workflow]: 0,
[DashboardTabKey.SqlGovernance]: 0,
@@ -63,6 +67,7 @@ const GlobalDashBoard = () => {
projectId={projectId}
instanceId={instanceId}
refreshSignal={refreshSignals[DashboardTabKey.Workflow]}
+ initialCard={initialWorkflowCard}
/>
)
},
@@ -96,7 +101,7 @@ const GlobalDashBoard = () => {
];
return items;
- }, [t, projectId, instanceId, refreshSignals, isAdmin]);
+ }, [t, projectId, instanceId, refreshSignals, isAdmin, initialWorkflowCard]);
useEffect(() => {
const searchParams = extractQuery(ROUTE_PATHS.SQLE.GLOBAL_DASHBOARD.index);
@@ -109,6 +114,16 @@ const GlobalDashBoard = () => {
) {
setActiveTab(searchParams.tab as DashboardTabKey);
}
+ if (
+ searchParams?.card &&
+ Object.values(GetGlobalWorkflowListV2FilterCardEnum).includes(
+ searchParams.card as GetGlobalWorkflowListV2FilterCardEnum
+ )
+ ) {
+ setInitialWorkflowCard(
+ searchParams.card as GetGlobalWorkflowListV2FilterCardEnum
+ );
+ }
}, [extractQuery]);
return (
diff --git a/packages/sqle/src/page/GlobalDashboard/style.ts b/packages/sqle/src/page/GlobalDashboard/style.ts
index 0e1cb468c..b135c38e0 100644
--- a/packages/sqle/src/page/GlobalDashboard/style.ts
+++ b/packages/sqle/src/page/GlobalDashboard/style.ts
@@ -3,12 +3,12 @@ import { styled } from '@mui/material/styles';
export const GlobalDashboardFilterStyleWrapper = styled('div')`
& .ant-form.ant-form-horizontal {
.ant-select-selector,
- .custom-search-input {
+ .basic-search-input {
font-size: 13px !important;
}
}
- & .custom-select-namespace {
+ & .basic-select-wrapper {
width: 280px;
}
`;
diff --git a/packages/sqle/src/page/OperationRecord/List/index.test.tsx b/packages/sqle/src/page/OperationRecord/List/index.test.tsx
index 564efafde..9612cbdf9 100644
--- a/packages/sqle/src/page/OperationRecord/List/index.test.tsx
+++ b/packages/sqle/src/page/OperationRecord/List/index.test.tsx
@@ -29,8 +29,6 @@ describe('sqle/OperationRecord/List', () => {
it('render operation record table when request return data', async () => {
const operationRecordListSpy = operationRecord.getOperationRecordList();
- // const actionSpy = operationRecord.getOperationActionList();
- // const typeNameSpy = operationRecord.getOperationTypeNameList();
const { baseElement } = superRender();
await act(async () => jest.advanceTimersByTime(3000));
expect(baseElement).toMatchSnapshot();
|