Skip to content

Commit b5cb7c7

Browse files
authored
✨ Refactor analysis API and update query hooks (#2481)
This commit introduces a comprehensive refactor of the analysis API, consolidating various report fetching functions and updating the corresponding hooks in the application. The following changes were made: - Replaced old report fetching functions with new ones in `analysis.ts`. - Updated components to use the new hooks for fetching application issues, insights, and incidents. - Removed deprecated query hooks from `issues.ts` to streamline the codebase. Part-of: #2445 --------- Signed-off-by: Scott J Dickerson <[email protected]>
1 parent fcb9d37 commit b5cb7c7

File tree

9 files changed

+325
-225
lines changed

9 files changed

+325
-225
lines changed

client/src/app/api/rest/analysis.ts

Lines changed: 60 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,51 +11,76 @@ import {
1111
BaseAnalysisIssueReport,
1212
} from "../models";
1313

14-
const ANALYSIS_ISSUE = hub`/analyses/insights/{{id}}`;
15-
const ANALYSIS_ISSUE_INCIDENTS = hub`/analyses/insights/{{id}}/incidents`;
16-
const ANALYSIS_RULES = hub`/analyses/report/rules?filter=effort>0`;
17-
const ANALYSIS_APP_ISSUES = hub`/analyses/report/applications/{{id}}/insights?filter=effort>0`;
18-
const ANALYSIS_ISSUES_APPS = hub`/analyses/report/insights/applications?filter=effort>0`;
19-
const ANALYSIS_ISSUE_FILES = hub`/analyses/report/insights/{{id}}/files`;
14+
/*
15+
- Analysis uses a collection of rulesets containing rules, and activating labels to produce a
16+
report containing dependencies, insights, and incidents.
17+
- Dependencies are handled on their own page.
18+
- The insights view will only show insights with an effort =0.
19+
- Issues are insights with effort >0.
20+
- Insights have one or more incidents.
21+
- Incidents are a specific occurrence of the insight/issue/rule in a source file.
22+
*/
2023

21-
export const getRuleReports = (params: HubRequestParams = {}) =>
22-
getHubPaginatedResult<BaseAnalysisRuleReport>(ANALYSIS_RULES, params);
24+
const INSIGHT = hub`/analyses/insights/{{id}}`;
25+
const INSIGHT_INCIDENTS = hub`/analyses/insights/{{id}}/incidents`;
26+
const REPORT_INSIGHT_FILES = hub`/analyses/report/insights/{{id}}/files`;
2327

24-
export const getAppReports = (params: HubRequestParams = {}) =>
25-
getHubPaginatedResult<AnalysisAppReport>(ANALYSIS_ISSUES_APPS, params);
28+
const REPORT_ISSUES = hub`/analyses/report/rules?filter=effort>0`; // RuleReports
29+
const REPORT_APP_ISSUES = hub`/analyses/report/applications/{{id}}/insights?filter=effort>0`; // AppInsightReports
30+
const REPORT_ISSUES_APPS = hub`/analyses/report/insights/applications?filter=effort>0`; // InsightAppReports
2631

27-
export const getIssueReports = (
28-
applicationId?: number,
32+
const REPORT_INSIGHTS = hub`/analyses/report/rules?filter=effort=0`; // RuleReports
33+
const REPORT_APP_INSIGHTS = hub`/analyses/report/applications/{{id}}/insights?filter=effort=0`; // AppInsightReports
34+
const REPORT_INSIGHTS_APPS = hub`/analyses/report/insights/applications?filter=effort=0`; // InsightAppReports
35+
36+
export const getInsight = (id: number) =>
37+
axios
38+
.get<AnalysisIssue>(template(INSIGHT, { id }))
39+
.then((response) => response.data);
40+
41+
export const getInsightIncidents = (
42+
id: number,
2943
params: HubRequestParams = {}
3044
) =>
31-
getHubPaginatedResult<BaseAnalysisIssueReport>(
32-
template(ANALYSIS_APP_ISSUES, { id: applicationId }),
45+
getHubPaginatedResult<AnalysisIncident>(
46+
template(INSIGHT_INCIDENTS, { id: id }),
3347
params
3448
);
3549

36-
export const getIssue = (issueId: number) =>
37-
axios
38-
.get<AnalysisIssue>(template(ANALYSIS_ISSUE, { id: issueId }))
39-
.then((response) => response.data);
50+
export const getInsightFiles = (id: number, params: HubRequestParams = {}) =>
51+
getHubPaginatedResult<AnalysisFileReport>(
52+
template(REPORT_INSIGHT_FILES, { id }),
53+
params
54+
);
55+
56+
// Issue specific functions
57+
export const getReportAllIssues = (params: HubRequestParams = {}) =>
58+
getHubPaginatedResult<BaseAnalysisRuleReport>(REPORT_ISSUES, params);
4059

41-
export const getFileReports = (
42-
issueId?: number,
60+
export const getReportApplicationIssues = (
61+
applicationId: number,
4362
params: HubRequestParams = {}
4463
) =>
45-
issueId
46-
? getHubPaginatedResult<AnalysisFileReport>(
47-
template(ANALYSIS_ISSUE_FILES, { id: issueId }),
48-
params
49-
)
50-
: Promise.reject();
51-
52-
export const getIncidents = (
53-
issueId?: number,
64+
getHubPaginatedResult<BaseAnalysisIssueReport>(
65+
template(REPORT_APP_ISSUES, { id: applicationId }),
66+
params
67+
);
68+
69+
export const getReportIssueApps = (params: HubRequestParams = {}) =>
70+
getHubPaginatedResult<AnalysisAppReport>(REPORT_ISSUES_APPS, params);
71+
72+
// Insight specific functions
73+
export const getReportAllInsights = (params: HubRequestParams = {}) =>
74+
getHubPaginatedResult<BaseAnalysisRuleReport>(REPORT_INSIGHTS, params);
75+
76+
export const getReportApplicationInsights = (
77+
applicationId: number,
5478
params: HubRequestParams = {}
5579
) =>
56-
issueId
57-
? getHubPaginatedResult<AnalysisIncident>(
58-
template(ANALYSIS_ISSUE_INCIDENTS, { id: issueId }),
59-
params
60-
)
61-
: Promise.reject();
80+
getHubPaginatedResult<AnalysisAppReport>(
81+
template(REPORT_APP_INSIGHTS, { id: applicationId }),
82+
params
83+
);
84+
85+
export const getReportInsightApps = (params: HubRequestParams = {}) =>
86+
getHubPaginatedResult<AnalysisAppReport>(REPORT_INSIGHTS_APPS, params);

client/src/app/pages/issues/affected-applications/affected-applications.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
TableHeaderContentWithControls,
2727
TableRowContentWithControls,
2828
} from "@app/components/TableControls";
29-
import { useFetchAppReports } from "@app/queries/issues";
29+
import { useFetchReportIssueApps } from "@app/queries/analysis";
3030
import { Link, useLocation, useParams } from "react-router-dom";
3131
import { FilterToolbar } from "@app/components/FilterToolbar";
3232
import {
@@ -76,7 +76,7 @@ export const AffectedApplications: React.FC = () => {
7676
result: { data: currentPageAppReports, total: totalItemCount },
7777
isFetching,
7878
fetchError,
79-
} = useFetchAppReports(
79+
} = useFetchReportIssueApps(
8080
getHubRequestParams({
8181
...tableControlState,
8282
implicitFilters: [
@@ -239,7 +239,6 @@ export const AffectedApplications: React.FC = () => {
239239
</PageSection>
240240
<IssueDetailDrawer
241241
issueId={activeItem?.insight.id || null}
242-
applicationName={activeItem?.name || null}
243242
onCloseClick={clearActiveItem}
244243
/>
245244
</>

client/src/app/pages/issues/issue-detail-drawer/file-incidents-detail-modal/file-all-incidents-table.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as React from "react";
33
import { Table, Thead, Tr, Th, Tbody, Td } from "@patternfly/react-table";
44
import { TablePersistenceKeyPrefix } from "@app/Constants";
55
import { AnalysisFileReport } from "@app/api/models";
6-
import { useFetchIncidents } from "@app/queries/issues";
6+
import { useFetchIncidents } from "@app/queries/analysis";
77
import { SimplePagination } from "@app/components/SimplePagination";
88
import {
99
TableHeaderContentWithControls,

client/src/app/pages/issues/issue-detail-drawer/file-incidents-detail-modal/file-incidents-detail-modal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { AppPlaceholder } from "@app/components/AppPlaceholder";
1818
import { StateError } from "@app/components/StateError";
1919
import { NoDataEmptyState } from "@app/components/NoDataEmptyState";
2020
import { AnalysisFileReport, AnalysisIssue } from "@app/api/models";
21-
import { useFetchIncidents } from "@app/queries/issues";
21+
import { useFetchIncidents } from "@app/queries/analysis";
2222
import { IncidentCodeSnipViewer } from "./incident-code-snip-viewer";
2323
import { FileAllIncidentsTable } from "./file-all-incidents-table";
2424
import { IssueDescriptionAndLinks } from "../../components/issue-description-and-links";

client/src/app/pages/issues/issue-detail-drawer/issue-affected-files-table.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
useTableControlProps,
1515
getHubRequestParams,
1616
} from "@app/hooks/table-controls";
17-
import { useFetchFileReports } from "@app/queries/issues";
17+
import { useFetchReportInsightFiles } from "@app/queries/analysis";
1818
import { TablePersistenceKeyPrefix } from "@app/Constants";
1919
import {
2020
ConditionalTableBody,
@@ -68,7 +68,7 @@ export const IssueAffectedFilesTable: React.FC<
6868
result: { data: currentPageFileReports, total: totalItemCount },
6969
isFetching,
7070
fetchError,
71-
} = useFetchFileReports(
71+
} = useFetchReportInsightFiles(
7272
issue.id,
7373
getHubRequestParams({
7474
...tableControlState,

client/src/app/pages/issues/issue-detail-drawer/issue-detail-drawer.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@ import {
1313
} from "@patternfly/react-core";
1414
import spacing from "@patternfly/react-styles/css/utilities/Spacing/spacing";
1515
import { IssueAffectedFilesTable } from "./issue-affected-files-table";
16-
import { useFetchIssue } from "@app/queries/issues";
16+
import { useFetchInsight } from "@app/queries/analysis";
1717
import { AppPlaceholder } from "@app/components/AppPlaceholder";
1818
import { StateNoData } from "@app/components/StateNoData";
1919
import { getIssueTitle } from "../helpers";
2020

2121
export interface IIssueDetailDrawerProps
2222
extends Pick<IPageDrawerContentProps, "onCloseClick"> {
2323
issueId: number | null;
24-
applicationName: string | null;
2524
}
2625

2726
enum TabKey {
@@ -30,13 +29,12 @@ enum TabKey {
3029

3130
export const IssueDetailDrawer: React.FC<IIssueDetailDrawerProps> = ({
3231
issueId,
33-
applicationName,
3432
onCloseClick,
3533
}) => {
3634
const {
3735
result: { data: issue },
3836
isFetching,
39-
} = useFetchIssue(issueId || undefined);
37+
} = useFetchInsight(issueId || undefined);
4038

4139
const [activeTabKey, setActiveTabKey] = React.useState<TabKey>(
4240
TabKey.AffectedFiles

client/src/app/pages/issues/issues-table.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ import { AppPlaceholder } from "@app/components/AppPlaceholder";
3434
import { OptionWithValue, SimpleSelect } from "@app/components/SimpleSelect";
3535
import { TablePersistenceKeyPrefix, UI_UNIQUE_ID } from "@app/Constants";
3636

37-
import { useFetchIssueReports, useFetchRuleReports } from "@app/queries/issues";
37+
import {
38+
useFetchReportApplicationIssues,
39+
useFetchReportAllIssues,
40+
} from "@app/queries/analysis";
3841
import { useFetchApplications } from "@app/queries/applications";
3942

4043
import {
@@ -194,11 +197,11 @@ export const IssuesTable: React.FC<IIssuesTableProps> = ({ mode }) => {
194197
},
195198
});
196199

197-
const issueReportsQuery = useFetchIssueReports(
200+
const issueReportsQuery = useFetchReportApplicationIssues(
198201
selectedAppId || undefined,
199202
hubRequestParams
200203
);
201-
const ruleReportsQuery = useFetchRuleReports(
204+
const ruleReportsQuery = useFetchReportAllIssues(
202205
mode === "allIssues",
203206
hubRequestParams
204207
);
@@ -571,7 +574,6 @@ export const IssuesTable: React.FC<IIssuesTableProps> = ({ mode }) => {
571574
/>
572575
<IssueDetailDrawer
573576
issueId={activeIssueReportInDetailDrawer?.id || null}
574-
applicationName={selectedApp?.name || null}
575577
onCloseClick={() => setActiveIssueReportInDetailDrawer(null)}
576578
/>
577579
</div>

0 commit comments

Comments
 (0)