From 550feef040bfcc65ff7a99b143610dfdb8b6813a Mon Sep 17 00:00:00 2001 From: Gabriel Hernandez Date: Tue, 29 Nov 2022 16:55:17 +0000 Subject: [PATCH] integrate with API to show query name and sql query for live query activity (#8864) * integrate with API to show query name and sql query for live query activity * move ShowQueryModal to common components --- .../modals}/ShowQueryModal/ShowQueryModal.tsx | 0 .../modals}/ShowQueryModal/index.ts | 0 .../cards/ActivityFeed/ActivityFeed.tsx | 33 +++++++++++----- .../ActivityItem/ActivityItem.tests.tsx | 1 + .../ActivityItem/ActivityItem.tsx | 38 +++++++++++++------ .../ManageSchedulePage/ManageSchedulePage.tsx | 3 +- 6 files changed, 53 insertions(+), 22 deletions(-) rename frontend/{pages/schedule/ManageSchedulePage/components => components/modals}/ShowQueryModal/ShowQueryModal.tsx (100%) rename frontend/{pages/schedule/ManageSchedulePage/components => components/modals}/ShowQueryModal/index.ts (100%) 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 && ( <>