Skip to content

Commit 930f128

Browse files
committed
refactor: for playbooks, use mantime react table
Fixes #2285 fix: fix props issue for playbooks fix: fix issues with playbook runs
1 parent fb7364a commit 930f128

File tree

4 files changed

+42
-69
lines changed

4 files changed

+42
-69
lines changed

src/components/Configs/ConfigDetailsTabs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export function ConfigDetailsTabs({
7070
contentClass="p-0 h-full overflow-y-hidden"
7171
>
7272
<div className={`flex h-full flex-row`}>
73-
<div className="flex flex-1 flex-col">
73+
<div className="flex flex-1 flex-col overflow-x-auto">
7474
<TabbedLinks
7575
activeTabName={activeTabName}
7676
tabLinks={configTabList}

src/components/Playbooks/Runs/PlaybookRunsList.tsx

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,29 @@ import {
44
} from "@flanksource-ui/api/types/playbooks";
55
import { User } from "@flanksource-ui/api/types/users";
66
import { Avatar } from "@flanksource-ui/ui/Avatar";
7-
import { DataTable, PaginationOptions } from "@flanksource-ui/ui/DataTable";
8-
import { DateCell } from "@flanksource-ui/ui/DataTable/Cells/DateCells";
97
import FormatDuration from "@flanksource-ui/ui/Dates/FormatDuration";
108
import { ConfigIcon } from "@flanksource-ui/ui/Icons/ConfigIcon";
119
import { Icon } from "@flanksource-ui/ui/Icons/Icon";
12-
import { ColumnDef } from "@tanstack/react-table";
10+
import { MRTDateCell } from "@flanksource-ui/ui/MRTDataTable/Cells/MRTDateCells";
11+
import MRTDataTable from "@flanksource-ui/ui/MRTDataTable/MRTDataTable";
12+
import { MRT_ColumnDef } from "mantine-react-table";
1313
import { useCallback } from "react";
1414
import { useNavigate } from "react-router-dom";
1515
import PlaybookSpecIcon from "../Settings/PlaybookSpecIcon";
1616
import { PlaybookStatusDescription } from "./PlaybookRunsStatus";
1717

18-
const playbookRunsTableColumns: ColumnDef<PlaybookRun>[] = [
18+
const playbookRunsTableColumns: MRT_ColumnDef<PlaybookRun>[] = [
1919
{
2020
header: "Name",
2121
accessorKey: "name",
22-
cell: ({ row }) => {
22+
Cell: ({ row }) => {
2323
return <PlaybookSpecIcon playbook={row.original.playbooks!} showLabel />;
2424
},
2525
size: 400
2626
},
2727
{
2828
header: "Resource",
29-
cell: ({ row }) => {
29+
Cell: ({ row }) => {
3030
const component = row.original.component;
3131
const componentId = row.original.component_id;
3232
const configId = row.original.config_id;
@@ -65,21 +65,21 @@ const playbookRunsTableColumns: ColumnDef<PlaybookRun>[] = [
6565
{
6666
header: "Status",
6767
accessorKey: "status",
68-
cell: ({ getValue }) => {
69-
const status = getValue<PlaybookRunStatus>();
68+
Cell: ({ cell }) => {
69+
const status = cell.getValue<PlaybookRunStatus>();
7070
return <PlaybookStatusDescription status={status} />;
7171
}
7272
},
7373
{
7474
header: "Date",
7575
accessorKey: "start_time",
76-
cell: DateCell,
76+
Cell: MRTDateCell,
7777
sortingFn: "datetime"
7878
},
7979
{
8080
header: "Duration",
8181
accessorKey: "duration",
82-
cell: ({ row }) => {
82+
Cell: ({ row }) => {
8383
return (
8484
<FormatDuration
8585
startTime={row.original.start_time}
@@ -91,14 +91,14 @@ const playbookRunsTableColumns: ColumnDef<PlaybookRun>[] = [
9191
{
9292
header: "Created At",
9393
accessorKey: "created_at",
94-
cell: DateCell,
94+
Cell: MRTDateCell,
9595
sortingFn: "datetime"
9696
},
9797
{
9898
header: "Created By",
9999
accessorKey: "created_by",
100-
cell: ({ getValue }) => {
101-
const user = getValue<User>();
100+
Cell: ({ cell }) => {
101+
const user = cell.getValue<User>();
102102
return <Avatar user={user} circular />;
103103
}
104104
}
@@ -107,14 +107,15 @@ const playbookRunsTableColumns: ColumnDef<PlaybookRun>[] = [
107107
type Props = {
108108
data: PlaybookRun[];
109109
isLoading?: boolean;
110-
pagination?: PaginationOptions;
111-
} & Omit<React.HTMLProps<HTMLDivElement>, "data">;
110+
numberOfPages?: number;
111+
totalRecords?: number;
112+
};
112113

113114
export default function PlaybookRunsTable({
114115
data,
115116
isLoading,
116-
className,
117-
...rest
117+
numberOfPages,
118+
totalRecords
118119
}: Props) {
119120
const navigate = useNavigate();
120121

@@ -126,17 +127,16 @@ export default function PlaybookRunsTable({
126127
);
127128

128129
return (
129-
<div className="flex flex-1 flex-col overflow-y-hidden" {...rest}>
130-
<DataTable
131-
stickyHead
130+
<div className="flex flex-1 flex-col overflow-y-hidden">
131+
<MRTDataTable
132132
columns={playbookRunsTableColumns}
133133
data={data}
134-
tableStyle={{ borderSpacing: "0" }}
135134
isLoading={isLoading}
136-
preferencesKey="connections-list"
137-
savePreferences={false}
138-
handleRowClick={(row) => onRowClick(row.original)}
139-
className="overflow-x-hidden"
135+
onRowClick={(row) => onRowClick(row)}
136+
manualPageCount={numberOfPages}
137+
totalRowCount={totalRecords}
138+
enableServerSidePagination
139+
enableServerSideSorting
140140
/>
141141
</div>
142142
);

src/pages/config/details/ConfigDetailsPlaybooks.tsx

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
import { useQuery } from "@tanstack/react-query";
2-
import { useMemo, useState } from "react";
3-
import { useParams } from "react-router-dom";
41
import { getPlaybookRuns } from "@flanksource-ui/api/services/playbooks";
52
import { ConfigDetailsTabs } from "@flanksource-ui/components/Configs/ConfigDetailsTabs";
63
import PlaybookRunsTable from "@flanksource-ui/components/Playbooks/Runs/PlaybookRunsList";
4+
import useReactTablePaginationState from "@flanksource-ui/ui/DataTable/Hooks/useReactTablePaginationState";
5+
import { useQuery } from "@tanstack/react-query";
6+
import { useParams } from "react-router-dom";
77

88
export function ConfigDetailsPlaybooksPage() {
99
const { id } = useParams();
1010

11-
const [{ pageIndex, pageSize }, setPageState] = useState({
12-
pageIndex: 0,
13-
pageSize: 200
14-
});
11+
const { pageIndex, pageSize } = useReactTablePaginationState();
1512

1613
const { data, isLoading, refetch } = useQuery({
1714
queryKey: ["playbookRuns", { pageIndex, pageSize, configId: id }],
@@ -27,31 +24,22 @@ export function ConfigDetailsPlaybooksPage() {
2724

2825
const totalEntries = data?.totalEntries;
2926

30-
const pagination = useMemo(() => {
31-
return {
32-
setPagination: setPageState,
33-
pageIndex,
34-
pageSize,
35-
pageCount: totalEntries ? Math.ceil(totalEntries / pageSize) : -1,
36-
remote: true,
37-
enable: true,
38-
loading: isLoading
39-
};
40-
}, [pageIndex, pageSize, totalEntries, isLoading]);
41-
4227
return (
4328
<ConfigDetailsTabs
4429
pageTitlePrefix={"Config Playbooks"}
4530
isLoading={isLoading}
4631
refetch={refetch}
4732
activeTabName="Playbooks"
4833
>
49-
<div className={`flex h-full flex-1 flex-col space-y-2`}>
50-
<div className="flex h-full flex-col overflow-y-hidden">
34+
<div className={`flex h-full flex-1 flex-col space-y-2 overflow-auto`}>
35+
<div className="flex h-full flex-col overflow-x-auto overflow-y-hidden">
5136
<PlaybookRunsTable
5237
data={playbookRuns ?? []}
5338
isLoading={isLoading}
54-
pagination={pagination}
39+
numberOfPages={
40+
totalEntries ? Math.ceil(totalEntries / pageSize) : -1
41+
}
42+
totalRecords={totalEntries ?? 0}
5543
/>
5644
</div>
5745
</div>

src/pages/playbooks/PlaybookRunsPage.tsx

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import {
1111
BreadcrumbNav,
1212
BreadcrumbRoot
1313
} from "@flanksource-ui/ui/BreadcrumbNav";
14+
import useReactTablePaginationState from "@flanksource-ui/ui/DataTable/Hooks/useReactTablePaginationState";
1415
import useTimeRangeParams from "@flanksource-ui/ui/Dates/TimeRangePicker/useTimeRangeParams";
1516
import { Head } from "@flanksource-ui/ui/Head";
1617
import { SearchLayout } from "@flanksource-ui/ui/Layout/SearchLayout";
1718
import TabbedLinks from "@flanksource-ui/ui/Tabs/TabbedLinks";
1819
import { useQuery } from "@tanstack/react-query";
19-
import { useMemo, useState } from "react";
20+
import { useState } from "react";
2021
import { FaHome } from "react-icons/fa";
2122
import { useSearchParams } from "react-router-dom";
2223
import { useGetPlaybookSpecsDetails } from "../../api/query-hooks/playbooks";
@@ -31,12 +32,7 @@ export default function PlaybookRunsPage() {
3132
const { timeRangeAbsoluteValue: timeRange } = useTimeRangeParams(
3233
playbookRunsDefaultDateFilter
3334
);
34-
35-
const [{ pageIndex, pageSize }, setPageState] = useState({
36-
pageIndex: 0,
37-
pageSize: 150
38-
});
39-
35+
const { pageIndex, pageSize } = useReactTablePaginationState();
4036
const {
4137
data,
4238
isLoading: isLoadingPlaybookRuns,
@@ -68,18 +64,6 @@ export default function PlaybookRunsPage() {
6864
const totalEntries = data?.totalEntries;
6965
const pageCount = totalEntries ? Math.ceil(totalEntries / pageSize) : -1;
7066

71-
const pagination = useMemo(() => {
72-
return {
73-
setPagination: setPageState,
74-
pageIndex,
75-
pageSize,
76-
pageCount,
77-
remote: true,
78-
enable: true,
79-
loading: isLoading
80-
};
81-
}, [setPageState, pageIndex, pageSize, pageCount, isLoading]);
82-
8367
return (
8468
<>
8569
<Head
@@ -125,7 +109,7 @@ export default function PlaybookRunsPage() {
125109
contentClass="flex flex-col p-0 h-full overflow-y-hidden"
126110
>
127111
<TabbedLinks tabLinks={playbookRunsPageTabs}>
128-
<div className={`mx-auto flex h-full max-w-screen-xl flex-col py-4`}>
112+
<div className={`mx-auto flex h-full flex-col py-4`}>
129113
<div className="flex w-full flex-row justify-between gap-2 py-2">
130114
<PlaybookRunsFilterBar
131115
isLoading={isLoading}
@@ -138,7 +122,8 @@ export default function PlaybookRunsPage() {
138122
<PlaybookRunsTable
139123
data={playbookRuns ?? []}
140124
isLoading={isLoadingPlaybookRuns}
141-
pagination={pagination}
125+
numberOfPages={pageCount}
126+
totalRecords={totalEntries ?? 0}
142127
/>
143128
</div>
144129
</div>

0 commit comments

Comments
 (0)