diff --git a/frontend/pages/schedule/ManageSchedulePage/components/ShowQueryModal/ShowQueryModal.tsx b/frontend/components/modals/ShowQueryModal/ShowQueryModal.tsx
similarity index 100%
rename from frontend/pages/schedule/ManageSchedulePage/components/ShowQueryModal/ShowQueryModal.tsx
rename to frontend/components/modals/ShowQueryModal/ShowQueryModal.tsx
diff --git a/frontend/pages/schedule/ManageSchedulePage/components/ShowQueryModal/index.ts b/frontend/components/modals/ShowQueryModal/index.ts
similarity index 100%
rename from frontend/pages/schedule/ManageSchedulePage/components/ShowQueryModal/index.ts
rename to frontend/components/modals/ShowQueryModal/index.ts
diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityFeed.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityFeed.tsx
index 6f6a00963b..1bff540c37 100644
--- a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityFeed.tsx
+++ b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityFeed.tsx
@@ -1,4 +1,4 @@
-import React, { useState } from "react";
+import React, { useRef, useState } from "react";
import { useQuery } from "react-query";
import { isEmpty } from "lodash";
@@ -6,8 +6,9 @@ import activitiesAPI, {
IActivitiesResponse,
} from "services/entities/activities";
-import { IActivity } from "interfaces/activity";
+import { IActivity, IActivityDetails } from "interfaces/activity";
+import ShowQueryModal from "components/modals/ShowQueryModal";
import DataError from "components/DataError";
import Button from "components/buttons/Button";
import Spinner from "components/Spinner";
@@ -16,7 +17,6 @@ import FleetIcon from "components/icons/FleetIcon";
import ActivityItem from "./ActivityItem";
const baseClass = "activity-feed";
-
interface IActvityCardProps {
setShowActivityFeedTitle: (showActivityFeedTitle: boolean) => void;
}
@@ -28,6 +28,8 @@ const ActivityFeed = ({
}: IActvityCardProps): JSX.Element => {
const [pageIndex, setPageIndex] = useState(0);
const [showMore, setShowMore] = useState(true);
+ const [showShowQueryModal, setShowShowQueryModal] = useState(false);
+ const queryShown = useRef("");
const {
data: activities,
@@ -74,6 +76,11 @@ const ActivityFeed = ({
setPageIndex(pageIndex + 1);
};
+ const handleDetailsClick = (details: IActivityDetails) => {
+ queryShown.current = details.query_sql ?? "";
+ setShowShowQueryModal(true);
+ };
+
const renderError = () => {
return ;
};
@@ -91,12 +98,6 @@ const ActivityFeed = ({
);
};
- const renderActivityBlock = (activity: IActivity) => {
- const { id } = activity;
-
- return ;
- };
-
// Renders opaque information as activity feed is loading
const opacity = isFetchingActivities ? { opacity: 0.4 } : { opacity: 1 };
@@ -113,7 +114,13 @@ const ActivityFeed = ({
)}
- {activities?.map((activity) => renderActivityBlock(activity))}
+ {activities?.map((activity) => (
+
+ ))}
>
)}
@@ -142,6 +149,12 @@ const ActivityFeed = ({
)}
+ {showShowQueryModal && (
+ setShowShowQueryModal(false)}
+ />
+ )}
);
};
diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx
index d9d27512cf..ba2443afd8 100644
--- a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx
+++ b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx
@@ -82,6 +82,7 @@ describe("Activity Feed", () => {
screen.getByText("ran the query as a live query .")
).toBeInTheDocument();
expect(screen.getByText("Test Query")).toBeInTheDocument();
+ expect(screen.getByText("Show query")).toBeInTheDocument();
});
it("renders an applied_spec_pack type activity", () => {
diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx
index 5f578f6088..30c08233b6 100644
--- a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx
+++ b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx
@@ -2,7 +2,7 @@ import React from "react";
import { find, lowerCase, noop } from "lodash";
import { formatDistanceToNowStrict } from "date-fns";
-import { ActivityType, IActivity } from "interfaces/activity";
+import { ActivityType, IActivity, IActivityDetails } from "interfaces/activity";
import { addGravatarUrlToResource } from "utilities/helpers";
import Avatar from "components/Avatar";
import Button from "components/buttons/Button";
@@ -14,7 +14,10 @@ const DEFAULT_GRAVATAR_URL =
"https://www.gravatar.com/avatar/00000000000000000000000000000000?d=blank&size=200";
const TAGGED_TEMPLATES = {
- liveQueryActivityTemplate: (activity: IActivity) => {
+ liveQueryActivityTemplate: (
+ activity: IActivity,
+ onDetailsClick?: (details: IActivityDetails) => void
+ ) => {
const count = activity.details?.targets_count;
const queryName = activity.details?.query_name;
const querySql = activity.details?.query_sql;
@@ -37,15 +40,12 @@ const TAGGED_TEMPLATES = {
ran {savedQueryName} a live query {hostCount}.
-
- {/* TODO: the API does not yet send back querySql yet so will implement
- the onClick handler when we get it. We dont show this for now. */}
- {false && (
+ {querySql && (
<>