import apiFetch from '@wordpress/api-fetch'; const postTypes = { page: 'pages', post: 'posts' }; export default async ({ postId, postType }) => { // Get all nav menus that are presented in the post/page. const postNavigations = Array.from( window.document?.querySelectorAll('nav[data-extendify-menu-id]') ?? [], ) .map((nav) => nav.dataset.extendifyMenuId) .filter(Boolean); // get the data about those nav menus const navigations = postNavigations.length > 0 ? await apiFetch({ method: 'POST', path: '/extendify/v1/agent/site-navigation', data: { only: postNavigations.join(',') }, }).catch(() => []) : []; // we only to update the post url when the post is not a draft. if ( window.extAgentData?.context && window.extAgentData?.context?.postStatus !== 'draft' ) { // When a draft post/page becomes published, we need to update the URL // from `?page_id=123` format to the SEO-friendly permalink structure // to ensure a proper link in the menu. let postUrl = window.wp?.data ?.select('core') ?.getEntityRecord('postType', postType, postId)?.link; // fallback if the above fails if (!postUrl && postTypes[postType]) { const postInfo = await apiFetch({ path: `/wp/v2/${postTypes[postType]}/${postId}`, }).catch(console.error); postUrl = postInfo?.link; } if (postUrl && window.extAgentData?.context) { window.extAgentData.context.postUrl = postUrl; } } return { navigations }; };