Skip to content

Commit 28f8952

Browse files
committed
feat: add edit d3 to gutenberg
1 parent a138133 commit 28f8952

File tree

3 files changed

+72
-7
lines changed

3 files changed

+72
-7
lines changed

classes/Visualizer/ChartBuilder/src/AIBuilder/index.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -944,7 +944,20 @@ export default function AIBuilder( { onClose, initialChartId = null } ) {
944944
) }
945945

946946
{ shortcode && (
947-
<PillBtn onClick={ () => { onClose(); window.location.reload(); } } disabled={ isLocked } bg={ C.dark }>
947+
<PillBtn
948+
onClick={ () => {
949+
onClose();
950+
if ( typeof window.vizAIBuilderDoneCallback === 'function' ) {
951+
const cb = window.vizAIBuilderDoneCallback;
952+
window.vizAIBuilderDoneCallback = null;
953+
cb();
954+
} else {
955+
window.location.reload();
956+
}
957+
} }
958+
disabled={ isLocked }
959+
bg={ C.dark }
960+
>
948961
{ __( 'Done', 'visualizer' ) }
949962
</PillBtn>
950963
) }

classes/Visualizer/Gutenberg/Block.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,54 @@ public function enqueue_gutenberg_scripts() {
149149

150150
// Enqueue frontend and editor block styles
151151
wp_enqueue_style( 'visualizer-gutenberg-block', $stylePath, array( 'visualizer-datatables' ), $asset['version'] );
152+
153+
// Enqueue ChartBuilder (AI Builder) so the D3 edit modal is available in the block editor.
154+
$chart_builder_asset = VISUALIZER_ABSPATH . '/classes/Visualizer/ChartBuilder/build/index.asset.php';
155+
if ( file_exists( $chart_builder_asset ) && ! wp_script_is( 'visualizer-chart-builder', 'enqueued' ) ) {
156+
/**
157+
* Ignore missing build asset in source checkout.
158+
*
159+
* @phpstan-ignore-next-line
160+
*/
161+
$cb_asset = include $chart_builder_asset;
162+
wp_enqueue_script(
163+
'visualizer-chart-builder',
164+
VISUALIZER_ABSURL . 'classes/Visualizer/ChartBuilder/build/index.js',
165+
$cb_asset['dependencies'],
166+
$cb_asset['version'],
167+
true
168+
);
169+
wp_enqueue_style(
170+
'visualizer-chart-builder',
171+
VISUALIZER_ABSURL . 'classes/Visualizer/ChartBuilder/build/style-index.css',
172+
array(),
173+
$cb_asset['version']
174+
);
175+
$chart_builder_css = VISUALIZER_ABSPATH . '/classes/Visualizer/ChartBuilder/build/index.css';
176+
if ( file_exists( $chart_builder_css ) ) {
177+
wp_enqueue_style(
178+
'visualizer-chart-builder-runtime',
179+
VISUALIZER_ABSURL . 'classes/Visualizer/ChartBuilder/build/index.css',
180+
array( 'visualizer-chart-builder' ),
181+
$cb_asset['version']
182+
);
183+
}
184+
wp_localize_script(
185+
'visualizer-chart-builder',
186+
'vizAIBuilder',
187+
array(
188+
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
189+
'nonce' => wp_create_nonce( 'visualizer-ai-builder' ),
190+
'isPro' => Visualizer_Module::is_pro(),
191+
)
192+
);
193+
// Inject the mount point the ChartBuilder React app needs.
194+
wp_add_inline_script(
195+
'visualizer-chart-builder',
196+
'document.body.insertAdjacentHTML("beforeend","<div id=\"viz-chart-builder-root\"></div>");',
197+
'before'
198+
);
199+
}
152200
}
153201
/**
154202
* Hook server side rendering into render callback

classes/Visualizer/Gutenberg/src/Components/ChartSelect.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,18 @@ class ChartSelect extends Component {
156156
}
157157

158158
const openEditChart = ( chartId ) => {
159-
const baseURL = ( window.visualizerLocalize.chartEditUrl ) ? window.visualizerLocalize.chartEditUrl : '';
160159
if ( isD3 ) {
161-
if ( window.visualizerLocalize && window.visualizerLocalize.adminPage ) {
162-
window.open( window.visualizerLocalize.adminPage, '_blank' );
160+
// Set a callback the AI Builder will invoke instead of reloading the page.
161+
window.vizAIBuilderDoneCallback = async() => {
162+
await this.props.getChartData( chartId );
163+
};
164+
if ( typeof window.vizOpenAIBuilderEdit === 'function' ) {
165+
window.vizOpenAIBuilderEdit( chartId );
163166
}
164167
return;
165168
}
169+
170+
const baseURL = ( window.visualizerLocalize.chartEditUrl ) ? window.visualizerLocalize.chartEditUrl : '';
166171
let view = new visualizerMediaView.Chart(
167172
{
168173
action: `${baseURL}?action=visualizer-edit-chart&library=yes&chart=` + chartId
@@ -172,12 +177,11 @@ class ChartSelect extends Component {
172177
let result = await apiFetch({ path: `wp/v2/visualizer/${chartId}` });
173178
await this.props.editSettings( result['chart_data']['visualizer-settings']);
174179
await this.props.getChartData( chartId );
180+
view.close();
175181
};
176182
// eslint-disable-next-line camelcase
177183
window.send_to_editor = function() {
178-
updateChartState().then( () => {
179-
view.close();
180-
});
184+
updateChartState();
181185
};
182186

183187
view.open();

0 commit comments

Comments
 (0)