Skip to content

Commit d26d886

Browse files
committed
Add grouping by package and remove usages for framework mode
1 parent 48b78c1 commit d26d886

File tree

5 files changed

+53
-31
lines changed

5 files changed

+53
-31
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ export function DataExtensionsEditor({
233233
<ModeledMethodsList
234234
externalApiUsages={externalApiUsages}
235235
modeledMethods={modeledMethods}
236+
mode={viewState?.mode ?? Mode.Application}
236237
onChange={onChange}
237238
/>
238239
</EditorContainer>

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { ModeledMethodDataGrid } from "./ModeledMethodDataGrid";
88
import { calculateModeledPercentage } from "./modeled";
99
import { decimalFormatter, percentFormatter } from "./formatters";
1010
import { Codicon } from "../common";
11+
import { Mode } from "../../data-extensions-editor/shared/mode";
1112

1213
const LibraryContainer = styled.div`
1314
margin-bottom: 1rem;
@@ -38,19 +39,21 @@ const StatusContainer = styled.div`
3839
`;
3940

4041
type Props = {
41-
libraryName: string;
42+
title: string;
4243
externalApiUsages: ExternalApiUsage[];
4344
modeledMethods: Record<string, ModeledMethod>;
45+
mode: Mode;
4446
onChange: (
4547
externalApiUsage: ExternalApiUsage,
4648
modeledMethod: ModeledMethod,
4749
) => void;
4850
};
4951

5052
export const LibraryRow = ({
51-
libraryName,
53+
title,
5254
externalApiUsages,
5355
modeledMethods,
56+
mode,
5457
onChange,
5558
}: Props) => {
5659
const modeledPercentage = useMemo(() => {
@@ -75,7 +78,7 @@ export const LibraryRow = ({
7578
) : (
7679
<Codicon name="chevron-right" label="Expand" />
7780
)}
78-
{libraryName}
81+
{title}
7982
{isExpanded ? null : (
8083
<>
8184
{" "}
@@ -116,6 +119,7 @@ export const LibraryRow = ({
116119
<ModeledMethodDataGrid
117120
externalApiUsages={externalApiUsages}
118121
modeledMethods={modeledMethods}
122+
mode={mode}
119123
onChange={onChange}
120124
/>
121125
</>

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
} from "../../data-extensions-editor/modeled-method";
1818
import { KindInput } from "./KindInput";
1919
import { extensiblePredicateDefinitions } from "../../data-extensions-editor/predicates";
20+
import { Mode } from "../../data-extensions-editor/shared/mode";
2021

2122
const Dropdown = styled(VSCodeDropdown)`
2223
width: 100%;
@@ -47,6 +48,7 @@ const UsagesButton = styled.button`
4748
type Props = {
4849
externalApiUsage: ExternalApiUsage;
4950
modeledMethod: ModeledMethod | undefined;
51+
mode: Mode;
5052
onChange: (
5153
externalApiUsage: ExternalApiUsage,
5254
modeledMethod: ModeledMethod,
@@ -56,6 +58,7 @@ type Props = {
5658
export const MethodRow = ({
5759
externalApiUsage,
5860
modeledMethod,
61+
mode,
5962
onChange,
6063
}: Props) => {
6164
const argumentsList = useMemo(() => {
@@ -165,11 +168,13 @@ export const MethodRow = ({
165168
{externalApiUsage.methodParameters}
166169
</SupportSpan>
167170
</VSCodeDataGridCell>
168-
<VSCodeDataGridCell gridColumn={3}>
169-
<UsagesButton onClick={jumpToUsage}>
170-
{externalApiUsage.usages.length}
171-
</UsagesButton>
172-
</VSCodeDataGridCell>
171+
{mode === Mode.Application && (
172+
<VSCodeDataGridCell gridColumn={3}>
173+
<UsagesButton onClick={jumpToUsage}>
174+
{externalApiUsage.usages.length}
175+
</UsagesButton>
176+
</VSCodeDataGridCell>
177+
)}
173178
<VSCodeDataGridCell gridColumn={4}>
174179
{(!externalApiUsage.supported ||
175180
(modeledMethod && modeledMethod?.type !== "none")) && (

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import { MethodRow } from "./MethodRow";
88
import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage";
99
import { ModeledMethod } from "../../data-extensions-editor/modeled-method";
1010
import { useMemo } from "react";
11+
import { Mode } from "../../data-extensions-editor/shared/mode";
1112

1213
type Props = {
1314
externalApiUsages: ExternalApiUsage[];
1415
modeledMethods: Record<string, ModeledMethod>;
16+
mode: Mode;
1517
onChange: (
1618
externalApiUsage: ExternalApiUsage,
1719
modeledMethod: ModeledMethod,
@@ -21,6 +23,7 @@ type Props = {
2123
export const ModeledMethodDataGrid = ({
2224
externalApiUsages,
2325
modeledMethods,
26+
mode,
2427
onChange,
2528
}: Props) => {
2629
const sortedExternalApiUsages = useMemo(() => {
@@ -48,9 +51,11 @@ export const ModeledMethodDataGrid = ({
4851
<VSCodeDataGridCell cellType="columnheader" gridColumn={2}>
4952
Method
5053
</VSCodeDataGridCell>
51-
<VSCodeDataGridCell cellType="columnheader" gridColumn={3}>
52-
Usages
53-
</VSCodeDataGridCell>
54+
{mode === Mode.Application && (
55+
<VSCodeDataGridCell cellType="columnheader" gridColumn={3}>
56+
Usages
57+
</VSCodeDataGridCell>
58+
)}
5459
<VSCodeDataGridCell cellType="columnheader" gridColumn={4}>
5560
Model type
5661
</VSCodeDataGridCell>
@@ -69,6 +74,7 @@ export const ModeledMethodDataGrid = ({
6974
key={externalApiUsage.signature}
7075
externalApiUsage={externalApiUsage}
7176
modeledMethod={modeledMethods[externalApiUsage.signature]}
77+
mode={mode}
7278
onChange={onChange}
7379
/>
7480
))}

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

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usag
44
import { ModeledMethod } from "../../data-extensions-editor/modeled-method";
55
import { calculateModeledPercentage } from "./modeled";
66
import { LibraryRow } from "./LibraryRow";
7+
import { Mode } from "../../data-extensions-editor/shared/mode";
78

89
type Props = {
910
externalApiUsages: ExternalApiUsage[];
1011
modeledMethods: Record<string, ModeledMethod>;
12+
mode: Mode;
1113
onChange: (
1214
externalApiUsage: ExternalApiUsage,
1315
modeledMethod: ModeledMethod,
@@ -17,27 +19,30 @@ type Props = {
1719
export const ModeledMethodsList = ({
1820
externalApiUsages,
1921
modeledMethods,
22+
mode,
2023
onChange,
2124
}: Props) => {
22-
const groupedByLibrary = useMemo(() => {
25+
const grouped = useMemo(() => {
2326
const groupedByLibrary: Record<string, ExternalApiUsage[]> = {};
2427

2528
for (const externalApiUsage of externalApiUsages) {
26-
groupedByLibrary[externalApiUsage.library] ??= [];
27-
groupedByLibrary[externalApiUsage.library].push(externalApiUsage);
29+
// Group by package if using framework mode
30+
const key =
31+
mode === Mode.Framework
32+
? externalApiUsage.packageName
33+
: externalApiUsage.library;
34+
35+
groupedByLibrary[key] ??= [];
36+
groupedByLibrary[key].push(externalApiUsage);
2837
}
2938

3039
return groupedByLibrary;
31-
}, [externalApiUsages]);
40+
}, [externalApiUsages, mode]);
3241

33-
const sortedLibraryNames = useMemo(() => {
34-
return Object.keys(groupedByLibrary).sort((a, b) => {
35-
const supportedPercentageA = calculateModeledPercentage(
36-
groupedByLibrary[a],
37-
);
38-
const supportedPercentageB = calculateModeledPercentage(
39-
groupedByLibrary[b],
40-
);
42+
const sortedGroupNames = useMemo(() => {
43+
return Object.keys(grouped).sort((a, b) => {
44+
const supportedPercentageA = calculateModeledPercentage(grouped[a]);
45+
const supportedPercentageB = calculateModeledPercentage(grouped[b]);
4146

4247
// Sort first by supported percentage ascending
4348
if (supportedPercentageA > supportedPercentageB) {
@@ -47,19 +52,19 @@ export const ModeledMethodsList = ({
4752
return -1;
4853
}
4954

50-
const numberOfUsagesA = groupedByLibrary[a].reduce(
55+
const numberOfUsagesA = grouped[a].reduce(
5156
(acc, curr) => acc + curr.usages.length,
5257
0,
5358
);
54-
const numberOfUsagesB = groupedByLibrary[b].reduce(
59+
const numberOfUsagesB = grouped[b].reduce(
5560
(acc, curr) => acc + curr.usages.length,
5661
0,
5762
);
5863

5964
// If the number of usages is equal, sort by number of methods descending
6065
if (numberOfUsagesA === numberOfUsagesB) {
61-
const numberOfMethodsA = groupedByLibrary[a].length;
62-
const numberOfMethodsB = groupedByLibrary[b].length;
66+
const numberOfMethodsA = grouped[a].length;
67+
const numberOfMethodsB = grouped[b].length;
6368

6469
// If the number of methods is equal, sort by library name ascending
6570
if (numberOfMethodsA === numberOfMethodsB) {
@@ -72,16 +77,17 @@ export const ModeledMethodsList = ({
7277
// Then sort by number of usages descending
7378
return numberOfUsagesB - numberOfUsagesA;
7479
});
75-
}, [groupedByLibrary]);
80+
}, [grouped]);
7681

7782
return (
7883
<>
79-
{sortedLibraryNames.map((libraryName) => (
84+
{sortedGroupNames.map((libraryName) => (
8085
<LibraryRow
8186
key={libraryName}
82-
libraryName={libraryName}
83-
externalApiUsages={groupedByLibrary[libraryName]}
87+
title={libraryName}
88+
externalApiUsages={grouped[libraryName]}
8489
modeledMethods={modeledMethods}
90+
mode={mode}
8591
onChange={onChange}
8692
/>
8793
))}

0 commit comments

Comments
 (0)