Skip to content

Commit 6d68dd6

Browse files
authored
Merge branch 'main' into 2285-Catalog-Detail-Page---Add-pagination
2 parents 0322123 + 8bfce8d commit 6d68dd6

File tree

6 files changed

+80
-30
lines changed

6 files changed

+80
-30
lines changed

next.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ const config = {
2727
source: "/settings/notifications/:path*",
2828
destination: "/notifications/:path*",
2929
permanent: true
30+
},
31+
{
32+
source: "/notifications/silence",
33+
destination: "/notifications/silences/add",
34+
permanent: true
3035
}
3136
];
3237
},

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@flanksource/flanksource-ui",
3-
"version": "1.0.796",
3+
"version": "1.0.799",
44
"private": false,
55
"files": [
66
"build",

src/api/services/playbooks.ts

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -164,39 +164,58 @@ export async function getPlaybookRuns({
164164
ends?: string;
165165
sort?: SortingState;
166166
}) {
167-
const componentParamString = componentId
168-
? `&component_id=eq.${componentId}`
169-
: "";
167+
const searchParams = new URLSearchParams();
170168

171-
const configParamString = configId ? `&config_id=eq.${configId}` : "";
169+
if (componentId) {
170+
searchParams.append("component_id", `eq.${componentId}`);
171+
}
172172

173-
const statusParamString = status ? `&status=eq.${status}` : "";
173+
if (configId) {
174+
searchParams.append("config_id", `eq.${configId}`);
175+
}
174176

175-
const pagingParams = `&limit=${pageSize}&offset=${pageIndex * pageSize}`;
177+
if (status) {
178+
searchParams.append("status", `eq.${status}`);
179+
}
176180

177-
const dateFilter =
178-
starts && ends
179-
? `&and=(start_time.gte.${starts},start_time.lte.${ends})`
180-
: "";
181+
searchParams.append("limit", pageSize.toString());
182+
searchParams.append("offset", (pageIndex * pageSize).toString());
183+
searchParams.append("order", "created_at.desc");
184+
185+
if (starts && ends) {
186+
searchParams.append(
187+
"or",
188+
`(and(start_time.gte.${starts},start_time.lte.${ends}),and(created_at.gte.${starts},created_at.lte.${ends}))`
189+
);
190+
}
191+
192+
if (playbookId) {
193+
searchParams.append("playbook_id", `eq.${playbookId}`);
194+
}
195+
196+
const select = [
197+
"*",
198+
"playbooks(id,name,title,spec,icon)",
199+
"component:components(id,name,icon)",
200+
"check:checks(id,name,icon)",
201+
"config:config_items(id,name,type,config_class)"
202+
].join(",");
203+
204+
searchParams.append("select", select);
181205

182-
const playbookParamsString = playbookId
183-
? `&playbook_id=eq.${playbookId}`
184-
: "";
206+
const queryString = searchParams.toString();
185207

186208
const sortParams =
187209
sort && sort.length > 0
188210
? `&order=${sort[0].id}.${sort[0].desc ? "desc" : "asc"}`
189211
: "";
190212

191213
const res = await resolvePostGrestRequestWithPagination(
192-
ConfigDB.get<PlaybookRun[] | null>(
193-
`/playbook_runs?select=*,playbooks(id,name,title,spec,icon),component:components(id,name,icon),check:checks(id,name,icon),config:config_items(id,name,type,config_class)&&order=created_at.desc${playbookParamsString}${componentParamString}&${configParamString}${pagingParams}${statusParamString}${dateFilter}${sortParams}`,
194-
{
195-
headers: {
196-
Prefer: "count=exact"
197-
}
214+
ConfigDB.get<PlaybookRun[] | null>(`/playbook_runs?${queryString}`, {
215+
headers: {
216+
Prefer: "count=exact"
198217
}
199-
)
218+
})
200219
);
201220
return res;
202221
}

src/components/Notifications/Rules/notificationsRulesTableColumns.tsx

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { formatDuration } from "@flanksource-ui/utils/date";
88
import { atom, useAtom } from "jotai";
99
import { MRT_ColumnDef } from "mantine-react-table";
1010
import { useState } from "react";
11+
import { createPortal } from "react-dom";
1112
import { FaExclamationTriangle } from "react-icons/fa";
1213
import { Tooltip } from "react-tooltip";
1314
import JobHistoryStatusColumn from "../../JobsHistory/JobHistoryStatusColumn";
@@ -193,7 +194,6 @@ export const notificationsRulesTableColumns: MRT_ColumnDef<NotificationRules>[]
193194
<>
194195
<span
195196
data-tooltip-id={`error-tooltip-${row.original.id}`}
196-
data-tooltip-content={error}
197197
onClick={(e) => {
198198
e.stopPropagation();
199199
e.preventDefault();
@@ -202,7 +202,15 @@ export const notificationsRulesTableColumns: MRT_ColumnDef<NotificationRules>[]
202202
>
203203
<FaExclamationTriangle className="mr-1 inline h-4 w-4 text-red-500" />
204204
</span>
205-
<Tooltip id={`error-tooltip-${row.original.id}`} />
205+
{createPortal(
206+
<Tooltip
207+
className="z-[9999999999]"
208+
id={`error-tooltip-${row.original.id}`}
209+
>
210+
<pre className="whitespace-pre-wrap text-sm">{error}</pre>
211+
</Tooltip>,
212+
document.body
213+
)}
206214

207215
<Modal
208216
open={showError}
@@ -259,11 +267,7 @@ export const notificationsRulesTableColumns: MRT_ColumnDef<NotificationRules>[]
259267
return (
260268
<>
261269
<div
262-
className="z-[99999999] w-full"
263270
data-tooltip-id="most-common-error-tooltip"
264-
data-tooltip-content={
265-
value > 0 ? notification.most_common_error : undefined
266-
}
267271
onClick={(e) => {
268272
if (notification.most_common_error) {
269273
e.stopPropagation();
@@ -273,7 +277,18 @@ export const notificationsRulesTableColumns: MRT_ColumnDef<NotificationRules>[]
273277
>
274278
{value}
275279
</div>
276-
{value > 0 && <Tooltip id="most-common-error-tooltip" />}
280+
{value > 0 &&
281+
createPortal(
282+
<Tooltip
283+
id="most-common-error-tooltip"
284+
className="z-[9999999999] max-w-[95vw]"
285+
>
286+
<pre className="whitespace-pre-wrap text-sm">
287+
{notification.most_common_error}
288+
</pre>
289+
</Tooltip>,
290+
document.body
291+
)}
277292
</>
278293
);
279294
}

src/pages/Settings/notifications/NotificationSilencedAddPage.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
import NotificationTabsLinks from "@flanksource-ui/components/Notifications/NotificationTabsLinks";
22
import NotificationSilenceForm from "@flanksource-ui/components/Notifications/SilenceNotificationForm/NotificationSilenceForm";
3+
import { useQueryClient } from "@tanstack/react-query";
34
import { useNavigate } from "react-router-dom";
45

56
export default function NotificationSilencedAddPage() {
67
const navigate = useNavigate();
8+
const client = useQueryClient();
79

810
return (
911
<NotificationTabsLinks activeTab={"Silences"} isAddSilence>
1012
<div className="mx-auto flex h-full max-w-screen-md flex-1 flex-col px-6 py-6 pb-0">
1113
<h3 className="px-4 text-xl font-semibold">Silence Notification</h3>
1214
<NotificationSilenceForm
13-
onSuccess={() => navigate("/notifications/silences")}
15+
onSuccess={() => {
16+
navigate("/notifications/silences");
17+
client.invalidateQueries({
18+
queryKey: ["notification_silences"]
19+
});
20+
21+
client.refetchQueries({
22+
queryKey: ["notification_silences"]
23+
});
24+
}}
1425
/>
1526
</div>
1627
</NotificationTabsLinks>

0 commit comments

Comments
 (0)