@@ -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" ;
812import styled from "styled-components" ;
913import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage" ;
1014import { ModeledMethod } from "../../data-extensions-editor/modeled-method" ;
1115import { assertNever } from "../../common/helpers-pure" ;
1216import { vscode } from "../vscode-api" ;
1317import { calculateModeledPercentage } from "../../data-extensions-editor/shared/modeled-percentage" ;
1418import { LinkIconButton } from "../variant-analysis/LinkIconButton" ;
15- import { ViewTitle } from "../common" ;
1619import { DataExtensionEditorViewState } from "../../data-extensions-editor/shared/view-state" ;
1720import { ModeledMethodsList } from "./ModeledMethodsList" ;
1821import { 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+
3965const 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