From 1454028703e37833eff4415b7559efc3538ac528 Mon Sep 17 00:00:00 2001 From: "Kyle B. Johnson" Date: Fri, 7 Feb 2025 11:43:34 -0500 Subject: [PATCH] feature: Customize Campaign Page editor back button --- .../EnqueueCampaignPageEditorAssets.php | 48 +++++++++++++++++++ src/Campaigns/ServiceProvider.php | 3 ++ .../editor/campaign-page-post-type-editor.tsx | 25 ++++++++++ wordpress-scripts-webpack.config.js | 1 + 4 files changed, 77 insertions(+) create mode 100644 src/Campaigns/Actions/EnqueueCampaignPageEditorAssets.php create mode 100644 src/Campaigns/resources/editor/campaign-page-post-type-editor.tsx diff --git a/src/Campaigns/Actions/EnqueueCampaignPageEditorAssets.php b/src/Campaigns/Actions/EnqueueCampaignPageEditorAssets.php new file mode 100644 index 0000000000..db30546372 --- /dev/null +++ b/src/Campaigns/Actions/EnqueueCampaignPageEditorAssets.php @@ -0,0 +1,48 @@ +post_type !== 'give_campaign_page') { + return; + } + + $campaignPage = CampaignPage::find($currentPost->ID); + $scriptAsset = ScriptAsset::get(GIVE_PLUGIN_DIR . 'build/campaignPagePostTypeEditor.asset.php'); + $campaignDetailsURL = add_query_arg([ + 'post_type' => 'give_forms', + 'page' => 'give-campaigns', + 'id' => $campaignPage->campaignId, + ], admin_url('edit.php')); + + wp_enqueue_script( + 'givewp-campaign-page-post-type-editor', + GIVE_PLUGIN_URL . 'build/campaignPagePostTypeEditor.js', + $scriptAsset['dependencies'], + $scriptAsset['version'], + true + ); + + wp_localize_script( + 'givewp-campaign-page-post-type-editor', + 'giveCampaignPage', + [ + 'campaignDetailsURL' => $campaignDetailsURL, + ] + ); + } +} diff --git a/src/Campaigns/ServiceProvider.php b/src/Campaigns/ServiceProvider.php index c6c7f6282c..e0eb6bca40 100644 --- a/src/Campaigns/ServiceProvider.php +++ b/src/Campaigns/ServiceProvider.php @@ -14,9 +14,11 @@ use Give\Campaigns\Migrations\RevenueTable\AssociateDonationsToCampaign; use Give\Campaigns\Migrations\Tables\CreateCampaignFormsTable; use Give\Campaigns\Migrations\Tables\CreateCampaignsTable; +use Give\Campaigns\Models\CampaignPage; use Give\Campaigns\Repositories\CampaignRepository; use Give\DonationForms\V2\DonationFormsAdminPage; use Give\Framework\Migrations\MigrationsRegister; +use Give\Framework\Support\Facades\Scripts\ScriptAsset; use Give\Helpers\Hooks; use Give\ServiceProviders\ServiceProvider as ServiceProviderInterface; @@ -113,6 +115,7 @@ private function registerMenus() private function setupCampaignPages() { Hooks::addAction('init', Actions\RegisterCampaignPagePostType::class); + Hooks::addAction('enqueue_block_editor_assets', Actions\EnqueueCampaignPageEditorAssets::class); Hooks::addAction('admin_action_edit_campaign_page', Actions\EditCampaignPageRedirect::class); } diff --git a/src/Campaigns/resources/editor/campaign-page-post-type-editor.tsx b/src/Campaigns/resources/editor/campaign-page-post-type-editor.tsx new file mode 100644 index 0000000000..38bb666229 --- /dev/null +++ b/src/Campaigns/resources/editor/campaign-page-post-type-editor.tsx @@ -0,0 +1,25 @@ +import { close } from '@wordpress/icons'; +import { registerPlugin } from '@wordpress/plugins'; +import { + __experimentalFullscreenModeClose as FullscreenModeClose, + __experimentalMainDashboardButton as MainDashboardButton, + // @ts-ignore +} from '@wordpress/edit-post'; + +declare const window: { + giveCampaignPage: { + campaignDetailsURL: string; + }; +} & Window; + +registerPlugin( 'campaign-page-editor-back-button', { + render: () => ( + + + + ) +} ); diff --git a/wordpress-scripts-webpack.config.js b/wordpress-scripts-webpack.config.js index 1e4e4c3b1a..a7b17c7ee7 100644 --- a/wordpress-scripts-webpack.config.js +++ b/wordpress-scripts-webpack.config.js @@ -66,6 +66,7 @@ module.exports = { campaignBlocks: srcPath('Campaigns/Blocks/blocks.ts'), campaignDonationsBlockApp: srcPath('Campaigns/Blocks/CampaignDonations/app.tsx'), campaignDonorsBlockApp: srcPath('Campaigns/Blocks/CampaignDonors/app.tsx'), + campaignPagePostTypeEditor: srcPath('Campaigns/resources/editor/campaign-page-post-type-editor.tsx'), }, };