[menu] write menu component with hardcoded values
This commit is contained in:
		
							parent
							
								
									2c9e20dd87
								
							
						
					
					
						commit
						23b871631a
					
				| @ -1,5 +1,7 @@ | |||||||
|  | <app-menu></app-menu> | ||||||
|  | 
 | ||||||
| <ng-container *ngIf="{ val: network$ | async } as network"> | <ng-container *ngIf="{ val: network$ | async } as network"> | ||||||
| <header *ngIf="headerVisible"> | <header *ngIf="headerVisible" style="position: fixed; width: 100%; z-index: 100;"> | ||||||
|   <nav class="navbar navbar-expand-md navbar-dark bg-dark"> |   <nav class="navbar navbar-expand-md navbar-dark bg-dark"> | ||||||
|   <a class="navbar-brand" [ngClass]="{'dual-logos': subdomain}" [routerLink]="['/' | relativeUrl]" (click)="brandClick($event)"> |   <a class="navbar-brand" [ngClass]="{'dual-logos': subdomain}" [routerLink]="['/' | relativeUrl]" (click)="brandClick($event)"> | ||||||
|   <ng-template [ngIf]="subdomain"> |   <ng-template [ngIf]="subdomain"> | ||||||
|  | |||||||
							
								
								
									
										17
									
								
								frontend/src/app/components/menu/menu.component.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								frontend/src/app/components/menu/menu.component.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | <div class="sidenav" [class]="navOpen ? 'open': 'close'" *ngIf="userMenuGroups$ | async as menuGroups"> | ||||||
|  |   <div class="pt-3 pl-4 pr-4"> | ||||||
|  |     <nav> | ||||||
|  |       <div *ngFor="let group of menuGroups"> | ||||||
|  |         <h6 class="d-flex justify-content-between align-items-center mt-4 mb-2 text-uppercase"> | ||||||
|  |           <span>{{ group.title }}</span> | ||||||
|  |         </h6> | ||||||
|  |         <ul class="nav flex-column" *ngFor="let item of group.items"> | ||||||
|  |           <li class="nav-item d-flex justify-content-start align-items-center" (click)="navOpen = false;"> | ||||||
|  |             <fa-icon [icon]="['fas', item.faIcon]" [fixedWidth]="true"></fa-icon> | ||||||
|  |             <a class="nav-link" routerLinkActive="active" [routerLink]="[item.link]" role="tab">{{ item.title }}</a> | ||||||
|  |           </li> | ||||||
|  |         </ul> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
							
								
								
									
										46
									
								
								frontend/src/app/components/menu/menu.component.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								frontend/src/app/components/menu/menu.component.scss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | |||||||
