Skip to content

Commit 590e908

Browse files
committed
Group modeled methods by library
1 parent 487c0a6 commit 590e908

2 files changed

Lines changed: 57 additions & 2 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { LinkIconButton } from "../variant-analysis/LinkIconButton";
1515
import { basename } from "../common/path";
1616
import { ViewTitle } from "../common";
1717
import { DataExtensionEditorViewState } from "../../data-extensions-editor/shared/view-state";
18-
import { ModeledMethodDataGrid } from "./ModeledMethodDataGrid";
18+
import { ModeledMethodsList } from "./ModeledMethodsList";
1919

2020
const DataExtensionsEditorContainer = styled.div`
2121
margin-top: 1rem;
@@ -231,7 +231,7 @@ export function DataExtensionsEditor({
231231
</>
232232
)}
233233
</ButtonsContainer>
234-
<ModeledMethodDataGrid
234+
<ModeledMethodsList
235235
externalApiUsages={externalApiUsages}
236236
modeledMethods={modeledMethods}
237237
onChange={onChange}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import * as React from "react";
2+
import { useMemo } from "react";
3+
import styled from "styled-components";
4+
import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage";
5+
import { ModeledMethod } from "../../data-extensions-editor/modeled-method";
6+
import { ModeledMethodDataGrid } from "./ModeledMethodDataGrid";
7+
8+
const LibraryContainer = styled.div`
9+
margin-bottom: 1rem;
10+
`;
11+
12+
type Props = {
13+
externalApiUsages: ExternalApiUsage[];
14+
modeledMethods: Record<string, ModeledMethod>;
15+
onChange: (
16+
externalApiUsage: ExternalApiUsage,
17+
modeledMethod: ModeledMethod,
18+
) => void;
19+
};
20+
21+
export const ModeledMethodsList = ({
22+
externalApiUsages,
23+
modeledMethods,
24+
onChange,
25+
}: Props) => {
26+
const groupedByLibrary = useMemo(() => {
27+
const groupedByLibrary: Record<string, ExternalApiUsage[]> = {};
28+
29+
for (const externalApiUsage of externalApiUsages) {
30+
groupedByLibrary[externalApiUsage.library] ??= [];
31+
groupedByLibrary[externalApiUsage.library].push(externalApiUsage);
32+
}
33+
34+
return groupedByLibrary;
35+
}, [externalApiUsages]);
36+
37+
const sortedLibraryNames = useMemo(() => {
38+
return Object.keys(groupedByLibrary).sort();
39+
}, [groupedByLibrary]);
40+
41+
return (
42+
<>
43+
{sortedLibraryNames.map((libraryName) => (
44+
<LibraryContainer key={libraryName}>
45+
<h3>{libraryName}</h3>
46+
<ModeledMethodDataGrid
47+
externalApiUsages={groupedByLibrary[libraryName]}
48+
modeledMethods={modeledMethods}
49+
onChange={onChange}
50+
/>
51+
</LibraryContainer>
52+
))}
53+
</>
54+
);
55+
};

0 commit comments

Comments
 (0)