Skip to content

Commit 41f5beb

Browse files
Merge pull request #2638 from github/robertbrignull/data_new_header
Add new data extensions header UI elements
2 parents 5e55356 + af50d90 commit 41f5beb

File tree

3 files changed

+81
-29
lines changed

3 files changed

+81
-29
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,10 @@ interface JumpToUsageMessage {
520520
location: ResolvableLocationValue;
521521
}
522522

523+
interface OpenDatabaseMessage {
524+
t: "openDatabase";
525+
}
526+
523527
interface OpenExtensionPackMessage {
524528
t: "openExtensionPack";
525529
}
@@ -558,6 +562,7 @@ export type FromDataExtensionsEditorMessage =
558562
| ViewLoadedMsg
559563
| SwitchModeMessage
560564
| RefreshExternalApiUsages
565+
| OpenDatabaseMessage
561566
| OpenExtensionPackMessage
562567
| JumpToUsageMessage
563568
| 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
@@ -103,6 +103,13 @@ export class DataExtensionsEditorView extends AbstractWebview<
103103
case "viewLoaded":
104104
await this.onWebViewLoaded();
105105

106+
break;
107+
case "openDatabase":
108+
await this.app.commands.execute(
109+
"revealInExplorer",
110+
this.databaseItem.getSourceArchiveExplorerUri(),
111+
);
112+
106113
break;
107114
case "openExtensionPack":
108115
await this.app.commands.execute(

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

Lines changed: 69 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import * as React from "react";
22
import { useCallback, useEffect, useMemo, useState } from "react";
33
import { ToDataExtensionsEditorMessage } from "../../common/interface-types";
4-
import { VSCodeButton } from "@vscode/webview-ui-toolkit/react";
4+
import {
5+
VSCodeButton,
6+
VSCodeCheckbox,
7+
VSCodeTag,
8+
} from "@vscode/webview-ui-toolkit/react";
59
import styled from "styled-components";
610
import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage";
711
import { ModeledMethod } from "../../data-extensions-editor/modeled-method";
812
import { assertNever } from "../../common/helpers-pure";
913
import { vscode } from "../vscode-api";
1014
import { calculateModeledPercentage } from "../../data-extensions-editor/shared/modeled-percentage";
1115
import { LinkIconButton } from "../variant-analysis/LinkIconButton";
12-
import { ViewTitle } from "../common";
1316
import { DataExtensionEditorViewState } from "../../data-extensions-editor/shared/view-state";
1417
import { ModeledMethodsList } from "./ModeledMethodsList";
1518
import { percentFormatter } from "./formatters";
@@ -27,12 +30,35 @@ const DataExtensionsEditorContainer = styled.div`
2730
margin-top: 1rem;
2831
`;
2932

30-
const DetailsContainer = styled.div`
33+
const HeaderContainer = styled.div`
3134
display: flex;
35+
flex-direction: row;
36+
align-items: end;
37+
`;
38+
39+
const HeaderColumn = styled.div`
40+
display: flex;
41+
flex-direction: column;
42+
gap: 0.5em;
43+
`;
44+
45+
const HeaderSpacer = styled.div`
46+
flex-grow: 1;
47+
`;
48+
49+
const HeaderRow = styled.div`
50+
display: flex;
51+
flex-direction: row;
3252
gap: 1em;
3353
align-items: center;
3454
`;
3555

56+
const ViewTitle = styled.h1`
57+
font-size: 2em;
58+
font-weight: 500;
59+
margin: 0;
60+
`;
61+
3662
const EditorContainer = styled.div`
3763
margin-top: 1rem;
3864
`;
@@ -128,8 +154,6 @@ export function DataExtensionsEditor({
128154
[externalApiUsages],
129155
);
130156

131-
const unModeledPercentage = 100 - modeledPercentage;
132-
133157
const onChange = useCallback(
134158
(modelName: string, method: ExternalApiUsage, model: ModeledMethod) => {
135159
setModeledMethods((oldModeledMethods) => ({
@@ -206,6 +230,12 @@ export function DataExtensionsEditor({
206230
[],
207231
);
208232

233+
const onOpenDatabaseClick = useCallback(() => {
234+
vscode.postMessage({
235+
t: "openDatabase",
236+
});
237+
}, []);
238+
209239
const onOpenExtensionPackClick = useCallback(() => {
210240
vscode.postMessage({
211241
t: "openExtensionPack",
@@ -228,33 +258,43 @@ export function DataExtensionsEditor({
228258

229259
return (
230260
<DataExtensionsEditorContainer>
231-
<ViewTitle>
232-
{getLanguageDisplayName(viewState.extensionPack.language)}
233-
</ViewTitle>
234-
<DetailsContainer>
235-
<LinkIconButton onClick={onOpenExtensionPackClick}>
236-
<span slot="start" className="codicon codicon-package"></span>
237-
{viewState.extensionPack.name}
238-
</LinkIconButton>
239-
<div>{percentFormatter.format(modeledPercentage / 100)} modeled</div>
240-
<div>
241-
{percentFormatter.format(unModeledPercentage / 100)} unmodeled
242-
</div>
243-
{viewState.enableFrameworkMode && (
244-
<>
245-
<div>
246-
Mode:{" "}
247-
{viewState.mode === Mode.Framework ? "Framework" : "Application"}
248-
</div>
249-
<div>
261+
<HeaderContainer>
262+
<HeaderColumn>
263+
<HeaderRow>
264+
<ViewTitle>
265+
{getLanguageDisplayName(viewState.extensionPack.language)}
266+
</ViewTitle>
267+
<VSCodeTag>
268+
{percentFormatter.format(modeledPercentage / 100)} modeled
269+
</VSCodeTag>
270+
</HeaderRow>
271+
<HeaderRow>
272+
<>{viewState.extensionPack.name}</>
273+
</HeaderRow>
274+
<HeaderRow>
275+
<LinkIconButton onClick={onOpenDatabaseClick}>
276+
<span slot="start" className="codicon codicon-package"></span>
277+
Open database
278+
</LinkIconButton>
279+
<LinkIconButton onClick={onOpenExtensionPackClick}>
280+
<span slot="start" className="codicon codicon-package"></span>
281+
Open extension pack
282+
</LinkIconButton>
283+
{viewState.enableFrameworkMode && (
250284
<LinkIconButton onClick={onSwitchModeClick}>
251285
<span slot="start" className="codicon codicon-library"></span>
252-
Switch mode
286+
{viewState.mode === Mode.Framework
287+
? "Model as application"
288+
: "Model as dependency"}
253289
</LinkIconButton>
254-
</div>
255-
</>
256-
)}
257-
</DetailsContainer>
290+
)}
291+
</HeaderRow>
292+
</HeaderColumn>
293+
<HeaderSpacer />
294+
<HeaderColumn>
295+
<VSCodeCheckbox>Hide modeled APIs</VSCodeCheckbox>
296+
</HeaderColumn>
297+
</HeaderContainer>
258298

259299
<EditorContainer>
260300
<ButtonsContainer>

0 commit comments

Comments
 (0)