Skip to content

Commit ca7ba89

Browse files
committed
Move method classifications to separate component
1 parent 6a0cae5 commit ca7ba89

File tree

2 files changed

+49
-31
lines changed

2 files changed

+49
-31
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import * as React from "react";
2+
import { useMemo } from "react";
3+
import {
4+
CallClassification,
5+
ExternalApiUsage,
6+
} from "../../data-extensions-editor/external-api-usage";
7+
import { VSCodeTag } from "@vscode/webview-ui-toolkit/react";
8+
import styled from "styled-components";
9+
10+
const ClassificationsContainer = styled.div`
11+
display: inline-flex;
12+
flex-direction: row;
13+
gap: 0.5rem;
14+
`;
15+
16+
type Props = {
17+
externalApiUsage: ExternalApiUsage;
18+
};
19+
20+
export const MethodClassifications = ({ externalApiUsage }: Props) => {
21+
const allUsageClassifications = useMemo(
22+
() =>
23+
new Set(
24+
externalApiUsage.usages.map((usage) => {
25+
return usage.classification;
26+
}),
27+
),
28+
[externalApiUsage.usages],
29+
);
30+
31+
const inSource = allUsageClassifications.has(CallClassification.Source);
32+
const inTest = allUsageClassifications.has(CallClassification.Test);
33+
const inGenerated = allUsageClassifications.has(CallClassification.Generated);
34+
35+
if (inSource) {
36+
return null;
37+
}
38+
39+
return (
40+
<ClassificationsContainer>
41+
{inTest && <VSCodeTag>Test</VSCodeTag>}
42+
{inGenerated && <VSCodeTag>Generated</VSCodeTag>}
43+
</ClassificationsContainer>
44+
);
45+
};

extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,13 @@ import {
33
VSCodeDataGridCell,
44
VSCodeDataGridRow,
55
VSCodeLink,
6-
VSCodeTag,
76
} from "@vscode/webview-ui-toolkit/react";
87
import * as React from "react";
98
import { ChangeEvent, useCallback, useMemo } from "react";
109
import styled from "styled-components";
1110
import { vscode } from "../vscode-api";
1211

13-
import {
14-
CallClassification,
15-
ExternalApiUsage,
16-
} from "../../data-extensions-editor/external-api-usage";
12+
import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage";
1713
import {
1814
ModeledMethod,
1915
ModeledMethodType,
@@ -23,6 +19,7 @@ import { KindInput } from "./KindInput";
2319
import { extensiblePredicateDefinitions } from "../../data-extensions-editor/predicates";
2420
import { Mode } from "../../data-extensions-editor/shared/mode";
2521
import { Dropdown } from "../common/Dropdown";
22+
import { MethodClassifications } from "./MethodClassifications";
2623

2724
const ApiOrMethodCell = styled(VSCodeDataGridCell)`
2825
display: flex;
@@ -43,12 +40,6 @@ const ViewLink = styled(VSCodeLink)`
4340
white-space: nowrap;
4441
`;
4542

46-
const ClassificationsContainer = styled.div`
47-
display: inline-flex;
48-
flex-direction: row;
49-
gap: 0.5rem;
50-
`;
51-
5243
const modelTypeOptions: Array<{ value: ModeledMethodType; label: string }> = [
5344
{ value: "none", label: "Unmodeled" },
5445
{ value: "source", label: "Source" },
@@ -196,20 +187,6 @@ function ModelableMethodRow(props: Props) {
196187
: undefined;
197188
const showKindCell = predicate?.supportedKinds;
198189

199-
const allUsageClassifications = useMemo(
200-
() =>
201-
new Set(
202-
externalApiUsage.usages.map((usage) => {
203-
return usage.classification;
204-
}),
205-
),
206-
[externalApiUsage.usages],
207-
);
208-
209-
const inSource = allUsageClassifications.has(CallClassification.Source);
210-
const inTest = allUsageClassifications.has(CallClassification.Test);
211-
const inGenerated = allUsageClassifications.has(CallClassification.Generated);
212-
213190
return (
214191
<VSCodeDataGridRow>
215192
<ApiOrMethodCell gridColumn={1}>
@@ -221,12 +198,7 @@ function ModelableMethodRow(props: Props) {
221198
</UsagesButton>
222199
)}
223200
<ViewLink onClick={jumpToUsage}>View</ViewLink>
224-
{!inSource && (
225-
<ClassificationsContainer>
226-
{inTest && <VSCodeTag>Test</VSCodeTag>}
227-
{inGenerated && <VSCodeTag>Generated</VSCodeTag>}
228-
</ClassificationsContainer>
229-
)}
201+
<MethodClassifications externalApiUsage={externalApiUsage} />
230202
</ApiOrMethodCell>
231203
<VSCodeDataGridCell gridColumn={2}>
232204
<Dropdown
@@ -282,6 +254,7 @@ function UnmodelableMethodRow(props: Props) {
282254
</UsagesButton>
283255
)}
284256
<ViewLink onClick={jumpToUsage}>View</ViewLink>
257+
<MethodClassifications externalApiUsage={externalApiUsage} />
285258
</ApiOrMethodCell>
286259
<VSCodeDataGridCell gridColumn="span 4">
287260
Method modeled by CodeQL or a different extension pack

0 commit comments

Comments
 (0)