11import * as React from "react" ;
22import { useCallback , useEffect , useMemo , useState } from "react" ;
33import { 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" ;
59import styled from "styled-components" ;
610import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage" ;
711import { ModeledMethod } from "../../data-extensions-editor/modeled-method" ;
812import { assertNever } from "../../common/helpers-pure" ;
913import { vscode } from "../vscode-api" ;
1014import { calculateModeledPercentage } from "../../data-extensions-editor/shared/modeled-percentage" ;
1115import { LinkIconButton } from "../variant-analysis/LinkIconButton" ;
12- import { ViewTitle } from "../common" ;
1316import { DataExtensionEditorViewState } from "../../data-extensions-editor/shared/view-state" ;
1417import { ModeledMethodsList } from "./ModeledMethodsList" ;
1518import { 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+
3662const 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