Initial commit
diff --git a/includes/admin/class-wc-stripe-old-settings-upe-toggle-controller.php b/includes/admin/class-wc-stripe-old-settings-upe-toggle-controller.php
new file mode 100644
index 0000000..651ff25
--- /dev/null
+++ b/includes/admin/class-wc-stripe-old-settings-upe-toggle-controller.php
@@ -0,0 +1,78 @@
+<?php
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit;
+}
+
+/**
+ * Enqueues some JS to ensure that some needed UI elements for the old settings are available.
+ *
+ * @since 5.5.0
+ */
+class WC_Stripe_Old_Settings_UPE_Toggle_Controller {
+ protected $was_upe_checkout_enabled = null;
+
+ public function __construct() {
+ add_filter( 'pre_update_option_woocommerce_stripe_settings', [ $this, 'pre_options_save' ] );
+ add_action( 'update_option_woocommerce_stripe_settings', [ $this, 'maybe_enqueue_script' ] );
+ }
+
+ /**
+ * Stores whether UPE was enabled before saving the options.
+ *
+ * @param mixed $value
+ *
+ * @return mixed
+ */
+ public function pre_options_save( $value ) {
+ $this->was_upe_checkout_enabled = WC_Stripe_Feature_Flags::is_upe_checkout_enabled();
+
+ return $value;
+ }
+
+ /**
+ * Determines what to do after the options have been saved.
+ */
+ public function maybe_enqueue_script() {
+ $is_upe_checkout_enabled = WC_Stripe_Feature_Flags::is_upe_checkout_enabled();
+
+ if ( $this->was_upe_checkout_enabled !== $is_upe_checkout_enabled ) {
+ add_action( 'admin_enqueue_scripts', [ $this, 'upe_toggle_script' ] );
+ }
+ }
+
+ /**
+ * Enqueues the script to determine what to do once UPE has been toggled.
+ */
+ public function upe_toggle_script() {
+ // Webpack generates an assets file containing a dependencies array for our built JS file.
+ $script_asset_path = WC_STRIPE_PLUGIN_PATH . '/build/old_settings_upe_toggle.asset.php';
+ $script_asset = file_exists( $script_asset_path )
+ ? require $script_asset_path
+ : [
+ 'dependencies' => [],
+ 'version' => WC_STRIPE_VERSION,
+ ];
+
+ wp_register_script(
+ 'woocommerce_stripe_old_settings_upe_toggle',
+ plugins_url( 'build/old_settings_upe_toggle.js', WC_STRIPE_MAIN_FILE ),
+ $script_asset['dependencies'],
+ $script_asset['version'],
+ true
+ );
+ wp_localize_script(
+ 'woocommerce_stripe_old_settings_upe_toggle',
+ 'wc_stripe_old_settings_param',
+ [
+ 'was_upe_enabled' => $this->was_upe_checkout_enabled,
+ 'is_upe_enabled' => WC_Stripe_Feature_Flags::is_upe_checkout_enabled(),
+ ]
+ );
+ wp_set_script_translations(
+ 'woocommerce_stripe_old_settings_upe_toggle',
+ 'woocommerce-gateway-stripe'
+ );
+ wp_enqueue_script( 'woocommerce_stripe_old_settings_upe_toggle' );
+ }
+}