diff --git a/ui/src/pages/accesses/AccessList.tsx b/ui/src/pages/accesses/AccessList.tsx
index 3b098fb3..3a3af7ba 100644
--- a/ui/src/pages/accesses/AccessList.tsx
+++ b/ui/src/pages/accesses/AccessList.tsx
@@ -1,9 +1,9 @@
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate, useSearchParams } from "react-router-dom";
-import { IconCirclePlus, IconCopy, IconEdit, IconFingerprint, IconPlus, IconReload, IconTrash } from "@tabler/icons-react";
+import { IconCirclePlus, IconCopy, IconDotsVertical, IconFingerprint, IconPlus, IconReload, IconTrash } from "@tabler/icons-react";
import { useRequest } from "ahooks";
-import { App, Avatar, Button, Input, Skeleton, Table, type TableProps, Tabs, Tooltip, Typography } from "antd";
+import { App, Avatar, Button, Dropdown, Input, Skeleton, Table, type TableProps, Tabs, Typography } from "antd";
import dayjs from "dayjs";
import { ClientResponseError } from "pocketbase";
@@ -77,42 +77,51 @@ const AccessList = () => {
key: "$action",
align: "end",
fixed: "right",
- width: 120,
+ width: 64,
render: (_, record) => (
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDetailClick(record);
- }}
- />
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDuplicateClick(record);
- }}
- />
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDeleteClick(record);
- }}
- />
-
+
{
+ e.stopPropagation();
+ }}
+ >
+
+
+
+ ),
+ onClick: () => {
+ handleRecordDuplicateClick(record);
+ },
+ },
+ {
+ type: "divider",
+ },
+ {
+ key: "delete",
+ label: t("common.button.delete"),
+ danger: true,
+ icon: (
+
+
+
+ ),
+ onClick: () => {
+ handleRecordDeleteClick(record);
+ },
+ },
+ ],
+ }}
+ trigger={["click"]}
+ >
+ } type="text" />
+
),
},
diff --git a/ui/src/pages/certificates/CertificateList.tsx b/ui/src/pages/certificates/CertificateList.tsx
index c4405892..798bc7d3 100644
--- a/ui/src/pages/certificates/CertificateList.tsx
+++ b/ui/src/pages/certificates/CertificateList.tsx
@@ -1,9 +1,9 @@
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate, useSearchParams } from "react-router-dom";
-import { IconBrowserShare, IconCertificate, IconExternalLink, IconReload, IconTrash } from "@tabler/icons-react";
+import { IconCertificate, IconDotsVertical, IconExternalLink, IconReload, IconTrash } from "@tabler/icons-react";
import { useRequest } from "ahooks";
-import { App, Button, Input, Segmented, Skeleton, Table, type TableProps, Tooltip, Typography } from "antd";
+import { App, Button, Dropdown, Input, Segmented, Skeleton, Table, type TableProps, Typography } from "antd";
import dayjs from "dayjs";
import { ClientResponseError } from "pocketbase";
@@ -136,31 +136,36 @@ const CertificateList = () => {
key: "$action",
align: "end",
fixed: "right",
- width: 120,
+ width: 64,
render: (_, record) => (
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDetailClick(record);
- }}
- />
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDeleteClick(record);
- }}
- />
-
+
{
+ e.stopPropagation();
+ }}
+ >
+
+
+
+ ),
+ onClick: () => {
+ handleRecordDeleteClick(record);
+ },
+ },
+ ],
+ }}
+ trigger={["click"]}
+ >
+ } type="text" />
+
),
},
diff --git a/ui/src/pages/dashboard/Dashboard.tsx b/ui/src/pages/dashboard/Dashboard.tsx
index 85773609..f08f9948 100644
--- a/ui/src/pages/dashboard/Dashboard.tsx
+++ b/ui/src/pages/dashboard/Dashboard.tsx
@@ -3,7 +3,6 @@ import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
import {
IconActivity,
- IconBrowserShare,
IconHierarchy3,
IconPlugConnected,
IconPlus,
@@ -255,16 +254,6 @@ const WorkflowRunHistoryTable = () => {
return <>>;
},
},
- {
- key: "$action",
- align: "end",
- width: 120,
- render: (_, record) => (
-
- } variant="text" />} />
-
- ),
- },
];
const [tableData, setTableData] = useState
([]);
const { loading: tableLoading } = useRequest(
@@ -292,19 +281,37 @@ const WorkflowRunHistoryTable = () => {
}
);
+ const [detailRecord, setDetailRecord] = useState();
+ const [detailOpen, setDetailOpen] = useState(false);
+
+ const handleRecordDetailClick = (workflowRun: WorkflowRunModel) => {
+ setDetailRecord(workflowRun);
+ setDetailOpen(true);
+ };
+
return (
-
- columns={tableColumns}
- dataSource={tableData}
- loading={tableLoading}
- locale={{
- emptyText: ,
- }}
- pagination={false}
- rowKey={(record) => record.id}
- scroll={{ x: "max(100%, 720px)" }}
- size="small"
- />
+ <>
+
+ columns={tableColumns}
+ dataSource={tableData}
+ loading={tableLoading}
+ locale={{
+ emptyText: ,
+ }}
+ pagination={false}
+ rowClassName="cursor-pointer"
+ rowKey={(record) => record.id}
+ scroll={{ x: "max(100%, 720px)" }}
+ size="small"
+ onRow={(record) => ({
+ onClick: () => {
+ handleRecordDetailClick(record);
+ },
+ })}
+ />
+
+
+ >
);
};
diff --git a/ui/src/pages/workflows/WorkflowList.tsx b/ui/src/pages/workflows/WorkflowList.tsx
index a41c6953..60c7d4fc 100644
--- a/ui/src/pages/workflows/WorkflowList.tsx
+++ b/ui/src/pages/workflows/WorkflowList.tsx
@@ -1,9 +1,9 @@
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate, useSearchParams } from "react-router-dom";
-import { IconCirclePlus, IconCopy, IconEdit, IconHierarchy3, IconPlus, IconReload, IconTrash } from "@tabler/icons-react";
+import { IconCirclePlus, IconCopy, IconDotsVertical, IconHierarchy3, IconPlus, IconReload, IconTrash } from "@tabler/icons-react";
import { useRequest } from "ahooks";
-import { App, Button, Flex, Input, Segmented, Skeleton, Switch, Table, type TableProps, Tooltip, Typography } from "antd";
+import { App, Button, Dropdown, Flex, Input, Segmented, Skeleton, Switch, Table, type TableProps, Typography } from "antd";
import dayjs from "dayjs";
import { ClientResponseError } from "pocketbase";
@@ -123,43 +123,51 @@ const WorkflowList = () => {
key: "$action",
align: "end",
fixed: "right",
- width: 120,
+ width: 64,
render: (_, record) => (
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDetailClick(record);
- }}
- />
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDuplicateClick(record);
- }}
- />
-
-
- }
- variant="text"
- onClick={(e) => {
- e.stopPropagation();
- handleRecordDeleteClick(record);
- }}
- />
-
+
{
+ e.stopPropagation();
+ }}
+ >
+
+
+
+ ),
+ onClick: () => {
+ handleRecordDuplicateClick(record);
+ },
+ },
+ {
+ type: "divider",
+ },
+ {
+ key: "delete",
+ label: t("common.button.delete"),
+ danger: true,
+ icon: (
+
+
+
+ ),
+ onClick: () => {
+ handleRecordDeleteClick(record);
+ },
+ },
+ ],
+ }}
+ trigger={["click"]}
+ >
+ } type="text" />
+
),
},