Articles about European Sharepoint Hosting Service
SharePoint Hosting – Global Navigation In Modern SharePoint Using SPFx, PnP And Fluent UI
Modern SharePoint architecture gives fantastic OOTB global navigation, and hub site navigation has amazing potential to maintain consistency throughout the portal. Then why do we need to develop custom global navigation in modern SharePoint sites?
Let us talk about the business scenario.
Nowadays, a number of organizations are migrating classic intranet portals to modern sites. Many of them have implemented custom global navigation in a classic environment with a number of links and complex tree structures.
Employees are habitual with this global navigation. So, many organizations prefer similar global navigation in Modern SharePoint sites.
Steps
- Configure Terms in Term Stores
- Create Solution for Application Customizer
- Import Required Packages
- Create React Component
- Add React Component Reference to Application Customizer
- Get Terms using PnP
- Render Terms using Command Bar and styling
- Test Solution
Step 1 – Configure Terms in Term Store.
Go to URL : https://<TenantName>-admin.sharepoint.com/_layouts/15/online/AdminHome.aspx#/termStoreAdminCenter
Create Term Group.
- Copy Group GUID and Paste it into one document
Create Term Set inside created Term Group
- Enable Use Term set for Site Navigation
- Copy term Set Id and Paste it in one document.
Create Terms Inside create Term Sets.
Step 2 – Create SPFx Solution for Application Customizer
Open Node command Prompt.
Go to your physical location where you want to create a solution.
Once all required packages are installed then you will get the below message.
open Code in visual studio code by typing below one line code in node command prompt.
1 |
<span class="token constant">C</span><span class="token operator">:</span>\<span class="token maybe-class-name">Demo</span>\<span class="token maybe-class-name">GlobalNavigation</span><span class="token operator">></span>code <span class="token punctuation">.</span> |
The solution structure looks like the ad below,
Step 3 – Import required packages from npm
Install PnP npm package,
1 |
npm install @pnp<span class="token operator">/</span>sp |
Install React Fluent UI Package,
1 |
npm install @fluentui<span class="token operator">/</span>react |
Install react and react Dom and Its Dev Dependencies.
1 2 |
npm install react@<span class="token number">16.9</span><span class="token number">.0</span> <span class="token operator">--</span>save npm install react<span class="token operator">-</span>dom@<span class="token number">16.9</span><span class="token number">.0</span> <span class="token operator">--</span>save |
Open package.json file which should look like as below,
package.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<span class="token punctuation">{</span> <span class="token string">"name"</span><span class="token operator">:</span> <span class="token string">"sample-demo-application"</span><span class="token punctuation">,</span> <span class="token string">"version"</span><span class="token operator">:</span> <span class="token string">"0.0.1"</span><span class="token punctuation">,</span> <span class="token string">"private"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token string">"main"</span><span class="token operator">:</span> <span class="token string">"lib/index.js"</span><span class="token punctuation">,</span> <span class="token string">"scripts"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"build"</span><span class="token operator">:</span> <span class="token string">"gulp bundle"</span><span class="token punctuation">,</span> <span class="token string">"clean"</span><span class="token operator">:</span> <span class="token string">"gulp clean"</span><span class="token punctuation">,</span> <span class="token string">"test"</span><span class="token operator">:</span> <span class="token string">"gulp test"</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"dependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"@fluentui/react"</span><span class="token operator">:</span> <span class="token string">"^8.22.3"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/decorators"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-application-base"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-core-library"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-dialog"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-office-ui-fabric-core"</span><span class="token operator">:</span> <span class="token string">"^1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@pnp/sp"</span><span class="token operator">:</span> <span class="token string">"^2.7.0"</span><span class="token punctuation">,</span> <span class="token string">"react"</span><span class="token operator">:</span> <span class="token string">"^16.9.0"</span><span class="token punctuation">,</span> <span class="token string">"react-dom"</span><span class="token operator">:</span> <span class="token string">"^16.9.0"</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"devDependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"@types/react"</span><span class="token operator">:</span> <span class="token string">"16.9.36"</span><span class="token punctuation">,</span> <span class="token string">"@types/react-dom"</span><span class="token operator">:</span> <span class="token string">"16.9.8"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-build-web"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-tslint-rules"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-module-interfaces"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/sp-webpart-workbench"</span><span class="token operator">:</span> <span class="token string">"1.12.1"</span><span class="token punctuation">,</span> <span class="token string">"@microsoft/rush-stack-compiler-3.7"</span><span class="token operator">:</span> <span class="token string">"0.2.3"</span><span class="token punctuation">,</span> <span class="token string">"gulp"</span><span class="token operator">:</span> <span class="token string">"~4.0.2"</span><span class="token punctuation">,</span> <span class="token string">"ajv"</span><span class="token operator">:</span> <span class="token string">"~5.2.2"</span><span class="token punctuation">,</span> <span class="token string">"@types/webpack-env"</span><span class="token operator">:</span> <span class="token string">"1.13.1"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Step 4 – Create React Component
Create new folder called “Components” to “..src\extensions\gobalNavigationBar”.
Create 3 files inside the components folder.
- GlobalNav.tsx
- IGlobalNavProps.ts
- IGlobalNavState.ts
Add below code to IGlobalNavProps.ts
1 2 3 4 |
<span class="token keyword module keyword-export">export</span> <span class="token keyword keyword-interface">interface</span> <span class="token class-name">IGlobalNavProps</span> <span class="token punctuation">{</span> termGroupId<span class="token operator">:</span>string<span class="token punctuation">;</span> termSetId<span class="token operator">:</span> string<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Add below code to IGlobalNavState.ts,
1 2 3 4 5 |
<span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">IOrderedTermInfo</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'@pnp/sp/taxonomy'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-export">export</span> <span class="token keyword keyword-interface">interface</span> <span class="token class-name">IGobalNavState</span> <span class="token punctuation">{</span> loading<span class="token operator">:</span> boolean<span class="token punctuation">;</span> terms<span class="token operator">:</span> <span class="token maybe-class-name">IOrderedTermInfo</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Add below code to IGlobalNav.tsx,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token operator">*</span> <span class="token keyword module keyword-as">as</span> <span class="token maybe-class-name">React</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'react'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">IGlobalNavProps</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"./IGlobalNavProps"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">IGobalNavState</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"./IGlobalNavState"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-export">export</span> <span class="token keyword module keyword-default">default</span> <span class="token keyword keyword-class">class</span> <span class="token class-name">GlobalNav</span> <span class="token keyword keyword-extends">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span><span class="token operator"><</span><span class="token maybe-class-name">IGlobalNavProps</span><span class="token punctuation">,</span> <span class="token maybe-class-name">IGobalNavState</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">props<span class="token operator">:</span> <span class="token maybe-class-name">IGlobalNavProps</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword keyword-super">super</span><span class="token punctuation">(</span>props<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">state</span> <span class="token operator">=</span> <span class="token punctuation">{</span> loading<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> terms<span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword keyword-public">public</span> <span class="token function">componentDidMount</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Code here to get items</span> <span class="token punctuation">}</span> <span class="token keyword keyword-public">public</span> <span class="token function">render</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token maybe-class-name">React</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">ReactElement</span></span><span class="token operator"><</span><span class="token maybe-class-name">IGlobalNavProps</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword control-flow keyword-return">return</span> <span class="token punctuation">(</span> <span class="token operator"><</span>div<span class="token operator">></span> <span class="token maybe-class-name">Hello</span> <span class="token maybe-class-name">World</span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Step 5 – Add React Component Reference to Application Customizer
Open GobalNavigationBarApplicationCustomizer.ts file and add the below code.
GobalNavigationBarApplicationCustomizer.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token operator">*</span> <span class="token keyword module keyword-as">as</span> <span class="token maybe-class-name">React</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'react'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token operator">*</span> <span class="token keyword module keyword-as">as</span> <span class="token maybe-class-name">ReactDom</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'react-dom'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> sp <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"@pnp/sp"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> override <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'@microsoft/decorators'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">Log</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'@microsoft/sp-core-library'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">PlaceholderContent</span><span class="token punctuation">,</span> <span class="token maybe-class-name">PlaceholderName</span><span class="token punctuation">,</span> <span class="token maybe-class-name">BaseApplicationCustomizer</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'@microsoft/sp-application-base'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token maybe-class-name">GlobalNav</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"./Components/GlobalNav"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">IGlobalNavProps</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"./Components/IGlobalNavProps"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token operator">*</span> <span class="token keyword module keyword-as">as</span> strings</span> <span class="token keyword module keyword-from">from</span> <span class="token string">'GobalNavigationBarApplicationCustomizerStrings'</span><span class="token punctuation">;</span> <span class="token keyword keyword-const">const</span> <span class="token constant">LOG_SOURCE</span><span class="token operator">:</span> string <span class="token operator">=</span> <span class="token string">'GobalNavigationBarApplicationCustomizer'</span><span class="token punctuation">;</span> <span class="token doc-comment comment">/** * If your command set uses the ClientSideComponentProperties JSON input, * it will be deserialized into the BaseExtension.properties object. * You can define an interface to describe it. */</span> <span class="token keyword module keyword-export">export</span> <span class="token keyword keyword-interface">interface</span> <span class="token class-name">IGobalNavigationBarApplicationCustomizerProperties</span> <span class="token punctuation">{</span> <span class="token comment">// This is an example; replace with your own property</span> termGroupId<span class="token operator">:</span> string<span class="token punctuation">;</span> termSetId<span class="token operator">:</span> string<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token doc-comment comment">/** A Custom Action which can be run during execution of a Client Side Application */</span> <span class="token keyword module keyword-export">export</span> <span class="token keyword module keyword-default">default</span> <span class="token keyword keyword-class">class</span> <span class="token class-name">GobalNavigationBarApplicationCustomizer</span> <span class="token keyword keyword-extends">extends</span> <span class="token class-name">BaseApplicationCustomizer</span><span class="token operator"><</span><span class="token maybe-class-name">IGobalNavigationBarApplicationCustomizerProperties</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword keyword-private">private</span> _topPlaceholder<span class="token operator">:</span> <span class="token maybe-class-name">PlaceholderContent</span> <span class="token operator">|</span> <span class="token keyword nil keyword-undefined">undefined</span><span class="token punctuation">;</span> @override <span class="token keyword keyword-public">public</span> <span class="token function">onInit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token known-class-name class-name">Promise</span><span class="token operator"><</span><span class="token keyword keyword-void">void</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token maybe-class-name">Log</span><span class="token punctuation">.</span><span class="token method function property-access">info</span><span class="token punctuation">(</span><span class="token constant">LOG_SOURCE</span><span class="token punctuation">,</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Initialized </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>strings<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Title</span></span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-super">super</span><span class="token punctuation">.</span><span class="token method function property-access">onInit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span><span class="token parameter">_</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">"super oninit called"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> sp<span class="token punctuation">.</span><span class="token method function property-access">setup</span><span class="token punctuation">(</span><span class="token punctuation">{</span> spfxContext<span class="token operator">:</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">context</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">_</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">"Sp Initilize"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">context</span><span class="token punctuation">.</span><span class="token property-access">placeholderProvider</span><span class="token punctuation">.</span><span class="token property-access">changedEvent</span><span class="token punctuation">.</span><span class="token method function property-access">add</span><span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">,</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">_renderPlaceHolders</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword control-flow keyword-return">return</span> <span class="token known-class-name class-name">Promise</span><span class="token punctuation">.</span><span class="token method function property-access">resolve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword keyword-private">private</span> <span class="token function">_renderPlaceHolders</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token keyword keyword-void">void</span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">"HelloWorldApplicationCustomizer._renderPlaceHolders()"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span> <span class="token string">"Available placeholders: "</span><span class="token punctuation">,</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">context</span><span class="token punctuation">.</span><span class="token property-access">placeholderProvider</span><span class="token punctuation">.</span><span class="token property-access">placeholderNames</span> <span class="token punctuation">.</span><span class="token method function property-access">map</span><span class="token punctuation">(</span><span class="token parameter">name</span> <span class="token arrow operator">=></span> <span class="token maybe-class-name">PlaceholderName</span><span class="token punctuation">[</span>name<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token method function property-access">join</span><span class="token punctuation">(</span><span class="token string">", "</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Handling the top placeholder</span> <span class="token keyword control-flow keyword-if">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">_topPlaceholder</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">_topPlaceholder</span> <span class="token operator">=</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">context</span><span class="token punctuation">.</span><span class="token property-access">placeholderProvider</span><span class="token punctuation">.</span><span class="token method function property-access">tryCreateContent</span><span class="token punctuation">(</span> <span class="token maybe-class-name">PlaceholderName</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Top</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span> onDispose<span class="token operator">:</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">_onDispose</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// The extension should not assume that the expected placeholder is available.</span> <span class="token keyword control-flow keyword-if">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">_topPlaceholder</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">error</span><span class="token punctuation">(</span><span class="token string">"The expected placeholder (Top) was not found."</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword control-flow keyword-return">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword control-flow keyword-if">if</span> <span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">properties</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Add refrence of react component to this file.</span> <span class="token keyword keyword-const">const</span> element<span class="token operator">:</span> <span class="token maybe-class-name">React</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">ReactElement</span></span><span class="token operator"><</span><span class="token maybe-class-name">IGlobalNavProps</span><span class="token operator">></span> <span class="token operator">=</span> <span class="token maybe-class-name">React</span><span class="token punctuation">.</span><span class="token method function property-access">createElement</span><span class="token punctuation">(</span> <span class="token maybe-class-name">GlobalNav</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> termGroupId<span class="token operator">:</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">properties</span><span class="token punctuation">.</span><span class="token property-access">termGroupId</span><span class="token punctuation">,</span> termSetId<span class="token operator">:</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">properties</span><span class="token punctuation">.</span><span class="token property-access">termSetId</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token maybe-class-name">ReactDom</span><span class="token punctuation">.</span><span class="token method function property-access">render</span><span class="token punctuation">(</span>element<span class="token punctuation">,</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">_topPlaceholder</span><span class="token punctuation">.</span><span class="token property-access">domElement</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword keyword-private">private</span> <span class="token function">_onDispose</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token keyword keyword-void">void</span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">'[HelloWorldApplicationCustomizer._onDispose] Disposed custom top and bottom placeholders.'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Step 6: Get Terms using PnP
Open GlobalNav.tsx file and do the below changes.
GlobalNav.tsx
Add below references to the file.
1 2 3 4 5 6 |
<span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> sp <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"@pnp/sp"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token string">"@pnp/sp/taxonomy"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> dateAdd<span class="token punctuation">,</span> <span class="token maybe-class-name">PnPClientStorage</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"@pnp/common"</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">IOrderedTermInfo</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'@pnp/sp/taxonomy'</span><span class="token punctuation">;</span> <span class="token keyword keyword-const">const</span> myKey<span class="token operator">:</span> string <span class="token operator">=</span> <span class="token string">"navigationElements"</span><span class="token punctuation">;</span> |
Update below code to GlobalNav.tsx.
1 2 3 4 5 6 7 8 |
<span class="token keyword keyword-private">private</span> store <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token class-name">PnPClientStorage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">props<span class="token operator">:</span> <span class="token maybe-class-name">IGlobalNavProps</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword keyword-super">super</span><span class="token punctuation">(</span>props<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">state</span> <span class="token operator">=</span> <span class="token punctuation">{</span> loading<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> terms<span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Update componentdidmount() method with below code in GlobalNav.tsx.
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token keyword keyword-public">public</span> <span class="token function">componentDidMount</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token method function property-access">setState</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword keyword-async">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// this portion is responsible for getting terms from term store</span> <span class="token keyword keyword-const">const</span> cachedTermInfo <span class="token operator">=</span> <span class="token keyword control-flow keyword-await">await</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">store</span><span class="token punctuation">.</span><span class="token property-access">local</span><span class="token punctuation">.</span><span class="token method function property-access">getOrPut</span><span class="token punctuation">(</span>myKey<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token keyword control-flow keyword-return">return</span> sp<span class="token punctuation">.</span><span class="token property-access">termStore</span><span class="token punctuation">.</span><span class="token property-access">groups</span><span class="token punctuation">.</span><span class="token method function property-access">getById</span><span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">props</span><span class="token punctuation">.</span><span class="token property-access">termGroupId</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token property-access">sets</span><span class="token punctuation">.</span><span class="token method function property-access">getById</span><span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">props</span><span class="token punctuation">.</span><span class="token property-access">termSetId</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">getAllChildrenAsOrderedTree</span><span class="token punctuation">(</span><span class="token punctuation">{</span> retrieveProperties<span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">dateAdd</span><span class="token punctuation">(</span><span class="token keyword keyword-new">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"minute"</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword control-flow keyword-if">if</span> <span class="token punctuation">(</span>cachedTermInfo<span class="token punctuation">.</span><span class="token property-access">length</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>cachedTermInfo<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token method function property-access">setState</span><span class="token punctuation">(</span><span class="token punctuation">{</span> terms<span class="token operator">:</span> cachedTermInfo <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Step 7 – Render Terms using Command Bar
Open GlobalNav.tsx file.
Add below code before default class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">IButtonStyles</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'@fluentui/react'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> createTheme<span class="token punctuation">,</span> <span class="token maybe-class-name">ITheme</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">'office-ui-fabric-react/lib/Styling'</span><span class="token punctuation">;</span> <span class="token keyword module keyword-import">import</span> <span class="token imports"><span class="token punctuation">{</span> <span class="token maybe-class-name">CommandBar</span><span class="token punctuation">,</span> <span class="token maybe-class-name">ICommandBarStyleProps</span> <span class="token punctuation">}</span></span> <span class="token keyword module keyword-from">from</span> <span class="token string">"@fluentui/react/lib/CommandBar"</span><span class="token punctuation">;</span> <span class="token keyword keyword-const">const</span> theme<span class="token operator">:</span> <span class="token maybe-class-name">ITheme</span> <span class="token operator">=</span> <span class="token function">createTheme</span><span class="token punctuation">(</span><span class="token punctuation">{</span> semanticColors<span class="token operator">:</span> <span class="token punctuation">{</span> bodyBackground<span class="token operator">:</span> <span class="token string">"#333"</span><span class="token punctuation">,</span> bodyText<span class="token operator">:</span> <span class="token string">"#fff"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-const">const</span> <span class="token maybe-class-name">CommandBarProps</span><span class="token operator">:</span> <span class="token maybe-class-name">ICommandBarStyleProps</span> <span class="token operator">=</span> <span class="token punctuation">{</span> theme<span class="token operator">:</span> theme <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword keyword-const">const</span> buttonStyle<span class="token operator">:</span> <span class="token maybe-class-name">IButtonStyles</span> <span class="token operator">=</span> <span class="token punctuation">{</span> root<span class="token operator">:</span> <span class="token punctuation">{</span> backgroundColor<span class="token operator">:</span> <span class="token string">"#333"</span><span class="token punctuation">,</span> color<span class="token operator">:</span> <span class="token string">"#fff"</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> menuIcon<span class="token operator">:</span> <span class="token punctuation">{</span> color<span class="token operator">:</span> <span class="token string">"#fff"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> |
Create new method menuItems() in GlobalNav.tsx file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="token keyword keyword-private">private</span> <span class="token function">menuItems</span><span class="token punctuation">(</span><span class="token parameter">menuItem<span class="token operator">:</span> any<span class="token punctuation">,</span> itemType<span class="token operator">:</span> <span class="token maybe-class-name">ContextualMenuItemType</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword control-flow keyword-return">return</span> <span class="token punctuation">(</span><span class="token punctuation">{</span> key<span class="token operator">:</span> menuItem<span class="token punctuation">.</span><span class="token property-access">id</span><span class="token punctuation">,</span> name<span class="token operator">:</span> menuItem<span class="token punctuation">.</span><span class="token property-access">defaultLabel</span><span class="token punctuation">,</span> itemType<span class="token operator">:</span> itemType<span class="token punctuation">,</span> href<span class="token operator">:</span> menuItem<span class="token punctuation">.</span><span class="token property-access">children</span><span class="token punctuation">.</span><span class="token property-access">length</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>menuItem<span class="token punctuation">.</span><span class="token property-access">localProperties</span> <span class="token operator">!=</span> <span class="token keyword nil keyword-undefined">undefined</span> <span class="token operator">&&</span> menuItem<span class="token punctuation">.</span><span class="token property-access">localProperties</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token property-access">properties</span> <span class="token operator">!==</span> <span class="token keyword nil keyword-undefined">undefined</span> <span class="token operator">&&</span> menuItem<span class="token punctuation">.</span><span class="token property-access">localProperties</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token property-access">properties</span><span class="token punctuation">.</span><span class="token property-access">length</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">?</span> menuItem<span class="token punctuation">.</span><span class="token property-access">localProperties</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token property-access">properties</span><span class="token punctuation">.</span><span class="token method function property-access">filter</span><span class="token punctuation">(</span><span class="token parameter">x</span> <span class="token arrow operator">=></span> x<span class="token punctuation">.</span><span class="token property-access">key</span> <span class="token operator">==</span> <span class="token string">"_Sys_Nav_SimpleLinkUrl"</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token property-access">value</span> <span class="token operator">!==</span> <span class="token keyword nil keyword-undefined">undefined</span> <span class="token operator">?</span> menuItem<span class="token punctuation">.</span><span class="token property-access">localProperties</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token property-access">properties</span><span class="token punctuation">.</span><span class="token method function property-access">filter</span><span class="token punctuation">(</span><span class="token parameter">x</span> <span class="token arrow operator">=></span> x<span class="token punctuation">.</span><span class="token property-access">key</span> <span class="token operator">==</span> <span class="token string">"_Sys_Nav_SimpleLinkUrl"</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token property-access">value</span> <span class="token operator">:</span> <span class="token keyword null nil keyword-null">null</span> <span class="token operator">:</span> <span class="token keyword null nil keyword-null">null</span><span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token keyword null nil keyword-null">null</span><span class="token punctuation">,</span> subMenuProps<span class="token operator">:</span> menuItem<span class="token punctuation">.</span><span class="token property-access">children</span><span class="token punctuation">.</span><span class="token property-access">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token punctuation">{</span> items<span class="token operator">:</span> menuItem<span class="token punctuation">.</span><span class="token property-access">children</span><span class="token punctuation">.</span><span class="token method function property-access">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">i</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token keyword control-flow keyword-return">return</span> <span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token method function property-access">menuItems</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> <span class="token maybe-class-name">ContextualMenuItemType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Normal</span></span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token operator">:</span> <span class="token keyword null nil keyword-null">null</span><span class="token punctuation">,</span> isSubMenu<span class="token operator">:</span> itemType <span class="token operator">!=</span> <span class="token maybe-class-name">ContextualMenuItemType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Header</span></span><span class="token punctuation">,</span> buttonStyles<span class="token operator">:</span> buttonStyle <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Update render() method in GlobalNav.tsx file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token keyword keyword-public">public</span> <span class="token function">render</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token maybe-class-name">React</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">ReactElement</span></span><span class="token operator"><</span><span class="token maybe-class-name">IGlobalNavProps</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword keyword-var">var</span> commandBarItems<span class="token operator">:</span> any<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword control-flow keyword-if">if</span> <span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">state</span><span class="token punctuation">.</span><span class="token property-access">terms</span><span class="token punctuation">.</span><span class="token property-access">length</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> commandBarItems <span class="token operator">=</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">state</span><span class="token punctuation">.</span><span class="token property-access">terms</span><span class="token punctuation">.</span><span class="token method function property-access">map</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">i</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token keyword control-flow keyword-return">return</span> <span class="token punctuation">(</span><span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token method function property-access">menuItems</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> <span class="token maybe-class-name">ContextualMenuItemType</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Header</span></span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword control-flow keyword-return">return</span> <span class="token punctuation">(</span> <span class="token operator"><</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword keyword-this">this</span><span class="token punctuation">.</span><span class="token property-access">state</span><span class="token punctuation">.</span><span class="token property-access">terms</span><span class="token punctuation">.</span><span class="token property-access">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token operator">&&</span> <span class="token operator"><</span>div<span class="token operator">></span> <span class="token operator"><</span><span class="token maybe-class-name">CommandBar</span> <span class="token punctuation">{</span><span class="token spread operator">...</span><span class="token maybe-class-name">CommandBarProps</span><span class="token punctuation">}</span> style<span class="token operator">=</span><span class="token punctuation">{</span><span class="token punctuation">{</span> width<span class="token operator">:</span> <span class="token string">"100%"</span> <span class="token punctuation">}</span><span class="token punctuation">}</span> items<span class="token operator">=</span><span class="token punctuation">{</span>commandBarItems<span class="token punctuation">}</span> <span class="token operator">/</span><span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token punctuation">}</span> <span class="token operator"><</span><span class="token operator">/</span><span class="token operator">></span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Step 8 – Test Solution
Open “../config/serve.json” file and update a couple of properties.
Update pageUrl Property and Properties,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="token punctuation">{</span> <span class="token string">"$schema"</span><span class="token operator">:</span> <span class="token string">"<a class="token url-link" href="https://developer.microsoft.com/json-schemas/core-build/serve.schema.json">https://developer.microsoft.com/json-schemas/core-build/serve.schema.json</a>"</span><span class="token punctuation">,</span> <span class="token string">"port"</span><span class="token operator">:</span> <span class="token number">4321</span><span class="token punctuation">,</span> <span class="token string">"https"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token string">"serveConfigurations"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"default"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"pageUrl"</span><span class="token operator">:</span> <span class="token string">"https://<tenantName>.sharepoint.com/sites/mySite/SitePages/myPage.aspx"</span><span class="token punctuation">,</span> <span class="token string">"customActions"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"aeabebb8-02ce-4958-99b2-d640d0995588"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"location"</span><span class="token operator">:</span> <span class="token string">"ClientSideExtension.ApplicationCustomizer"</span><span class="token punctuation">,</span> <span class="token string">"properties"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"termGroupId"</span><span class="token operator">:</span> <span class="token string">"<Add your Term Group Id>"</span><span class="token punctuation">,</span> <span class="token string">"termSetId"</span><span class="token operator">:</span><span class="token string">"<Add your Term Set Id>"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"gobalNavigationBar"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"pageUrl"</span><span class="token operator">:</span> <span class="token string">"https://<tenantName>.sharepoint.com/sites/mySite/SitePages/myPage.aspx"</span><span class="token punctuation">,</span> <span class="token string">"customActions"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"aeabebb8-02ce-4958-99b2-d640d0995588"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"location"</span><span class="token operator">:</span> <span class="token string">"ClientSideExtension.ApplicationCustomizer"</span><span class="token punctuation">,</span> <span class="token string">"properties"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"termGroupId"</span><span class="token operator">:</span> <span class="token string">"<Add your Term Group Id>"</span><span class="token punctuation">,</span> <span class="token string">"termSetId"</span><span class="token operator">:</span><span class="token string">"<Add your Term Set Id>"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Run below command in Visual Studio Code Terminal.
1 2 3 |
gulp clean gulp build gulp serve <span class="token operator">--</span>config<span class="token operator">:</span><span class="token string">"gobalNavigationBar"</span> |
Copy URL which is highlighted in yellow and paste it into the browser.
Conclusion
We have implemented the SPFx solution and get terms from the term store using PnP and render items in the command bar which is fluent UI control.
Print article | This entry was posted by Peter on July 22, 2021 at 3:37 am, and is filed under Other Related Post. Follow any responses to this post through RSS 2.0. Both comments and pings are currently closed. |