fix(next): active nav item not clickable in edit view (#11457)
This fixes an issue where the active collection nav item was non-clickable inside documents. Now, it remains clickable when viewing a document, allowing users to return to the list view from the nav items in the sidebar. The active state indicator still appears in both cases.
This commit is contained in:
@@ -44,17 +44,19 @@ export const DefaultNavClient: React.FC<{
|
|||||||
id = `nav-global-${slug}`
|
id = `nav-global-${slug}`
|
||||||
}
|
}
|
||||||
|
|
||||||
const activeCollection =
|
const isActive = pathname.startsWith(href)
|
||||||
pathname.startsWith(href) && ['/', undefined].includes(pathname[href.length])
|
|
||||||
|
|
||||||
const Label = (
|
const Label = (
|
||||||
|
<>
|
||||||
|
{isActive && <div className={`${baseClass}__link-indicator`} />}
|
||||||
<span className={`${baseClass}__link-label`}>{getTranslation(label, i18n)}</span>
|
<span className={`${baseClass}__link-label`}>{getTranslation(label, i18n)}</span>
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
|
|
||||||
if (activeCollection) {
|
// If the URL matches the link exactly
|
||||||
|
if (pathname === href) {
|
||||||
return (
|
return (
|
||||||
<div className={`${baseClass}__link active`} id={id} key={i}>
|
<div className={`${baseClass}__link`} id={id} key={i}>
|
||||||
<div className={`${baseClass}__link-indicator`} />
|
|
||||||
{Label}
|
{Label}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -121,6 +121,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__link:has(.nav__link-indicator) {
|
||||||
|
font-weight: 600;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
&__link-indicator {
|
&__link-indicator {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: block;
|
display: block;
|
||||||
|
|||||||
@@ -409,12 +409,21 @@ describe('General', () => {
|
|||||||
test('should disable active nav item', async () => {
|
test('should disable active nav item', async () => {
|
||||||
await page.goto(postsUrl.list)
|
await page.goto(postsUrl.list)
|
||||||
await openNav(page)
|
await openNav(page)
|
||||||
const activeItem = page.locator('.nav .nav__link.active')
|
const activeItem = page.locator('.nav .nav__link:has(.nav__link-indicator)')
|
||||||
await expect(activeItem).toBeVisible()
|
await expect(activeItem).toBeVisible()
|
||||||
const tagName = await activeItem.evaluate((el) => el.tagName.toLowerCase())
|
const tagName = await activeItem.evaluate((el) => el.tagName.toLowerCase())
|
||||||
expect(tagName).toBe('div')
|
expect(tagName).toBe('div')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should keep active nav item enabled in the edit view', async () => {
|
||||||
|
await page.goto(postsUrl.create)
|
||||||
|
await openNav(page)
|
||||||
|
const activeItem = page.locator('.nav .nav__link:has(.nav__link-indicator)')
|
||||||
|
await expect(activeItem).toBeVisible()
|
||||||
|
const tagName = await activeItem.evaluate((el) => el.tagName.toLowerCase())
|
||||||
|
expect(tagName).toBe('a')
|
||||||
|
})
|
||||||
|
|
||||||
test('breadcrumbs — should navigate from list to dashboard', async () => {
|
test('breadcrumbs — should navigate from list to dashboard', async () => {
|
||||||
await page.goto(postsUrl.list)
|
await page.goto(postsUrl.list)
|
||||||
await page.locator(`.step-nav a[href="${adminRoutes.routes.admin}"]`).click()
|
await page.locator(`.step-nav a[href="${adminRoutes.routes.admin}"]`).click()
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ export interface Config {
|
|||||||
auth: {
|
auth: {
|
||||||
users: UserAuthOperations;
|
users: UserAuthOperations;
|
||||||
};
|
};
|
||||||
blocks: {};
|
|
||||||
collections: {
|
collections: {
|
||||||
uploads: Upload;
|
uploads: Upload;
|
||||||
posts: Post;
|
posts: Post;
|
||||||
|
|||||||
Reference in New Issue
Block a user