11import React from "react" ;
22import { observer } from "mobx-react-lite" ;
3- import pako from "pako" ;
4- import { PureRenderer } from '@kanaries/graphic-walker' ;
3+ import { PureRenderer , IRow } from '@kanaries/graphic-walker' ;
54import type { IDarkMode , IThemeKey } from '@kanaries/graphic-walker/interfaces' ;
65
76import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
@@ -13,45 +12,12 @@ interface IPreviewProps {
1312 dark : IDarkMode ;
1413 charts : {
1514 visSpec : any ;
16- data : string ;
15+ data : IRow [ ] ;
1716 } [ ] ;
1817}
1918
20- const getInflateData = ( dataStr : string ) => {
21- let binaryString = atob ( dataStr ) ;
22- let compressed = new Uint8Array ( binaryString . length ) ;
23- for ( let i = 0 ; i < binaryString . length ; i ++ ) {
24- compressed [ i ] = binaryString . charCodeAt ( i ) ;
25- }
26- const inflated = pako . inflate ( compressed , { to : "string" } ) ;
27-
28- const datas = JSON . parse ( inflated ) ;
29- const keys = Object . keys ( datas ) ;
30- if ( keys . length === 0 ) {
31- return [ ] ;
32- }
33- const count = datas [ keys [ 0 ] ] . length ;
34-
35- const result = [ ] as any [ ] ;
36- for ( let i = 0 ; i < count ; i ++ ) {
37- let item = { } ;
38- keys . forEach ( key => {
39- item [ key ] = datas [ key ] [ i ]
40- } )
41- result . push ( item ) ;
42- }
43-
44- return result ;
45- }
46-
4719const Preview : React . FC < IPreviewProps > = observer ( ( props ) => {
4820 const { charts, themeKey } = props ;
49- const formatedCharts = charts . map ( ( chart ) => {
50- return {
51- ...chart ,
52- data : getInflateData ( chart . data )
53- }
54- } )
5521
5622 return (
5723 < React . StrictMode >
@@ -60,12 +26,12 @@ const Preview: React.FC<IPreviewProps> = observer((props) => {
6026 < Tabs defaultValue = "0" className = "w-full" >
6127 < div className = "overflow-x-auto max-w-full" >
6228 < TabsList >
63- { formatedCharts . map ( ( chart , index ) => {
29+ { charts . map ( ( chart , index ) => {
6430 return < TabsTrigger key = { index } value = { index . toString ( ) } > { chart . visSpec . name } </ TabsTrigger >
6531 } ) }
6632 </ TabsList >
6733 </ div >
68- { formatedCharts . map ( ( chart , index ) => {
34+ { charts . map ( ( chart , index ) => {
6935 return < TabsContent key = { index } value = { index . toString ( ) } >
7036 < PureRenderer
7137 vizThemeConfig = { themeKey as IThemeKey }
@@ -89,13 +55,12 @@ interface IChartPreviewProps {
8955 themeKey : string ;
9056 dark : IDarkMode ;
9157 visSpec : any ;
92- data : string ;
58+ data : IRow [ ] ;
9359 title : string ;
9460 desc : string ;
9561}
9662
9763const ChartPreview : React . FC < IChartPreviewProps > = observer ( ( props ) => {
98- const formatedData = getInflateData ( props . data ) ;
9964
10065 return (
10166 < React . StrictMode >
@@ -109,7 +74,7 @@ const ChartPreview: React.FC<IChartPreviewProps> = observer((props) => {
10974 visualLayout = { props . visSpec . layout }
11075 visualState = { props . visSpec . encodings }
11176 type = 'remote'
112- computation = { async ( _ ) => { return formatedData } }
77+ computation = { async ( _ ) => { return props . data } }
11378 appearance = { props . dark as IDarkMode }
11479 />
11580 </ div >
0 commit comments