@@ -35,6 +35,7 @@ class Charts extends Component {
3535 super ( ...arguments ) ;
3636
3737 this . loadMoreCharts = this . loadMoreCharts . bind ( this ) ;
38+ this . renderD3Charts = this . renderD3Charts . bind ( this ) ;
3839
3940 this . state = {
4041 charts : null ,
@@ -52,6 +53,12 @@ class Charts extends Component {
5253 this . setState ( { charts : result } ) ;
5354 }
5455
56+ componentDidUpdate ( prevProps , prevState ) {
57+ if ( prevState . charts !== this . state . charts ) {
58+ this . renderD3Charts ( this . state . charts ) ;
59+ }
60+ }
61+
5562 async loadMoreCharts ( ) {
5663 const offset = ( this . state . charts ) . length ;
5764 let chartsLoaded = this . state . chartsLoaded ;
@@ -72,6 +79,43 @@ class Charts extends Component {
7279 } ) ;
7380 }
7481
82+ isD3Chart ( chart ) {
83+ return chart && chart [ 'visualizer-chart-library' ] && 'd3' === chart [ 'visualizer-chart-library' ] . toLowerCase ( ) ;
84+ }
85+
86+ getD3ContainerId ( chartId ) {
87+ return `visualizer-d3-list-${ chartId } ` ;
88+ }
89+
90+ renderD3Charts ( charts ) {
91+ if ( ! charts || 'undefined' === typeof jQuery ) {
92+ return ;
93+ }
94+
95+ Object . keys ( charts ) . forEach ( ( i ) => {
96+ const data = formatDate ( charts [ i ] [ 'chart_data' ] ) ;
97+ if ( ! this . isD3Chart ( data ) ) {
98+ return ;
99+ }
100+
101+ const containerId = this . getD3ContainerId ( charts [ i ] . id ) ;
102+ const code = data [ 'visualizer-d3-code' ] || data . code || '' ;
103+ const payload = {
104+ id : containerId ,
105+ charts : {
106+ [ containerId ] : {
107+ library : 'd3' ,
108+ code,
109+ series : data [ 'visualizer-series' ] ,
110+ data : data [ 'visualizer-data' ]
111+ }
112+ }
113+ } ;
114+
115+ jQuery ( 'body' ) . trigger ( 'visualizer:render:chart:start' , payload ) ;
116+ } ) ;
117+ }
118+
75119 render ( ) {
76120
77121 let chartVersion = 'undefined' !== typeof google ? google . visualization . Version : 'current' ;
@@ -109,7 +153,9 @@ class Charts extends Component {
109153 title = `#${ charts [ i ] . id } ` ;
110154 }
111155
112- if ( 0 <= [ 'gauge' , 'tabular' , 'timeline' ] . indexOf ( data [ 'visualizer-chart-type' ] ) ) {
156+ const isD3 = this . isD3Chart ( data ) ;
157+
158+ if ( ! isD3 && 0 <= [ 'gauge' , 'tabular' , 'timeline' ] . indexOf ( data [ 'visualizer-chart-type' ] ) ) {
113159 if ( 'DataTable' === data [ 'visualizer-chart-library' ] ) {
114160 chart = data [ 'visualizer-chart-type' ] ;
115161 } else {
@@ -119,8 +165,10 @@ class Charts extends Component {
119165 }
120166 chart = startCase ( chart ) ;
121167 }
122- } else {
168+ } else if ( ! isD3 ) {
123169 chart = `${ startCase ( data [ 'visualizer-chart-type' ] ) } Chart` ;
170+ } else {
171+ chart = 'AI' ;
124172 }
125173
126174 if ( data [ 'visualizer-chart-library' ] ) {
@@ -140,7 +188,13 @@ class Charts extends Component {
140188 { title }
141189 </ div >
142190
143- { ( 'DataTable' === data [ 'visualizer-chart-library' ] ) ? (
191+ { isD3 ? (
192+ < div
193+ id = { this . getD3ContainerId ( charts [ i ] . id ) }
194+ className = "visualizer-d3-preview"
195+ style = { { height : '260px' } }
196+ />
197+ ) : ( 'DataTable' === data [ 'visualizer-chart-library' ] ) ? (
144198 < DataTable
145199 id = { charts [ i ] . id }
146200 rows = { data [ 'visualizer-data' ] }
0 commit comments