74 |
75 | {mobileMode && (
76 |
79 | )}
80 |
81 | {(!mobileMode || (mobileMode && this.state.showTopLevelMenuItemsWhenMobile)) && (
82 |
88 |
89 |
90 | {topLevelItems}
91 |
92 |
93 |
94 | )}
95 |
96 | {this.state.showFlyout &&
97 |
102 |
103 | }
104 |
105 |
106 | );
107 | }
108 |
109 |
110 |
111 | handleFocusedTopLevelMenu(selectedTopLevelItem: TopLevelMenuModel) {
112 |
113 | this.setState((prevState, props) => ({
114 | showFlyout: prevState.showFlyout,
115 | cursorInTopLevelMenu: true,
116 | cursorInFlyout: prevState.cursorInFlyout,
117 | selectedTopLevelItem: selectedTopLevelItem,
118 | showTopLevelMenuItemsWhenMobile: prevState.showTopLevelMenuItemsWhenMobile,
119 | }));
120 |
121 | this.checkFlyoutVisibility();
122 | }
123 |
124 | handleLostFocusTopLevelMenu() {
125 | this.setState((prevState, props) => ({
126 | showFlyout: prevState.showFlyout,
127 | cursorInTopLevelMenu: false,
128 | cursorInFlyout: prevState.cursorInFlyout,
129 | selectedTopLevelItem: prevState.selectedTopLevelItem,
130 | showTopLevelMenuItemsWhenMobile: prevState.showTopLevelMenuItemsWhenMobile,
131 | }));
132 |
133 | this.checkFlyoutVisibility();
134 | }
135 |
136 | handleFocusedFlyout(selectedTopLevelItem: TopLevelMenuModel) {
137 | this.setState((prevState, props) => ({
138 | showFlyout: prevState.showFlyout,
139 | cursorInTopLevelMenu: prevState.cursorInTopLevelMenu,
140 | cursorInFlyout: true,
141 | selectedTopLevelItem: selectedTopLevelItem,
142 | showTopLevelMenuItemsWhenMobile: prevState.showTopLevelMenuItemsWhenMobile,
143 | }));
144 |
145 | this.checkFlyoutVisibility();
146 | }
147 |
148 | handleLostFocusFlyout() {
149 | this.setState((prevState, props) => ({
150 | showFlyout: prevState.showFlyout,
151 | cursorInTopLevelMenu: prevState.cursorInTopLevelMenu,
152 | cursorInFlyout: false,
153 | selectedTopLevelItem: prevState.selectedTopLevelItem,
154 | showTopLevelMenuItemsWhenMobile: prevState.showTopLevelMenuItemsWhenMobile,
155 | }));
156 |
157 | this.checkFlyoutVisibility();
158 | }
159 |
160 | // Set visibility of flyout menu. Only visible if mouse is in a top-level menu or in the flyout itself.
161 | checkFlyoutVisibility() {
162 | this.setState((prevState, props) => {
163 |
164 | var showFlyout = prevState.cursorInTopLevelMenu || prevState.cursorInFlyout;
165 |
166 | return {
167 | showFlyout: showFlyout,
168 | cursorInTopLevelMenu: prevState.cursorInTopLevelMenu,
169 | cursorInFlyout: prevState.cursorInFlyout,
170 | selectedTopLevelItem: showFlyout ? prevState.selectedTopLevelItem : null,
171 | showTopLevelMenuItemsWhenMobile: prevState.showTopLevelMenuItemsWhenMobile,
172 | }
173 | });
174 | }
175 |
176 | handleMobileMenuTouched() {
177 | this.setState((prevState, props) => {
178 |
179 | console.log("toggle");
180 |
181 | var showTopLevelMenuItemsWhenMobile = !prevState.showTopLevelMenuItemsWhenMobile;
182 |
183 | var showFlyout = prevState.showFlyout && showTopLevelMenuItemsWhenMobile;
184 |
185 | return {
186 | showFlyout: showFlyout,
187 | cursorInTopLevelMenu: prevState.cursorInTopLevelMenu,
188 | cursorInFlyout: prevState.cursorInFlyout,
189 | selectedTopLevelItem: prevState.selectedTopLevelItem,
190 | showTopLevelMenuItemsWhenMobile: showTopLevelMenuItemsWhenMobile
191 | }
192 | });
193 | }
194 |
195 |
196 |
197 | }
198 |
--------------------------------------------------------------------------------
/provisioning/create-lists.ps1:
--------------------------------------------------------------------------------
1 | Param(
2 | [string]$siteCollectionUrl
3 | )
4 |
5 | Connect-PnPOnline -Url $siteCollectionUrl
6 |
7 | $listNameLevel1 = "Mega Menu - Level 1"
8 | $listNameLevel2 = "Mega Menu - Level 2"
9 | $listNameLevel3 = "Mega Menu - Level 3"
10 |
11 | function Create-LinksList {
12 |
13 | Param ($listName)
14 |
15 | write-host "Creating list $listName..." -NoNewline -ForegroundColor Gray
16 |
17 | $list = New-PnPList -Title $listName -Template GenericList -EnableVersioning
18 | $field = Add-PnPField -DisplayName "Sort Order" -InternalName "SortOrder" -Type number -AddToDefaultView -List $listName
19 | $field = Add-PnPField -DisplayName "Url" -InternalName "Url" -Type URL -AddToDefaultView -List $listName
20 | $field = Add-PnPField -DisplayName "Open in New Tab" -InternalName "OpenInNewTab" -Type boolean -AddToDefaultView -List $listName
21 | $field = Add-PnPField -DisplayName "Description" -InternalName "Description" -Type note -AddToDefaultView -List $listName
22 |
23 | write-host "done." -ForegroundColor Green
24 |
25 | return $list
26 | }
27 |
28 | function Create-LookupField {
29 | Param ($listNameToAddTo, $fieldInternalName, $fieldDisplayName, $lookedUpListGuid, $lookedUpListFieldTitle)
30 | $guid = [guid]::NewGuid()
31 | $xml = "