Skip to content

Commit 27dbde0

Browse files
fix: Fix AppLayoutToolbar breadcrumbs SSR glitch (take three) (#4123)
1 parent 4dcdb39 commit 27dbde0

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

src/app-layout/__tests__/skeleton.test.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import BreadcrumbGroup from '../../../lib/components/breadcrumb-group';
77
import { getFunnelKeySelector } from '../../../lib/components/internal/analytics/selectors';
88
import { describeEachAppLayout, renderComponent } from './utils';
99

10+
import testutilStyles from '../../../lib/components/app-layout/test-classes/styles.selectors.js';
1011
import skeletonStyles from '../../../lib/components/app-layout/visual-refresh-toolbar/skeleton/styles.selectors.js';
12+
import toolbarStyles from '../../../lib/components/app-layout/visual-refresh-toolbar/toolbar/styles.selectors.js';
1113

1214
let widgetMockEnabled = false;
1315
function createWidgetizedComponentMock(Implementation: React.ComponentType, Skeleton: React.ComponentType) {
@@ -64,7 +66,7 @@ describeEachAppLayout({ themes: ['refresh-toolbar'] }, () => {
6466
tools="test tools"
6567
/>
6668
);
67-
expect(wrapper.findToolbar()).toBeFalsy();
69+
expect(wrapper.findToolbar()).toBeTruthy(); // Needed for SSR
6870
expect(wrapper.findNavigation()).toBeFalsy();
6971
expect(wrapper.findBreadcrumbs()).toBeTruthy(); // Needed for SSR
7072
expect(wrapper.find(getFunnelKeySelector('funnel-name'))).toBeTruthy();
@@ -96,5 +98,13 @@ describeEachAppLayout({ themes: ['refresh-toolbar'] }, () => {
9698
rerender(<AppLayout navigationHide={true} toolsHide={true} />);
9799
expect(wrapper.findByClassName(skeletonStyles['toolbar-container'])).toBeFalsy();
98100
});
101+
102+
it('skeleton toolbar has correct classes for SSR compatibility', () => {
103+
const { wrapper } = renderComponent(<AppLayout breadcrumbs="test breadcrumbs" />);
104+
const toolbarContainer = wrapper.findByClassName(skeletonStyles['toolbar-container']);
105+
expect(toolbarContainer).toBeTruthy();
106+
expect(toolbarContainer!.getElement()).toHaveClass(toolbarStyles['universal-toolbar']);
107+
expect(toolbarContainer!.getElement()).toHaveClass(testutilStyles.toolbar);
108+
});
99109
});
100110
});

src/app-layout/visual-refresh-toolbar/skeleton/slots.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { BreadcrumbGroupImplementation } from '../../../breadcrumb-group/impleme
77
import { BreadcrumbGroupProps } from '../../../breadcrumb-group/interfaces';
88
import { BreadcrumbsSlotContext } from '../contexts';
99

10+
import testutilStyles from '../../test-classes/styles.css.js';
11+
import toolbarStyles from '../toolbar/styles.css.js';
1012
import styles from './styles.css.js';
1113

1214
interface ToolbarSlotProps {
@@ -18,7 +20,7 @@ interface ToolbarSlotProps {
1820
export const ToolbarSlot = React.forwardRef<HTMLElement, ToolbarSlotProps>(({ className, style, children }, ref) => (
1921
<section
2022
ref={ref as React.Ref<any>}
21-
className={clsx(styles['toolbar-container'], className)}
23+
className={clsx(styles['toolbar-container'], toolbarStyles['universal-toolbar'], testutilStyles.toolbar, className)}
2224
style={{
2325
insetBlockStart: style?.insetBlockStart ?? 0,
2426
...style,

src/app-layout/visual-refresh-toolbar/toolbar/index.tsx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,9 @@ export function AppLayoutToolbarImplementation({
148148
return (
149149
<ToolbarSlot
150150
ref={ref}
151-
className={clsx(
152-
styles['universal-toolbar'],
153-
aiDrawer?.trigger && styles['with-ai-drawer'],
154-
testutilStyles.toolbar,
155-
{
156-
[testutilStyles['mobile-bar']]: isMobile,
157-
}
158-
)}
151+
className={clsx(aiDrawer?.trigger && styles['with-ai-drawer'], {
152+
[testutilStyles['mobile-bar']]: isMobile,
153+
})}
159154
style={{
160155
insetBlockStart: verticalOffsets.toolbar,
161156
}}

0 commit comments

Comments
 (0)