Skip to content

Commit 92e4a03

Browse files
fix(header-footer): honor identifier alternate header state
1 parent 9976013 commit 92e4a03

2 files changed

Lines changed: 53 additions & 2 deletions

File tree

packages/super-editor/src/editors/v1/core/presentation-editor/header-footer/HeaderFooterSessionManager.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,9 +1750,10 @@ export class HeaderFooterSessionManager {
17501750
const firstPageInSection = sectionFirstPageNumbers.get(sectionIndex);
17511751
const isFirstPageOfSection = firstPageInSection === pageNumber;
17521752

1753-
// Check for alternateHeaders in converter
1753+
// Check for alternateHeaders in converter or the multi-section identifier.
17541754
const converter = (this.#options.editor as EditorWithConverter).converter;
1755-
const hasAlternateHeaders = converter?.pageStyles?.alternateHeaders === true;
1755+
const hasAlternateHeaders =
1756+
this.#multiSectionIdentifier?.alternateHeaders === true || converter?.pageStyles?.alternateHeaders === true;
17561757

17571758
// Only use 'first' variant when titlePg is enabled (w:titlePg element in OOXML).
17581759
// Without titlePg, even the first page of a section uses 'default'.

packages/super-editor/src/editors/v1/core/presentation-editor/tests/HeaderFooterSessionManager.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,6 +1503,56 @@ describe('HeaderFooterSessionManager', () => {
15031503
expect(manager.footerRegions.get(0)!.sectionType).toBe('even');
15041504
});
15051505

1506+
it('uses multi-section alternateHeaders state when inferring fallback region variants', () => {
1507+
manager = new HeaderFooterSessionManager({
1508+
painterHost,
1509+
visibleHost,
1510+
selectionOverlay,
1511+
editor: {
1512+
...createMainEditorStub(),
1513+
converter: { pageStyles: { alternateHeaders: false } },
1514+
} as unknown as Editor,
1515+
defaultPageSize: { w: 612, h: 792 },
1516+
defaultMargins: { top: 72, right: 72, bottom: 72, left: 72, header: 36, footer: 36 },
1517+
});
1518+
manager.setDependencies({
1519+
getLayoutOptions: vi.fn(() => ({})),
1520+
getPageElement: vi.fn(() => null),
1521+
scrollPageIntoView: vi.fn(),
1522+
waitForPageMount: vi.fn(async () => true),
1523+
convertPageLocalToOverlayCoords: vi.fn(() => ({ x: 0, y: 0 })),
1524+
isViewLocked: vi.fn(() => false),
1525+
getBodyPageHeight: vi.fn(() => 800),
1526+
notifyInputBridgeTargetChanged: vi.fn(),
1527+
scheduleRerender: vi.fn(),
1528+
setPendingDocChange: vi.fn(),
1529+
getBodyPageCount: vi.fn(() => 1),
1530+
});
1531+
manager.setMultiSectionIdentifier(
1532+
buildMultiSectionIdentifier(
1533+
[
1534+
{
1535+
sectionIndex: 0,
1536+
titlePg: false,
1537+
headerRefs: { default: 'rId-default', even: 'rId-even' },
1538+
footerRefs: { default: 'rId-default-footer', even: 'rId-even-footer' },
1539+
},
1540+
],
1541+
{ alternateHeaders: true },
1542+
),
1543+
);
1544+
1545+
manager.rebuildRegions({
1546+
version: 1,
1547+
flowMode: 'paginated',
1548+
pageGap: 0,
1549+
pages: [makePage({ number: 1, displayNumber: 2, height: 792 })],
1550+
});
1551+
1552+
expect(manager.headerRegions.get(0)!.sectionType).toBe('even');
1553+
expect(manager.footerRegions.get(0)!.sectionType).toBe('even');
1554+
});
1555+
15061556
it('uses section titlePg state when inferring fallback region variants', () => {
15071557
manager = new HeaderFooterSessionManager({
15081558
painterHost,

0 commit comments

Comments
 (0)