buildMenu: function()

in Allura/allura/public/nf/js/navbar.es6.js [301:371]


    buildMenu: function(items, isSubMenu = false) {
        var _this = this;
        var [tools, anchoredTools, endTools] = [[], [], []];
        var subMenu;
        var childOptionsOpen;
        var _handle;
        var toolList;
        var isAnchored;
        for (let item of items) {
            if (item.children) {
                subMenu = this.buildMenu(item.children, true);
            } else {
                subMenu = null;
            }

            _handle = isSubMenu ? "draggable-handle-sub" : 'draggable-handle';
            if (item.mount_point === 'admin') {
                // force admin to end, just like 'Project.sitemap()' does
                toolList = endTools;
                isAnchored = true;
            } else if (item.is_anchored) {
                toolList = anchoredTools;
                isAnchored = true;
            } else {
                toolList = tools;
                isAnchored = false;
            }
            let coreItem = (<NavBarItem
                {..._this.props}
                mount_point={item.mount_point}
                name={item.name}
                handleType={_handle}
                isGrouper={item.children && item.children.length > 0}
                url={item.url}
                key={'tb-item-' + _.uniqueId()}
                is_anchored={isAnchored}
                options={item.admin_options}
            />);
            if (subMenu) {
                childOptionsOpen = _.contains(_.pluck(item.children, 'mount_point'),
                    this.props.currentOptionMenu.tool);

                toolList.push(<NavBarItemWithSubMenu
                    key={_.uniqueId()}
                    tool={coreItem}
                    subMenu={subMenu}
                    childOptionsOpen={childOptionsOpen}
                />);
            } else {
                toolList.push(coreItem);
            }
        }

        return (
            <div className='react-drag'>
                {anchoredTools}
                <ReactReorderable
                    key={'reorder-' + _.uniqueId()}
                    handle={"." + _handle}
                    mode={isSubMenu ? 'list' : 'grid'}
                    onDragStart={_this.props.onToolDragStart}
                    onDrop={_this.props.onToolReorder}>
                    {tools}
                </ReactReorderable>
                {endTools}
                {!isSubMenu && <div id="add-tool-container" className="unlocked-container">
                    <ToggleAddNewTool installableTools={this.props.installableTools}/>
                </div>}
            </div>
        );
    },