import { useCallback, useEffect } from 'react'; import { useQueryParams } from '@strapi/admin/strapi-admin'; const parseFolderIdFromQuery = (folder)=>{ if (!folder) { return null; } const id = Number(folder); return Number.isFinite(id) ? id : null; }; const useFolderNavigation = ()=>{ const [{ query }, setQuery] = useQueryParams(); const currentFolderId = parseFolderIdFromQuery(query?.folder); const navigateToFolder = (folder)=>{ setQuery({ folder: String(folder.id) }); }; /** * Move to the Media Library root by removing the `folder` query param. * `setQuery(_, 'remove')` deletes the keys present on the first argument * (value is ignored), so any other query state (filters, pagination, etc.) * is preserved. */ const navigateToRoot = useCallback(()=>{ setQuery({ folder: '' }, 'remove'); }, [ setQuery ]); // Malformed ?folder= values (e.g. abc) parse as null; strip the param from the URL. // Deleted/missing folders (404) are handled in AssetsPage — that needs a fetch. useEffect(()=>{ if (query?.folder && currentFolderId === null) { navigateToRoot(); } }, [ query?.folder, currentFolderId, navigateToRoot ]); /** * Convenience for the FolderTree sidebar: a single entry point that handles * both "go home" and "go to folder X" without forcing the caller to know * whether to call navigateToFolder or navigateToRoot. */ const navigateToFolderId = (folderId)=>{ if (folderId == null) { navigateToRoot(); } else { setQuery({ folder: String(folderId) }); } }; return { currentFolderId, navigateToFolder, navigateToRoot, navigateToFolderId }; }; export { useFolderNavigation }; //# sourceMappingURL=useFolderNavigation.mjs.map