import React from 'react'; import {AbstractCoreComponent, CoreComponentModel, CoreComponentState} from "../../../AbstractCoreComponent"; import {isItemRouted, RoutedCoreComponentModel, RoutedModel} from "../../../routing/RoutedCoreComponent"; import {RoutedLink} from "../../../routing/RoutedLink"; export interface NavigationV1Item extends RoutedModel{ level: number, active: boolean, title: string, url: string, lastModified: number, description?: string, path: string, children?: NavigationV1Item[] } export interface NavigationV1Model extends RoutedCoreComponentModel{ items:NavigationV1Item[] accessibilityLabel?: string } export function NavigationV1IsEmptyFn(props:NavigationV1Model): boolean{ return props.items == null || props.items.length === 0; } export class NavigationV1 extends AbstractCoreComponent { public static defaultProps = { isInEditor: false, hidePlaceHolder: false, items: [] }; constructor(props:Model) { super(props, "cmp-navigation", 'NavigationV1'); } isEmpty(): boolean{ return NavigationV1IsEmptyFn(this.props); } determineIsActive(item:NavigationV1Item){ return item.active; } renderComponent(){ const selfClone:NavigationV1Item = { active: false, lastModified: 0, level: 0, path: "", title: "", url: "", children: this.props.items }; return ( ) } renderGroup(item:NavigationV1Item){ return ( <> {!!item.children && item.children.length > 0 && ( )} ) } renderLink(item:NavigationV1Item, isActive:boolean){ return ( {item.title} ) } renderNavItem(item: NavigationV1Item, index: number) { const isActive = this.determineIsActive(item); const cssClass = this.baseCssCls + '__item ' + this.baseCssCls + '__item--level-' + item.level + ' ' + ' ' + this.getExtraNavItemCssClss(item, index) + (isActive ? ' ' + this.baseCssCls + '__item--active' : ''); return (
  • { this.renderLink(item, isActive) } { !!item.children && item.children.length > 0 && this.renderGroup(item) }
  • ) } getExtraNavItemCssClss(item: NavigationV1Item, index: number) { return ""; } }