|  | .sidenav { | ||||||
|  |   height: 100%; | ||||||
|  |   width: 0; | ||||||
|  |   position: fixed; | ||||||
|  |   z-index: 1; | ||||||
|  |   top: 65px; | ||||||
|  |   left: 0; | ||||||
|  |   background-color: #1d1f31; | ||||||
|  |   overflow-x: hidden; | ||||||
|  |   box-shadow: 0px 0px 15px 0px #000; | ||||||
|  |   overflow-y: scroll; | ||||||
|  |   height: 100vh; | ||||||
|  |   @media (max-width: 991px) { | ||||||
|  |     top: 80px; | ||||||
|  |   }; | ||||||
|  |   @media (max-width: 572px) { | ||||||
|  |     top: 120px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .sidenav.open { | ||||||
|  |   width: 235px; | ||||||
|  |   @media (max-width: 400px) { | ||||||
|  |     width: 100%; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .sidenav.close { | ||||||
|  |   width: 0px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .sidenav a { | ||||||
|  |   text-decoration: none; | ||||||
|  |   font-size: 20x; | ||||||
|  |   color: lightgray; | ||||||
|  |   margin-left: 20px; | ||||||
|  |   display: block; | ||||||
|  | } | ||||||
|  | .sidenav a:hover { | ||||||
|  |   color: white; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* On smaller screens, where height is less than 450px, change the style of the sidenav (less padding and a smaller font size) */ | ||||||
|  | @media screen and (max-height: 450px) { | ||||||
|  |   .sidenav {padding-top: 15px;} | ||||||
|  |   .sidenav a {font-size: 18px;} | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								frontend/src/app/components/menu/menu.component.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								frontend/src/app/components/menu/menu.component.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | import { Component, OnInit } from '@angular/core'; | ||||||
|  | import { Observable } from 'rxjs'; | ||||||
|  | import { ApiService } from '../../services/api.service'; | ||||||
|  | import { MenuGroup } from '../../interfaces/services.interface'; | ||||||
|  | 
 | ||||||
|  | @Component({ | ||||||
|  |   selector: 'app-menu', | ||||||
|  |   templateUrl: './menu.component.html', | ||||||
|  |   styleUrls: ['./menu.component.scss'] | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | export class MenuComponent implements OnInit { | ||||||
|  |   navOpen: boolean = true; | ||||||
|  |   userMenuGroups$: Observable<MenuGroup[]> | undefined; | ||||||
|  | 
 | ||||||
|  |   constructor( | ||||||
|  |     private apiService: ApiService | ||||||
|  |   ) {} | ||||||
|  | 
 | ||||||
|  |   ngOnInit(): void { | ||||||
|  |     this.userMenuGroups$ = this.apiService.getUserMenuGroups$(); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								frontend/src/app/interfaces/services.interface.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								frontend/src/app/interfaces/services.interface.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | import { IconName } from '@fortawesome/fontawesome-common-types'; | ||||||
|  | 
 | ||||||
|  | export type MenuItem = { | ||||||
|  |   title: string; | ||||||
|  |   i18n: string; | ||||||
|  |   faIcon: IconName; | ||||||
|  |   link: string; | ||||||
|  | }; | ||||||
|  | export type MenuGroup = { | ||||||
|  |   title: string; | ||||||
|  |   i18n: string; | ||||||
|  |   items: MenuItem[];   | ||||||
|  | } | ||||||
| @ -7,6 +7,7 @@ import { StateService } from './state.service'; | |||||||
| import { WebsocketResponse } from '../interfaces/websocket.interface'; | import { WebsocketResponse } from '../interfaces/websocket.interface'; | ||||||
| import { Outspend, Transaction } from '../interfaces/electrs.interface'; | import { Outspend, Transaction } from '../interfaces/electrs.interface'; | ||||||
| import { Conversion } from './price.service'; | import { Conversion } from './price.service'; | ||||||
|  | import { MenuGroup } from '../interfaces/services.interface'; | ||||||
| 
 | 
 | ||||||
| const SERVICES_API_PREFIX = `/api/v1/services`; | const SERVICES_API_PREFIX = `/api/v1/services`; | ||||||
| 
 | 
 | ||||||
| @ -334,9 +335,56 @@ export class ApiService { | |||||||
|   /** |   /** | ||||||
|    * Services |    * Services | ||||||
|    */ |    */ | ||||||
|   getNodeOwner$(publicKey: string) { |    | ||||||
|  |   getNodeOwner$(publicKey: string): Observable<any> { | ||||||
|     let params = new HttpParams() |     let params = new HttpParams() | ||||||
|       .set('node_public_key', publicKey); |       .set('node_public_key', publicKey); | ||||||
|     return this.httpClient.get<any>(`${SERVICES_API_PREFIX}/lightning/claim/current`, { params, observe: 'response' }); |     return this.httpClient.get<any>(`${SERVICES_API_PREFIX}/lightning/claim/current`, { params, observe: 'response' }); | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   getUserMenuGroups$(): Observable<MenuGroup[]> { | ||||||
|  |     const auth = JSON.parse(localStorage.getItem('auth') || ''); | ||||||
|  |     if (!auth) { | ||||||
|  |       return of(null); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return of([ | ||||||
|  |       { | ||||||
|  |         title: 'Lightning', | ||||||
|  |         i18n: '', | ||||||
|  |         items: [ | ||||||
|  |           { | ||||||
|  |             title: 'Nodes', | ||||||
|  |             i18n: '', | ||||||
|  |             faIcon: 'network-wired', | ||||||
|  |             link: '/services/lightning/nodes' | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         title: 'Enterprise', | ||||||
|  |         i18n: '', | ||||||
|  |         items: [ | ||||||
|  |           { | ||||||
|  |             title: 'Settings', | ||||||
|  |             i18n: '', | ||||||
|  |             faIcon: 'id-card-alt', | ||||||
|  |             link: '/services/enterprise/settings' | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             title: 'IP Whitelist', | ||||||
|  |             i18n: '', | ||||||
|  |             faIcon: 'check-circle', | ||||||
|  |             link: '/services/enterprise/ip-whitelist' | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     ]); | ||||||
|  | 
 | ||||||
|  |     // return this.httpClient.get<MenuGroup[]>(`${SERVICES_API_PREFIX}/account`, {
 | ||||||
|  |     //   headers: {
 | ||||||
|  |     //     'Authorization': auth.token
 | ||||||
|  |     //   }
 | ||||||
|  |     // });
 | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,9 +4,10 @@ import { NgbCollapseModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstra | |||||||
| import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; | import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; | ||||||
| import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faChartArea, faCogs, faCubes, faHammer, faDatabase, faExchangeAlt, faInfoCircle, | import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faChartArea, faCogs, faCubes, faHammer, faDatabase, faExchangeAlt, faInfoCircle, | ||||||
|   faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faClock, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, |   faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faClock, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, | ||||||
|   faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft } from '@fortawesome/free-solid-svg-icons'; |   faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck } from '@fortawesome/free-solid-svg-icons'; | ||||||
| import { InfiniteScrollModule } from 'ngx-infinite-scroll'; | import { InfiniteScrollModule } from 'ngx-infinite-scroll'; | ||||||
| import { MasterPageComponent } from '../components/master-page/master-page.component'; | import { MasterPageComponent } from '../components/master-page/master-page.component'; | ||||||
|  | import { MenuComponent } from '../components/menu/menu.component'; | ||||||
| import { PreviewTitleComponent } from '../components/master-page-preview/preview-title.component'; | import { PreviewTitleComponent } from '../components/master-page-preview/preview-title.component'; | ||||||
| import { BisqMasterPageComponent } from '../components/bisq-master-page/bisq-master-page.component'; | import { BisqMasterPageComponent } from '../components/bisq-master-page/bisq-master-page.component'; | ||||||
| import { LiquidMasterPageComponent } from '../components/liquid-master-page/liquid-master-page.component'; | import { LiquidMasterPageComponent } from '../components/liquid-master-page/liquid-master-page.component'; | ||||||
| @ -135,6 +136,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir | |||||||
|     AmountComponent, |     AmountComponent, | ||||||
|     AboutComponent, |     AboutComponent, | ||||||
|     MasterPageComponent, |     MasterPageComponent, | ||||||
|  |     MenuComponent, | ||||||
|     PreviewTitleComponent, |     PreviewTitleComponent, | ||||||
|     BisqMasterPageComponent, |     BisqMasterPageComponent, | ||||||
|     LiquidMasterPageComponent, |     LiquidMasterPageComponent, | ||||||
| @ -220,6 +222,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir | |||||||
|   ], |   ], | ||||||
|   exports: [ |   exports: [ | ||||||
|     MasterPageComponent, |     MasterPageComponent, | ||||||
|  |     MenuComponent, | ||||||
|     RouterModule, |     RouterModule, | ||||||
|     ReactiveFormsModule, |     ReactiveFormsModule, | ||||||
|     NgbNavModule, |     NgbNavModule, | ||||||
| @ -359,5 +362,20 @@ export class SharedModule { | |||||||
|     library.addIcons(faQrcode); |     library.addIcons(faQrcode); | ||||||
|     library.addIcons(faArrowRightArrowLeft); |     library.addIcons(faArrowRightArrowLeft); | ||||||
|     library.addIcons(faExchangeAlt); |     library.addIcons(faExchangeAlt); | ||||||
|  |     library.addIcons(faList); | ||||||
|  |     library.addIcons(faFastForward); | ||||||
|  |     library.addIcons(faWallet); | ||||||
|  |     library.addIcons(faUserClock); | ||||||
|  |     library.addIcons(faWrench); | ||||||
|  |     library.addIcons(faUserFriends); | ||||||
|  |     library.addIcons(faQuestionCircle); | ||||||
|  |     library.addIcons(faHistory); | ||||||
|  |     library.addIcons(faSignOutAlt); | ||||||
|  |     library.addIcons(faKey); | ||||||
|  |     library.addIcons(faSuitcase); | ||||||
|  |     library.addIcons(faIdCardAlt); | ||||||
|  |     library.addIcons(faNetworkWired); | ||||||
|  |     library.addIcons(faUserCheck); | ||||||
|  |     library.addIcons(faCircleCheck); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user