11import * as React from "react" ;
22import { useCallback , useEffect , useMemo , useState } from "react" ;
3- import { DecodedBqrsChunk } from "../../pure/bqrs-cli-types" ;
43import {
54 ShowProgressMessage ,
65 ToDataExtensionsEditorMessage ,
@@ -11,10 +10,7 @@ import {
1110 VSCodeDataGridRow ,
1211} from "@vscode/webview-ui-toolkit/react" ;
1312import styled from "styled-components" ;
14- import {
15- Call ,
16- ExternalApiUsage ,
17- } from "../../data-extensions-editor/external-api-usage" ;
13+ import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage" ;
1814import { ModeledMethod } from "../../data-extensions-editor/modeled-method" ;
1915import { MethodRow } from "./MethodRow" ;
2016import { assertNever } from "../../pure/helpers-pure" ;
@@ -35,9 +31,9 @@ const ProgressBar = styled.div<ProgressBarProps>`
3531` ;
3632
3733export function DataExtensionsEditor ( ) : JSX . Element {
38- const [ results , setResults ] = useState < DecodedBqrsChunk | undefined > (
39- undefined ,
40- ) ;
34+ const [ externalApiUsages , setExternalApiUsages ] = useState <
35+ ExternalApiUsage [ ]
36+ > ( [ ] ) ;
4137 const [ modeledMethods , setModeledMethods ] = useState <
4238 Record < string , ModeledMethod >
4339 > ( { } ) ;
@@ -52,8 +48,8 @@ export function DataExtensionsEditor(): JSX.Element {
5248 if ( evt . origin === window . origin ) {
5349 const msg : ToDataExtensionsEditorMessage = evt . data ;
5450 switch ( msg . t ) {
55- case "setExternalApiRepoResults " :
56- setResults ( msg . results ) ;
51+ case "setExternalApiUsages " :
52+ setExternalApiUsages ( msg . externalApiUsages ) ;
5753 break ;
5854 case "showProgress" :
5955 setProgress ( msg ) ;
@@ -74,63 +70,21 @@ export function DataExtensionsEditor(): JSX.Element {
7470 } ;
7571 } , [ ] ) ;
7672
77- const methods = useMemo ( ( ) => {
78- const methodsByApiName = new Map < string , ExternalApiUsage > ( ) ;
79-
80- results ?. tuples . forEach ( ( tuple ) => {
81- const signature = tuple [ 0 ] as string ;
82- const supported = tuple [ 1 ] as boolean ;
83- const usage = tuple [ 2 ] as Call ;
84-
85- const [ packageWithType , methodDeclaration ] = signature . split ( "#" ) ;
86-
87- const packageName = packageWithType . substring (
88- 0 ,
89- packageWithType . lastIndexOf ( "." ) ,
90- ) ;
91- const typeName = packageWithType . substring (
92- packageWithType . lastIndexOf ( "." ) + 1 ,
93- ) ;
94-
95- const methodName = methodDeclaration . substring (
96- 0 ,
97- methodDeclaration . indexOf ( "(" ) ,
98- ) ;
99- const methodParameters = methodDeclaration . substring (
100- methodDeclaration . indexOf ( "(" ) ,
101- ) ;
102-
103- if ( ! methodsByApiName . has ( signature ) ) {
104- methodsByApiName . set ( signature , {
105- signature,
106- packageName,
107- typeName,
108- methodName,
109- methodParameters,
110- supported,
111- usages : [ ] ,
112- } ) ;
113- }
114-
115- const method = methodsByApiName . get ( signature ) ! ;
116- method . usages . push ( usage ) ;
117- } ) ;
118-
119- const externalApiUsages = Array . from ( methodsByApiName . values ( ) ) ;
120- externalApiUsages . sort ( ( a , b ) => {
121- // Sort by number of usages descending
122- return b . usages . length - a . usages . length ;
123- } ) ;
124- return externalApiUsages ;
125- } , [ results ] ) ;
126-
12773 const supportedPercentage = useMemo ( ( ) => {
128- return ( methods . filter ( ( m ) => m . supported ) . length / methods . length ) * 100 ;
129- } , [ methods ] ) ;
74+ return (
75+ ( externalApiUsages . filter ( ( m ) => m . supported ) . length /
76+ externalApiUsages . length ) *
77+ 100
78+ ) ;
79+ } , [ externalApiUsages ] ) ;
13080
13181 const unsupportedPercentage = useMemo ( ( ) => {
132- return ( methods . filter ( ( m ) => ! m . supported ) . length / methods . length ) * 100 ;
133- } , [ methods ] ) ;
82+ return (
83+ ( externalApiUsages . filter ( ( m ) => ! m . supported ) . length /
84+ externalApiUsages . length ) *
85+ 100
86+ ) ;
87+ } , [ externalApiUsages ] ) ;
13488
13589 const onChange = useCallback (
13690 ( method : ExternalApiUsage , model : ModeledMethod ) => {
@@ -151,7 +105,7 @@ export function DataExtensionsEditor(): JSX.Element {
151105 </ p >
152106 ) }
153107
154- { methods . length > 0 && (
108+ { externalApiUsages . length > 0 && (
155109 < >
156110 < div >
157111 < h3 > External API support stats</ h3 >
@@ -186,11 +140,11 @@ export function DataExtensionsEditor(): JSX.Element {
186140 Kind
187141 </ VSCodeDataGridCell >
188142 </ VSCodeDataGridRow >
189- { methods . map ( ( method ) => (
143+ { externalApiUsages . map ( ( externalApiUsage ) => (
190144 < MethodRow
191- key = { method . signature }
192- method = { method }
193- model = { modeledMethods [ method . signature ] }
145+ key = { externalApiUsage . signature }
146+ method = { externalApiUsage }
147+ model = { modeledMethods [ externalApiUsage . signature ] }
194148 onChange = { onChange }
195149 />
196150 ) ) }
0 commit comments