Skip to content

Commit 493de4c

Browse files
Add new header UI elements
1 parent 8f99ed2 commit 493de4c

File tree

3 files changed

+81
-33
lines changed

3 files changed

+81
-33
lines changed

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,10 @@ interface JumpToUsageMessage {
527527
location: ResolvableLocationValue;
528528
}
529529

530+
interface OpenDatabaseMessage {
531+
t: "openDatabase";
532+
}
533+
530534
interface OpenExtensionPackMessage {
531535
t: "openExtensionPack";
532536
}
@@ -566,6 +570,7 @@ export type FromDataExtensionsEditorMessage =
566570
| ViewLoadedMsg
567571
| SwitchModeMessage
568572
| RefreshExternalApiUsages
573+
| OpenDatabaseMessage
569574
| OpenExtensionPackMessage
570575
| JumpToUsageMessage
571576
| SaveModeledMethods

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ export class DataExtensionsEditorView extends AbstractWebview<
107107
case "viewLoaded":
108108
await this.onWebViewLoaded();
109109

110+
break;
111+
case "openDatabase":
112+
await this.app.commands.execute(
113+
"revealInExplorer",
114+
this.databaseItem.getSourceArchiveExplorerUri(),
115+
);
116+
110117
break;
111118
case "openExtensionPack":
112119
await this.app.commands.execute(

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

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ import {
44
ShowProgressMessage,
55
ToDataExtensionsEditorMessage,
66
} from "../../common/interface-types";
7-
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react";
7+
import {
8+
VSCodeButton,
9+
VSCodeCheckbox,
10+
VSCodeTag,
11+
} from "@vscode/webview-ui-toolkit/react";
812
import styled from "styled-components";
913
import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage";
1014
import { ModeledMethod } from "../../data-extensions-editor/modeled-method";
1115
import { assertNever } from "../../common/helpers-pure";
1216
import { vscode } from "../vscode-api";
1317
import { calculateModeledPercentage } from "../../data-extensions-editor/shared/modeled-percentage";
1418
import { LinkIconButton } from "../variant-analysis/LinkIconButton";
15-
import { ViewTitle } from "../common";
1619
import { DataExtensionEditorViewState } from "../../data-extensions-editor/shared/view-state";
1720
import { ModeledMethodsList } from "./ModeledMethodsList";
1821
import { percentFormatter } from "./formatters";
@@ -30,12 +33,35 @@ const DataExtensionsEditorContainer = styled.div`
3033
margin-top: 1rem;
3134
`;
3235

33-
const DetailsContainer = styled.div`
36+
const HeaderContainer = styled.div`
37+
display: flex;
38+
flex-direction: row;
39+
align-items: end;
40+
`;
41+
42+
const HeaderColumn = styled.div`
43+
display: flex;
44+
flex-direction: column;
45+
gap: 0.5em;
46+
`;
47+
48+
const HeaderSpacer = styled.div`
49+
flex-grow: 1;
50+
`;
51+
52+
const HeaderRow = styled.div`
3453
display: flex;
54+
flex-direction: row;
3555
gap: 1em;
3656
align-items: center;
3757
`;
3858

59+
const ViewTitle = styled.h1`
60+
font-size: 2em;
61+
font-weight: 500;
62+
margin: 0;
63+
`;
64+
3965
const EditorContainer = styled.div`
4066
margin-top: 1rem;
4167
`;
@@ -150,8 +176,6 @@ export function DataExtensionsEditor({
150176
[externalApiUsages],
151177
);
152178

153-
const unModeledPercentage = 100 - modeledPercentage;
154-
155179
const onChange = useCallback(
156180
(modelName: string, method: ExternalApiUsage, model: ModeledMethod) => {
157181
setModeledMethods((oldModeledMethods) => ({
@@ -228,6 +252,12 @@ export function DataExtensionsEditor({
228252
[],
229253
);
230254

255+
const onOpenDatabaseClick = useCallback(() => {
256+
vscode.postMessage({
257+
t: "openDatabase",
258+
});
259+
}, []);
260+
231261
const onOpenExtensionPackClick = useCallback(() => {
232262
vscode.postMessage({
233263
t: "openExtensionPack",
@@ -259,40 +289,46 @@ export function DataExtensionsEditor({
259289

260290
{externalApiUsages.length > 0 && (
261291
<>
262-
<ViewTitle>
263-
{getLanguageDisplayName(viewState.extensionPack.language)}
264-
</ViewTitle>
265-
<DetailsContainer>
266-
<LinkIconButton onClick={onOpenExtensionPackClick}>
267-
<span slot="start" className="codicon codicon-package"></span>
268-
{viewState.extensionPack.name}
269-
</LinkIconButton>
270-
<div>
271-
{percentFormatter.format(modeledPercentage / 100)} modeled
272-
</div>
273-
<div>
274-
{percentFormatter.format(unModeledPercentage / 100)} unmodeled
275-
</div>
276-
{viewState.enableFrameworkMode && (
277-
<>
278-
<div>
279-
Mode:{" "}
280-
{viewState.mode === Mode.Framework
281-
? "Framework"
282-
: "Application"}
283-
</div>
284-
<div>
292+
<HeaderContainer>
293+
<HeaderColumn>
294+
<HeaderRow>
295+
<ViewTitle>
296+
{getLanguageDisplayName(viewState.extensionPack.language)}
297+
</ViewTitle>
298+
<VSCodeTag>
299+
{percentFormatter.format(modeledPercentage / 100)} MODELED
300+
</VSCodeTag>
301+
</HeaderRow>
302+
<HeaderRow>
303+
<>{viewState.extensionPack.name}</>
304+
</HeaderRow>
305+
<HeaderRow>
306+
<LinkIconButton onClick={onOpenDatabaseClick}>
307+
<span slot="start" className="codicon codicon-package"></span>
308+
Open database
309+
</LinkIconButton>
310+
<LinkIconButton onClick={onOpenExtensionPackClick}>
311+
<span slot="start" className="codicon codicon-package"></span>
312+
Open extension pack
313+
</LinkIconButton>
314+
{viewState.enableFrameworkMode && (
285315
<LinkIconButton onClick={onSwitchModeClick}>
286316
<span
287317
slot="start"
288318
className="codicon codicon-library"
289319
></span>
290-
Switch mode
320+
{viewState.mode === Mode.Framework
321+
? "Model as application"
322+
: "Model as dependency"}
291323
</LinkIconButton>
292-
</div>
293-
</>
294-
)}
295-
</DetailsContainer>
324+
)}
325+
</HeaderRow>
326+
</HeaderColumn>
327+
<HeaderSpacer />
328+
<HeaderColumn>
329+
<VSCodeCheckbox>Hide modeled APIs</VSCodeCheckbox>
330+
</HeaderColumn>
331+
</HeaderContainer>
296332

297333
<EditorContainer>
298334
<ButtonsContainer>

0 commit comments

Comments
 (0)