From 052d5efe3bcae9db22cd2685ecb59af49c32a29d Mon Sep 17 00:00:00 2001 From: Alquen Antonio Sarmiento Date: Tue, 19 Nov 2024 10:54:28 +0800 Subject: [PATCH] feat: migration from from disabled blocks array to block states object --- src/disabled-blocks.js | 2 +- src/editor-settings.php | 30 ++++++++++++++++++++++++++++-- src/util/blocks.js | 12 ++++++------ src/welcome/admin.js | 14 +++++++------- 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/disabled-blocks.js b/src/disabled-blocks.js index 9b32297ac..0e4ff1865 100644 --- a/src/disabled-blocks.js +++ b/src/disabled-blocks.js @@ -41,7 +41,7 @@ const getVariationsToRemove = ( disabledBlocks, blockName ) => { } const applySettingsToMeta = metadata => { - const disabledBlocks = settings.stackable_disabled_blocks || {} // eslint-disable-line camelcase + const disabledBlocks = settings.stackable_block_states || {} // eslint-disable-line camelcase let inserter = true // If the block is hidden, set the inserter to false. diff --git a/src/editor-settings.php b/src/editor-settings.php index fd89194af..dc9b5dff7 100644 --- a/src/editor-settings.php +++ b/src/editor-settings.php @@ -32,7 +32,7 @@ function __construct() { public function register_settings() { register_setting( 'stackable_editor_settings', - 'stackable_disabled_blocks', + 'stackable_block_states', // Use an object to store the block names as keys and the value that represents if disabled or hidden. // Enabled blocks are not stored in the object to save memory. array( @@ -255,7 +255,7 @@ public function sanitize_array_setting( $input ) { */ public function add_settings( $settings ) { $settings['stackable_google_maps_api_key'] = get_option( 'stackable_google_maps_api_key' ); - $settings['stackable_disabled_blocks'] = get_option( 'stackable_disabled_blocks' ); + $settings['stackable_block_states'] = get_option( 'stackable_block_states' ); $settings['stackable_enable_design_library'] = get_option( 'stackable_enable_design_library' ); $settings['stackable_optimize_inline_css'] = get_option( 'stackable_optimize_inline_css' ); $settings['stackable_auto_collapse_panels'] = get_option( 'stackable_auto_collapse_panels' ); @@ -298,6 +298,32 @@ public function add_nested_block_width( $css ) { return $css; } + + /** + * Migrate from disabled blocks array to block states object. + * + * @return void + */ + function migrate_block_states() { + $old_setting_name = 'stackable_disabled_blocks'; + $new_setting_name = 'stackable_block_states'; + + // Check if the old setting exists and the new setting is empty. + if ( get_option( $old_setting_name ) !== false && empty( get_option( $new_setting_name, [] ) ) ) { + $old_disabled_blocks = get_option( $old_setting_name, [] ); + $new_block_states = []; + + if ( is_array( $old_disabled_blocks ) ) { + foreach ( $old_disabled_blocks as $block_name ) { + // In the block_states, disabled is 1 and hidden is 2 + $new_block_states[ $block_name ] = 1; + } + } + + update_option( $new_setting_name, $new_block_states ); + delete_option( $old_setting_name ); + } + } } new Stackable_Editor_Settings(); diff --git a/src/util/blocks.js b/src/util/blocks.js index 8dcbb4e76..4dc5e4dca 100644 --- a/src/util/blocks.js +++ b/src/util/blocks.js @@ -498,9 +498,9 @@ export const addStackableBlockCategory = () => { */ export const registerBlockType = ( name, _settings ) => { // Do not register the block if the block is disabled. - if ( ( BLOCK_DEPENDENCIES[ name ] in stackableSettings.stackable_disabled_blocks && - stackableSettings.stackable_disabled_blocks[ BLOCK_DEPENDENCIES[ name ] ] === BLOCK_STATE.DISABLED ) || - stackableSettings.stackable_disabled_blocks[ name ] === BLOCK_STATE.DISABLED + if ( ( BLOCK_DEPENDENCIES[ name ] in stackableSettings.stackable_block_states && + stackableSettings.stackable_block_states[ BLOCK_DEPENDENCIES[ name ] ] === BLOCK_STATE.DISABLED ) || + stackableSettings.stackable_block_states[ name ] === BLOCK_STATE.DISABLED ) { return } @@ -544,7 +544,7 @@ export const registerBlockType = ( name, _settings ) => { * @return {Array} The resulting block definition */ export const substituteCoreIfDisabled = ( blockName, blockAttributes, children ) => { - const disabled_blocks = stackableSettings.stackable_disabled_blocks || {} // eslint-disable-line camelcase + const disabled_blocks = stackableSettings.stackable_block_states || {} // eslint-disable-line camelcase if ( blockName === 'stackable/text' ) { if ( blockName in disabled_blocks && disabled_blocks[ blockName ] === BLOCK_STATE.DISABLED ) { // eslint-disable-line camelcase @@ -618,7 +618,7 @@ export const substituteCoreIfDisabled = ( blockName, blockAttributes, children ) * @return {Array} The resulting block definition */ export const substituteIfDisabled = ( blockNames, originalBlockDefinition, substituteBlockDefinition ) => { - const disabled_blocks = stackableSettings.stackable_disabled_blocks || {} // eslint-disable-line camelcase + const disabled_blocks = stackableSettings.stackable_block_states || {} // eslint-disable-line camelcase for ( const blockName of blockNames ) { if ( blockName in disabled_blocks && disabled_blocks[ blockName ] === BLOCK_STATE.DISABLED ) { // eslint-disable-line camelcase @@ -638,7 +638,7 @@ export const substituteIfDisabled = ( blockNames, originalBlockDefinition, subst * @return {Array} The resulting block tree definition */ export const removeChildIfDisabled = ( blockName, blockTree ) => { - const disabled_blocks = stackableSettings.stackable_disabled_blocks || {} // eslint-disable-line camelcase + const disabled_blocks = stackableSettings.stackable_block_states || {} // eslint-disable-line camelcase if ( blockName in disabled_blocks && disabled_blocks[ blockName ] === BLOCK_STATE.DISABLED ) { // eslint-disable-line camelcase return blockTree.filter( innerBlock => innerBlock[ 0 ] !== blockName ) diff --git a/src/welcome/admin.js b/src/welcome/admin.js index 8f38b4a6f..9f191fa50 100644 --- a/src/welcome/admin.js +++ b/src/welcome/admin.js @@ -790,7 +790,7 @@ const Blocks = props => { const DERIVED_BLOCKS = getAllBlocks() const groups = filteredSearchTree.find( tab => tab.id === 'blocks' ).groups - const disabledBlocks = settings.stackable_disabled_blocks ?? {} // eslint-disable-line camelcase + const disabledBlocks = settings.stackable_block_states ?? {} // eslint-disable-line camelcase const [ isDisabledDialogOpen, setIsDisabledDialogOpen ] = useState( false ) const [ isEnabledDialogOpen, setIsEnabledDialogOpen ] = useState( false ) @@ -798,7 +798,7 @@ const Blocks = props => { const [ currentToggleBlockList, setCurrentToggleBlockList ] = useState( [] ) const enableAllBlocks = () => { - handleSettingsChange( { stackable_disabled_blocks: {} } ) // eslint-disable-line camelcase + handleSettingsChange( { stackable_block_states: {} } ) // eslint-disable-line camelcase } const disableAllBlocks = () => { @@ -808,7 +808,7 @@ const Blocks = props => { newDisabledBlocks[ block.name ] = BLOCK_STATE.DISABLED } ) } ) - handleSettingsChange( { stackable_disabled_blocks: newDisabledBlocks } ) // eslint-disable-line camelcase + handleSettingsChange( { stackable_block_states: newDisabledBlocks } ) // eslint-disable-line camelcase } const hideAllBlocks = () => { @@ -818,7 +818,7 @@ const Blocks = props => { newDisabledBlocks[ block.name ] = BLOCK_STATE.HIDDEN } ) } ) - handleSettingsChange( { stackable_disabled_blocks: newDisabledBlocks } ) // eslint-disable-line camelcase + handleSettingsChange( { stackable_block_states: newDisabledBlocks } ) // eslint-disable-line camelcase } const toggleBlock = ( name, value ) => { @@ -849,7 +849,7 @@ const Blocks = props => { } else { newDisabledBlocks = { ...disabledBlocks, [ name ]: valueInt } } - handleSettingsChange( { stackable_disabled_blocks: newDisabledBlocks } ) // eslint-disable-line camelcase + handleSettingsChange( { stackable_block_states: newDisabledBlocks } ) // eslint-disable-line camelcase } const handleDisableDialogConfirm = () => { @@ -858,7 +858,7 @@ const Blocks = props => { currentToggleBlockList.forEach( block => { newDisabledBlocks[ block ] = BLOCK_STATE.DISABLED } ) - handleSettingsChange( { stackable_disabled_blocks: newDisabledBlocks } ) // eslint-disable-line camelcase + handleSettingsChange( { stackable_block_states: newDisabledBlocks } ) // eslint-disable-line camelcase } const handleEnableDialogConfirm = () => { @@ -868,7 +868,7 @@ const Blocks = props => { currentToggleBlockList.forEach( block => { delete newDisabledBlocks[ block ] } ) - handleSettingsChange( { stackable_disabled_blocks: newDisabledBlocks } ) // eslint-disable-line camelcase + handleSettingsChange( { stackable_block_states: newDisabledBlocks } ) // eslint-disable-line camelcase } return (