area.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. const app = require('../app')
  2. const { logo, menuIcon, userIcon, dashboardIcon, roleIcon, dropdownIcon, dropupIcon } = require('../assets')
  3. const assets = require('../assets')
  4. app.component('appArea', {
  5. transclude: true,
  6. template: html`
  7. <div layout="row" flex>
  8. <md-sidenav flex
  9. md-component-id="left"
  10. class="md-sidenav-left"
  11. md-is-locked-open="$mdMedia('gt-md')"
  12. md-whiteframe="4"
  13. layout="column"
  14. md-theme="nav"
  15. ng-if="$root.inUserArea">
  16. <md-content md-theme="nav">
  17. <header>
  18. <div class="logo-container">
  19. <img class="logo" src="${logo}" />
  20. </div>
  21. </header>
  22. <app-user-area-nav></app-user-area-nav>
  23. <md-menu-item ng-repeat="crud in $ctrl.cruds">
  24. <md-button ng-href="/{{crud.paramPlural}}">
  25. <md-icon md-svg-icon="{{assets[crud.iconAsset]}}"></md-icon>
  26. {{crud.titlePlural}}
  27. </md-button>
  28. </md-menu-item>
  29. <div ng-if="$ctrl.api.claims.USER_VIEW || $ctrl.api.claims.ROLE_VIEW">
  30. <h3>
  31. Administration
  32. </h3>
  33. <md-menu-item ng-if="$ctrl.api.claims.USER_VIEW">
  34. <md-button ng-href="/users">
  35. <md-icon md-svg-icon="${userIcon}"></md-icon>
  36. Users
  37. </md-button>
  38. </md-menu-item>
  39. <md-menu-item ng-if="$ctrl.api.claims.ROLE_VIEW">
  40. <md-button ng-href="/roles">
  41. <md-icon md-svg-icon="${roleIcon}"></md-icon>
  42. Roles
  43. </md-button>
  44. </md-menu-item>
  45. </div>
  46. <!-- <md-menu-item>
  47. <md-button ng-href="/roles">
  48. <md-icon md-svg-icon="${roleIcon}"></md-icon>
  49. Roles
  50. </md-button>
  51. </md-menu-item> -->
  52. </md-content>
  53. </md-sidenav>
  54. <md-content flex>
  55. <md-toolbar ng-if="$root.inUserArea">
  56. <div class="md-toolbar-tools">
  57. <md-button class="md-icon-button" aria-label="Settings" ng-hide="$mdMedia('gt-md')" ng-click="$ctrl.toggleNav()">
  58. <md-icon md-svg-icon="${menuIcon}"></md-icon>
  59. </md-button>
  60. <h1 flex>{{$root.userArea.titleText}}</h1>
  61. <md-menu md-position-mode="target-right target">
  62. <md-button class="md-raised md-accent hue-10" ng-click="$mdMenu.open($event)">
  63. <md-icon md-svg-icon="${userIcon}"></md-icon>
  64. {{$ctrl.api.user.name}}
  65. <md-icon md-svg-icon="${dropdownIcon}"></md-icon>
  66. </md-button>
  67. <md-menu-content>
  68. <md-menu-item>
  69. <md-button ng-click="$mdMenu.close($event)">
  70. <md-icon md-svg-icon="${userIcon}"></md-icon>
  71. {{$ctrl.api.user.name}}
  72. <md-icon md-svg-icon="${dropupIcon}"></md-icon>
  73. </md-button>
  74. </md-menu-item>
  75. <md-menu-item>
  76. <md-button class="md-warn" ng-click="$ctrl.logout()">
  77. Log out
  78. </md-button>
  79. </md-menu-item>
  80. </md-menu-content>
  81. </md-menu>
  82. </div>
  83. </md-toolbar>
  84. <div layout-padding>
  85. <div ng-transclude></div>
  86. </div>
  87. </md-content>
  88. </div>
  89. `,
  90. controller: function($rootScope, $mdSidenav, $mdMedia, $scope, cruds, api, $location) {
  91. window.$rootScope = $rootScope
  92. this.api = api
  93. this.cruds = cruds.filter(crud => crud.showNav !== false)
  94. $scope.assets = assets
  95. $scope.$mdMedia = $mdMedia
  96. this.showNav = false
  97. this.toggleNav = () => {
  98. $mdSidenav('left').toggle()
  99. }
  100. this.logout = async () => {
  101. await api.logout()
  102. $location.url('/login')
  103. }
  104. }
  105. })