woocommerce/plugins/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/view-switcher/utils.ts

65 lines
1.2 KiB
TypeScript

/**
* External dependencies
*/
import { select } from '@wordpress/data';
/**
* Internal dependencies
*/
import type { View } from './types';
export const getView = (
viewName: string,
views: View[]
): View | undefined => {
return views.find( ( view ) => view.view === viewName );
};
const defaultView = {
views: [],
currentView: '',
viewClientId: '',
};
export const findParentBlockEditorViews = (
clientId: string,
maxDepth = 10,
currentDepth = 0
): {
views: View[];
currentView: string;
viewClientId: string;
} => {
const depth = currentDepth + 1;
if ( depth > maxDepth ) {
return defaultView;
}
const { getBlockAttributes, getBlockRootClientId } =
select( 'core/block-editor' );
const rootId = getBlockRootClientId( clientId );
if ( rootId === null || rootId === '' ) {
return defaultView;
}
const rootAttributes = getBlockAttributes( rootId );
if ( ! rootAttributes ) {
return defaultView;
}
if ( rootAttributes.editorViews !== undefined ) {
return {
views: rootAttributes.editorViews,
currentView:
rootAttributes.currentView ||
rootAttributes.editorViews[ 0 ].view,
viewClientId: rootId,
};
}
return findParentBlockEditorViews( rootId, maxDepth, depth );
};