feat: Add support for flyout menu mode in MegaMenu

- Introduced `MegaMenuMode` type and `normalizeMegaMenuMode` function to handle menu modes.
- Updated `MegaMenuApplicationCustomizer` to accept `menuMode` property.
- Enhanced `MegaMenuRenderer` to render flyout menus based on the selected mode.
- Created new HTML previews for both flyout and mega menu modes.
- Removed unused mock services and user custom action service interfaces.
This commit is contained in:
Torsten Brendgen
2026-07-20 20:37:32 +02:00
parent e75b11117f
commit bc61166267
27 changed files with 1320 additions and 1833 deletions
@@ -15,6 +15,7 @@ import { TaxonomyNavigationService } from '../../services/TaxonomyNavigationServ
import { MegaMenuRenderer } from './MegaMenuRenderer';
import { IMenuItem } from '../../services/IMenuItem';
import { debugError, debugLog, debugWarn } from '../../services/MegaMenuDebug';
import { MegaMenuMode, normalizeMegaMenuMode } from './MegaMenuMode';
import './MegaMenu.module.scss';
@@ -26,6 +27,7 @@ export interface IMegaMenuApplicationCustomizerProperties {
termSetId?: string;
cacheMinutes?: number;
debug?: boolean;
menuMode?: MegaMenuMode;
}
export default class MegaMenuApplicationCustomizer
@@ -40,7 +42,7 @@ export default class MegaMenuApplicationCustomizer
const debug: boolean = this._isDebugEnabled();
debugLog(debug, LOG_SOURCE, 'onInit started.', {
componentId: UserCustomActionMegaMenuId,
version: '2.0.1',
version: '2.1.0',
properties: this.properties || {},
pageUrl: window.location.href,
webUrl: this.context.pageContext.web.absoluteUrl,
@@ -92,7 +94,8 @@ export default class MegaMenuApplicationCustomizer
debugLog(debug, LOG_SOURCE, 'Starting MegaMenu rendering.', {
termSetIdentifier: termSetIdentifier,
cacheMinutes: this._getCacheMinutes()
cacheMinutes: this._getCacheMinutes(),
menuMode: this._getMenuMode()
});
this._renderMegaMenu(termSetIdentifier, debug);
} else {
@@ -127,7 +130,8 @@ export default class MegaMenuApplicationCustomizer
this._renderer = new MegaMenuRenderer(
menuItems,
debug
debug,
this._getMenuMode()
);
this._menuContainer = this._getOrCreateContainer('CustomHeader', this._topPlaceholder);
@@ -205,6 +209,10 @@ export default class MegaMenuApplicationCustomizer
return isFinite(value) ? Math.min(Math.max(Math.floor(value), 1), 1440) : 15;
}
private _getMenuMode(): MegaMenuMode {
return normalizeMegaMenuMode(this.properties && this.properties.menuMode);
}
private _renderStatus(message: string): void {
if (!this._topPlaceholder) {
return;