Fix non-matching items and post type matching (https://github.com/woocommerce/woocommerce-admin/pull/5593)
* Don't match menu items with a non-positive score * Match single post type page to post type menu item
This commit is contained in:
parent
7d32d6db0e
commit
cae0f33e38
|
@ -47,8 +47,10 @@ const Container = ( { menuItems } ) => {
|
||||||
|
|
||||||
useEffect( () => {
|
useEffect( () => {
|
||||||
const initialMatchedItem = getMatchingItem( menuItems );
|
const initialMatchedItem = getMatchingItem( menuItems );
|
||||||
setActiveItem( initialMatchedItem );
|
if ( initialMatchedItem ) {
|
||||||
setActiveLevel( initialMatchedItem.parent );
|
setActiveItem( initialMatchedItem );
|
||||||
|
setActiveLevel( initialMatchedItem.parent );
|
||||||
|
}
|
||||||
|
|
||||||
const removeListener = addHistoryListener( () => {
|
const removeListener = addHistoryListener( () => {
|
||||||
setTimeout( () => {
|
setTimeout( () => {
|
||||||
|
|
|
@ -69,9 +69,19 @@ export const getMatchScore = ( location, url ) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const urlParams = getParams( urlLocation );
|
const urlParams = getParams( urlLocation );
|
||||||
const locationParams = getParams( location );
|
|
||||||
let matchingParamCount = 0;
|
|
||||||
|
|
||||||
|
// Post type match.
|
||||||
|
if (
|
||||||
|
window.wcNavigation.postType === urlParams.post_type &&
|
||||||
|
urlPathname.indexOf( 'edit.php' ) >= 0 &&
|
||||||
|
origin === urlOrigin
|
||||||
|
) {
|
||||||
|
return Number.MAX_SAFE_INTEGER - 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add points for each matching param.
|
||||||
|
let matchingParamCount = 0;
|
||||||
|
const locationParams = getParams( location );
|
||||||
Object.keys( urlParams ).forEach( ( key ) => {
|
Object.keys( urlParams ).forEach( ( key ) => {
|
||||||
if ( urlParams[ key ] === locationParams[ key ] ) {
|
if ( urlParams[ key ] === locationParams[ key ] ) {
|
||||||
matchingParamCount++;
|
matchingParamCount++;
|
||||||
|
@ -139,11 +149,11 @@ export const getMatchingItem = ( items ) => {
|
||||||
window.location,
|
window.location,
|
||||||
getAdminLink( item.url )
|
getAdminLink( item.url )
|
||||||
);
|
);
|
||||||
if ( score >= highestMatch ) {
|
if ( score >= highestMatch && score > 0 ) {
|
||||||
matchedItem = item;
|
matchedItem = item;
|
||||||
highestMatch = score;
|
highestMatch = score;
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
return matchedItem ? matchedItem : null;
|
return matchedItem || null;
|
||||||
};
|
};
|
||||||
|
|
|
@ -538,6 +538,7 @@ class Menu {
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'menuItems' => self::get_prepared_menu_item_data(),
|
'menuItems' => self::get_prepared_menu_item_data(),
|
||||||
|
'postType' => isset( $_GET['post'] ) ? get_post_type( $_GET['post'] ) : null,
|
||||||
);
|
);
|
||||||
|
|
||||||
$paul = wp_add_inline_script( WC_ADMIN_APP, 'window.wcNavigation = ' . wp_json_encode( $data ), 'before' );
|
$paul = wp_add_inline_script( WC_ADMIN_APP, 'window.wcNavigation = ' . wp_json_encode( $data ), 'before' );
|
||||||
|
|
Loading…
Reference in New Issue