@@ -17,8 +17,21 @@ import { MethodRow } from "./MethodRow";
1717import { assertNever } from "../../pure/helpers-pure" ;
1818import { vscode } from "../vscode-api" ;
1919import { calculateModeledPercentage } from "./modeled" ;
20+ import { LinkIconButton } from "../variant-analysis/LinkIconButton" ;
21+ import { basename } from "../common/path" ;
22+ import { ViewTitle } from "../common" ;
2023
21- export const DataExtensionsEditorContainer = styled . div `
24+ const DataExtensionsEditorContainer = styled . div `
25+ margin-top: 1rem;
26+ ` ;
27+
28+ const DetailsContainer = styled . div `
29+ display: flex;
30+ gap: 1em;
31+ align-items: center;
32+ ` ;
33+
34+ const EditorContainer = styled . div `
2235 margin-top: 1rem;
2336` ;
2437
@@ -34,14 +47,20 @@ const ProgressBar = styled.div<ProgressBarProps>`
3447` ;
3548
3649type Props = {
50+ initialModelFilename ?: string ;
3751 initialExternalApiUsages ?: ExternalApiUsage [ ] ;
3852 initialModeledMethods ?: Record < string , ModeledMethod > ;
3953} ;
4054
4155export function DataExtensionsEditor ( {
56+ initialModelFilename,
4257 initialExternalApiUsages = [ ] ,
4358 initialModeledMethods = { } ,
4459} : Props ) : JSX . Element {
60+ const [ modelFilename , setModelFilename ] = useState < string | undefined > (
61+ initialModelFilename ,
62+ ) ;
63+
4564 const [ externalApiUsages , setExternalApiUsages ] = useState <
4665 ExternalApiUsage [ ]
4766 > ( initialExternalApiUsages ) ;
@@ -59,6 +78,9 @@ export function DataExtensionsEditor({
5978 if ( evt . origin === window . origin ) {
6079 const msg : ToDataExtensionsEditorMessage = evt . data ;
6180 switch ( msg . t ) {
81+ case "setDataExtensionEditorInitialData" :
82+ setModelFilename ( msg . modelFilename ) ;
83+ break ;
6284 case "setExternalApiUsages" :
6385 setExternalApiUsages ( msg . externalApiUsages ) ;
6486 break ;
@@ -128,6 +150,12 @@ export function DataExtensionsEditor({
128150 } ) ;
129151 } , [ ] ) ;
130152
153+ const onOpenModelFileClick = useCallback ( ( ) => {
154+ vscode . postMessage ( {
155+ t : "openModelFile" ,
156+ } ) ;
157+ } , [ ] ) ;
158+
131159 return (
132160 < DataExtensionsEditorContainer >
133161 { progress . maxStep > 0 && (
@@ -139,15 +167,19 @@ export function DataExtensionsEditor({
139167
140168 { externalApiUsages . length > 0 && (
141169 < >
142- < div >
143- < h3 > External API model stats</ h3 >
144- < ul >
145- < li > Modeled: { modeledPercentage . toFixed ( 2 ) } %</ li >
146- < li > Unmodeled: { unModeledPercentage . toFixed ( 2 ) } %</ li >
147- </ ul >
148- </ div >
149- < div >
150- < h3 > External API modelling</ h3 >
170+ < ViewTitle > Data extensions editor</ ViewTitle >
171+ < DetailsContainer >
172+ { modelFilename && (
173+ < LinkIconButton onClick = { onOpenModelFileClick } >
174+ < span slot = "start" className = "codicon codicon-file-code" > </ span >
175+ { basename ( modelFilename ) }
176+ </ LinkIconButton >
177+ ) }
178+ < div > { modeledPercentage . toFixed ( 2 ) } % modeled</ div >
179+ < div > { unModeledPercentage . toFixed ( 2 ) } % unmodeled</ div >
180+ </ DetailsContainer >
181+
182+ < EditorContainer >
151183 < VSCodeButton onClick = { onApplyClick } > Apply</ VSCodeButton >
152184
153185 < VSCodeButton onClick = { onGenerateClick } >
@@ -188,7 +220,7 @@ export function DataExtensionsEditor({
188220 />
189221 ) ) }
190222 </ VSCodeDataGrid >
191- </ div >
223+ </ EditorContainer >
192224 </ >
193225 ) }
194226 </ DataExtensionsEditorContainer >
0 commit comments