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' );
+	}
+}