- - - - - - -
- - - -
- - - @if (fullscreenEnabled) { - + + + + @if (searchEnabled) { +
+ + + +
+ + + } + + @if (fullscreenEnabled) { + + } + + @if (forceFullscreen) { + + } +
+ @if ((homeService.hideLoadingBar$ | async) === false && (isLoading$ | async)) { + + } - - - - @if (!hideLoadingBar && (isLoading$ | async)) { - - }
diff --git a/ui-ngx/src/app/modules/home/home.component.scss b/ui-ngx/src/app/modules/home/home.component.scss index ed5f43ae82..0fe46ac42c 100644 --- a/ui-ngx/src/app/modules/home/home.component.scss +++ b/ui-ngx/src/app/modules/home/home.component.scss @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +@import "constants"; + :host { display: flex; width: 100%; @@ -20,6 +23,31 @@ mat-sidenav-container { flex: 1; + &.tb-desktop { + mat-sidenav.tb-site-sidenav { + width: 250px; + transition: width $sidenav-anim-timing; + .tb-logo-title { + opacity: 1; + transition: opacity $sidenav-anim-timing; + } + } + mat-sidenav-content.tb-site-content:not(.tb-force-fullscreen) { + margin-left: 250px !important; + transition: margin-left $sidenav-anim-timing; + } + &.tb-collapsed { + mat-sidenav.tb-site-sidenav { + width: 50px; + .tb-logo-title { + opacity: 0; + } + } + mat-sidenav-content.tb-site-content { + margin-left: 50px !important; + } + } + } } mat-sidenav.tb-site-sidenav { width: 250px; @@ -31,33 +59,78 @@ flex-shrink: 0; white-space: nowrap; .tb-nav-header-toolbar { - min-height: 64px; + position: relative; + min-height: 56px; height: inherit; - padding: 0; + padding: 8px 12px 8px 16px; z-index: 2; flex-shrink: 0; white-space: nowrap; - border-bottom: 1px solid rgba(0, 0, 0, .12); - & > div { - height: 64px; - .tb-logo-title { - width: auto; - max-width: 100%; - height: 36px; - max-height: 100%; - margin: auto; + border-right: 1px solid rgba(0, 0, 0, 0.12); + .tb-logo-title { + width: auto; + max-width: 100%; + height: 30px; + max-height: 100%; + margin: auto 0; + } + .tb-sidenav-toggle { + margin: 0; + position: absolute; + right: 9px; + top: 12px; + .tb-collapsed-logo-container { + position: relative; + width: 20px; + height: 20px; + margin-left: 6px; + .mat-icon, img { + width: 20px; + height: 20px; + position: absolute; + inset: 0; + transition: opacity $sidenav-anim-timing; + } + .tb-open-icon { + opacity: 0; + } + .tb-collapsed-logo { + opacity: 1; + } + } + &:hover { + .tb-collapsed-logo-container { + .tb-open-icon { + opacity: 1; + } + .tb-collapsed-logo { + opacity: 0; + } + } } } } } .tb-side-menu-toolbar { - overflow-y: auto; + overflow: hidden; height: inherit; padding: 0; + border-right: 1px solid rgba(0, 0, 0, 0.12); + --mat-toolbar-container-text-color: rgba(0, 0, 0, .76); + tb-user-menu { + border-top: 1px solid rgba(0, 0, 0, 0.12); + } } } .tb-primary-toolbar { z-index: 2; + height: 56px; + min-height: 56px; + border-bottom: 1px solid rgba(0, 0, 0, 0.12); + .mat-toolbar-tools { + height: 56px; + padding: 0; + } h1 { font-size: 24px !important; font-weight: 400 !important; diff --git a/ui-ngx/src/app/modules/home/home.component.ts b/ui-ngx/src/app/modules/home/home.component.ts index 1bd9b73386..91ef8c16a4 100644 --- a/ui-ngx/src/app/modules/home/home.component.ts +++ b/ui-ngx/src/app/modules/home/home.component.ts @@ -14,15 +14,25 @@ /// limitations under the License. /// -import { AfterViewInit, Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { + AfterViewInit, + Component, + computed, + ElementRef, + Inject, + OnDestroy, + OnInit, + signal, + ViewChild +} from '@angular/core'; import { skip, startWith, Subject } from 'rxjs'; -import { Store } from '@ngrx/store'; -import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators'; +import { select, Store } from '@ngrx/store'; +import { debounceTime, distinctUntilChanged, take, takeUntil } from 'rxjs/operators'; import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout'; import { PageComponent } from '@shared/components/page.component'; import { AppState } from '@core/core.state'; -import { getCurrentAuthState } from '@core/auth/auth.selectors'; +import { getCurrentAuthState, selectUserSettingsProperty } from '@core/auth/auth.selectors'; import { MediaBreakpoints } from '@shared/models/constants'; import screenfull from 'screenfull'; import { MatSidenav } from '@angular/material/sidenav'; @@ -30,10 +40,9 @@ import { AuthState } from '@core/auth/auth.models'; import { WINDOW } from '@core/services/window.service'; import { instanceOfSearchableComponent, ISearchableComponent } from '@home/models/searchable-component.models'; import { ActiveComponentService } from '@core/services/active-component.service'; -import { RouterTabsComponent } from '@home/components/router-tabs.component'; import { FormBuilder } from '@angular/forms'; -import { ActivatedRoute } from '@angular/router'; -import { isDefined, isDefinedAndNotNull } from '@core/utils'; +import { ActionPreferencesPutUserSettings } from '@core/auth/auth.actions'; +import { HomeService } from '@core/services/home.service'; @Component({ selector: 'tb-home', @@ -53,7 +62,12 @@ export class HomeComponent extends PageComponent implements AfterViewInit, OnIni sidenavMode: 'over' | 'push' | 'side' = 'side'; sidenavOpened = true; - logo = 'assets/logo_title_white.svg'; + sidenavDesktop = signal(true); + sidenavCollapsed = signal(false); + menuCollapsed= computed(() => this.sidenavDesktop() && this.sidenavCollapsed()); + + logo = 'assets/logo_title_black.svg'; + collapsedLogo = 'assets/small_logo_title_black.svg'; @ViewChild('sidenav') sidenav: MatSidenav; @@ -68,15 +82,14 @@ export class HomeComponent extends PageComponent implements AfterViewInit, OnIni showSearch = false; textSearch = this.fb.control('', {nonNullable: true}); - hideLoadingBar = false; - private destroy$ = new Subject(); constructor(protected store: Store, @Inject(WINDOW) private window: Window, private activeComponentService: ActiveComponentService, private fb: FormBuilder, - public breakpointObserver: BreakpointObserver) { + public breakpointObserver: BreakpointObserver, + public homeService: HomeService) { super(store); } @@ -85,6 +98,12 @@ export class HomeComponent extends PageComponent implements AfterViewInit, OnIni const isGtSm = this.breakpointObserver.isMatched(MediaBreakpoints['gt-sm']); this.sidenavMode = isGtSm ? 'side' : 'over'; this.sidenavOpened = isGtSm; + this.sidenavDesktop.set(isGtSm); + this.store.pipe(select(selectUserSettingsProperty('menuCollapsed'))).pipe( + take(1) + ).subscribe((collapsed: boolean) => { + this.sidenavCollapsed.set(collapsed); + }); this.breakpointObserver .observe(MediaBreakpoints['gt-sm']) @@ -93,12 +112,18 @@ export class HomeComponent extends PageComponent implements AfterViewInit, OnIni if (state.matches) { this.sidenavMode = 'side'; this.sidenavOpened = true; + this.sidenavDesktop.set(true); } else { this.sidenavMode = 'over'; this.sidenavOpened = false; + this.sidenavDesktop.set(false); } } ); + + this.homeService.toggleSideBar.pipe(takeUntil(this.destroy$)).subscribe(() => { + this.sidenav.toggle(); + }); } ngOnDestroy() { @@ -122,6 +147,11 @@ export class HomeComponent extends PageComponent implements AfterViewInit, OnIni } } + toggleSidenav() { + this.sidenavCollapsed.update(state => !state); + this.store.dispatch(new ActionPreferencesPutUserSettings({ menuCollapsed: this.sidenavCollapsed() })); + } + toggleFullscreen() { if (screenfull.isEnabled) { screenfull.toggle(); @@ -150,18 +180,9 @@ export class HomeComponent extends PageComponent implements AfterViewInit, OnIni private updateActiveComponent(activeComponent: any) { this.showSearch = false; - this.hideLoadingBar = false; this.textSearch.reset('', {emitEvent: false}); this.activeComponent = activeComponent; - if (activeComponent && activeComponent instanceof RouterTabsComponent - && isDefinedAndNotNull(this.activeComponent.activatedRoute?.snapshot?.data?.showMainLoadingBar)) { - this.hideLoadingBar = !this.activeComponent.activatedRoute.snapshot.data.showMainLoadingBar; - } else if (activeComponent && activeComponent instanceof PageComponent - && isDefinedAndNotNull(this.activeComponent?.showMainLoadingBar)) { - this.hideLoadingBar = !this.activeComponent.showMainLoadingBar; - } - if (this.activeComponent && instanceOfSearchableComponent(this.activeComponent)) { this.searchEnabled = true; this.searchableComponent = this.activeComponent; diff --git a/ui-ngx/src/app/modules/home/home.module.ts b/ui-ngx/src/app/modules/home/home.module.ts index 08dbf42104..293820941d 100644 --- a/ui-ngx/src/app/modules/home/home.module.ts +++ b/ui-ngx/src/app/modules/home/home.module.ts @@ -23,9 +23,8 @@ import { SharedModule } from '@app/shared/shared.module'; import { MenuLinkComponent } from '@modules/home/menu/menu-link.component'; import { MenuToggleComponent } from '@modules/home/menu/menu-toggle.component'; import { SideMenuComponent } from '@modules/home/menu/side-menu.component'; -import { GithubBadgeComponent } from '@home/components/github-badge/github-badge.component'; -import { NotificationBellComponent } from '@home/components/notification/notification-bell.component'; -import { ShowNotificationPopoverComponent } from '@home/components/notification/show-notification-popover.component'; +import { NotificationBellModule } from '@home/components/notification/notification-bell.module'; +import { GithubBadgeModule } from '@home/components/github-badge/github-badge.module'; @NgModule({ declarations: @@ -33,14 +32,13 @@ import { ShowNotificationPopoverComponent } from '@home/components/notification/ HomeComponent, MenuLinkComponent, MenuToggleComponent, - SideMenuComponent, - GithubBadgeComponent, - NotificationBellComponent, - ShowNotificationPopoverComponent + SideMenuComponent ], imports: [ CommonModule, SharedModule, + NotificationBellModule, + GithubBadgeModule, HomeRoutingModule ] }) diff --git a/ui-ngx/src/app/modules/home/menu/menu-link.component.html b/ui-ngx/src/app/modules/home/menu/menu-link.component.html index a62ca48f24..745f4cc6cd 100644 --- a/ui-ngx/src/app/modules/home/menu/menu-link.component.html +++ b/ui-ngx/src/app/modules/home/menu/menu-link.component.html @@ -16,6 +16,8 @@ --> @if (section.icon !== null) { {{section.icon}} diff --git a/ui-ngx/src/app/modules/home/menu/menu-link.component.scss b/ui-ngx/src/app/modules/home/menu/menu-link.component.scss index 7720091e79..ab83632095 100644 --- a/ui-ngx/src/app/modules/home/menu/menu-link.component.scss +++ b/ui-ngx/src/app/modules/home/menu/menu-link.component.scss @@ -14,22 +14,23 @@ * limitations under the License. */ -@import '../../../../scss/constants'; +@import "constants"; :host ::ng-deep { a.is-new::after { + position: absolute; + right: 16px; + top: 4px; content: "NEW"; - font-size: 12px; - letter-spacing: .03125em; - transform: translate(6px, -6px); - display: inline-block; + background: rgba(0, 0, 0, 0.03); + color: rgba(0, 0, 0, 0.76); + font-size: 11px; + letter-spacing: .25px; + line-height: 16px; + padding: 2px 8px; border-radius: 10px; - line-height: 22px; - height: 20px; - background: #fff; - color: $tb-primary-color; - padding-left: 6px; - padding-right: 6px; - margin-left: -6px; + border: 1px solid rgba(0, 0, 0, 0.05); + opacity: 1; + transition: opacity $sidenav-anim-timing; } } diff --git a/ui-ngx/src/app/modules/home/menu/menu-link.component.ts b/ui-ngx/src/app/modules/home/menu/menu-link.component.ts index 95abc6623b..46f0796417 100644 --- a/ui-ngx/src/app/modules/home/menu/menu-link.component.ts +++ b/ui-ngx/src/app/modules/home/menu/menu-link.component.ts @@ -14,8 +14,9 @@ /// limitations under the License. /// -import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { MenuSection } from '@core/services/menu.models'; +import { coerceBoolean } from '@shared/decorators/coercion'; @Component({ selector: 'tb-menu-link', @@ -24,14 +25,15 @@ import { MenuSection } from '@core/services/menu.models'; changeDetection: ChangeDetectionStrategy.OnPush, standalone: false }) -export class MenuLinkComponent implements OnInit { +export class MenuLinkComponent { @Input() section: MenuSection; - constructor() { - } + @Input() + @coerceBoolean() + collapsed = false; - ngOnInit() { + constructor() { } } diff --git a/ui-ngx/src/app/modules/home/menu/menu-toggle.component.html b/ui-ngx/src/app/modules/home/menu/menu-toggle.component.html index 2223a99062..850409b964 100644 --- a/ui-ngx/src/app/modules/home/menu/menu-toggle.component.html +++ b/ui-ngx/src/app/modules/home/menu/menu-toggle.component.html @@ -15,7 +15,19 @@ limitations under the License. --> - @if (section.icon !== null) { {{section.icon}} @@ -25,9 +37,23 @@ [class.tb-toggled]="section.opened">
    - @for (page of section.pages; track trackBySectionPages($index, page)) { + @for (page of section.pages; track page.id) {
  • }
+ + +
+
+ {{section.customTranslate ? (section.name | customTranslate) : (section.name | translate)}} +
+ @for (page of section.pages; track page.id) { + + {{page.customTranslate ? (page.name | customTranslate) : (page.name | translate)}} + + } +
+
diff --git a/ui-ngx/src/app/modules/home/menu/menu-toggle.component.scss b/ui-ngx/src/app/modules/home/menu/menu-toggle.component.scss index faa0d01ff2..2d05fb283f 100644 --- a/ui-ngx/src/app/modules/home/menu/menu-toggle.component.scss +++ b/ui-ngx/src/app/modules/home/menu/menu-toggle.component.scss @@ -18,10 +18,15 @@ :host ::ng-deep { .tb-button-toggle { + &.tb-toggled { + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + --mat-button-text-label-text-weight: 500; + } .tb-toggle-icon { display: inline-block; - width: 15px; - min-width: 15px; + width: 12px; + min-width: 12px; + font-size: 12px; margin: auto 0 auto auto; background-size: 100% auto; transition: transform .3s ease-in-out; @@ -34,17 +39,16 @@ right: 44px; top: 4px; content: "NEW"; - font-size: 12px; - letter-spacing: .03125em; - display: inline-block; + background: rgba(0, 0, 0, 0.03); + color: rgba(0, 0, 0, 0.76); + font-size: 11px; + letter-spacing: .25px; + line-height: 16px; + padding: 2px 8px; border-radius: 10px; - line-height: 22px; - height: 20px; - background: #fff; - color: $tb-primary-color; - padding-left: 6px; - padding-right: 6px; - margin-left: -6px; + border: 1px solid rgba(0, 0, 0, 0.05); + opacity: 1; + transition: opacity $sidenav-anim-timing; } } @@ -58,10 +62,39 @@ transition-property: height; a.mat-mdc-button { - padding: 0 16px 0 32px; - font-weight: 500; - text-transform: none !important; - text-rendering: optimizeLegibility; + .mat-icon { + visibility: hidden; + } + } + } +} + +.tb-toggle-menu-items { + min-width: 250px; + display: flex; + flex-direction: column; + .tb-menu-toggle-header { + display: flex; + align-items: center; + cursor: default; + font-weight: 500; + font-size: 14px; + line-height: 20px; + height: 40px; + padding: 8px 16px; + border-bottom: 1px solid rgba(0, 0, 0, 0.12); + } + a.mat-mdc-button { + border-bottom: none; + &:hover { + background-color: rgba(0, 0, 0, .07); + border-bottom: none; + } + &:focus { + border-bottom: none; + } + &.tb-active { + background-color: rgba(0, 0, 0, .05); } } } diff --git a/ui-ngx/src/app/modules/home/menu/menu-toggle.component.ts b/ui-ngx/src/app/modules/home/menu/menu-toggle.component.ts index 4415e9f580..9a17b8ecee 100644 --- a/ui-ngx/src/app/modules/home/menu/menu-toggle.component.ts +++ b/ui-ngx/src/app/modules/home/menu/menu-toggle.component.ts @@ -14,12 +14,12 @@ /// limitations under the License. /// -import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { MenuSection } from '@core/services/menu.models'; -import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { ActionPreferencesUpdateOpenedMenuSection } from '@core/auth/auth.actions'; +import { coerceBoolean } from '@shared/decorators/coercion'; @Component({ selector: 'tb-menu-toggle', @@ -28,19 +28,19 @@ import { ActionPreferencesUpdateOpenedMenuSection } from '@core/auth/auth.action changeDetection: ChangeDetectionStrategy.OnPush, standalone: false }) -export class MenuToggleComponent implements OnInit { +export class MenuToggleComponent { @Input() section: MenuSection; - constructor(private router: Router, - private store: Store) { - } + @Input() + @coerceBoolean() + collapsed = false; - ngOnInit() { + constructor(private store: Store) { } sectionHeight(): string { - if (this.section.opened) { + if (this.section.opened && !this.collapsed) { return this.section.pages.length * 40 + 'px'; } else { return '0px'; @@ -49,11 +49,22 @@ export class MenuToggleComponent implements OnInit { toggleSection(event: MouseEvent) { event.stopPropagation(); - this.section.opened = !this.section.opened; - this.store.dispatch(new ActionPreferencesUpdateOpenedMenuSection({path: this.section.path, opened: this.section.opened})); + if (this.collapsed) { + event.preventDefault(); + } else { + this.section.opened = !this.section.opened; + this.store.dispatch(new ActionPreferencesUpdateOpenedMenuSection({ + path: this.section.path, + opened: this.section.opened + })); + } } - trackBySectionPages(index: number, section: MenuSection){ - return section.id; + toggleSectionActive(): boolean { + if (this.collapsed) { + return this.section.active; + } else { + return false; + } } } diff --git a/ui-ngx/src/app/modules/home/menu/side-menu.component.html b/ui-ngx/src/app/modules/home/menu/side-menu.component.html index 34304319ae..949467b6cc 100644 --- a/ui-ngx/src/app/modules/home/menu/side-menu.component.html +++ b/ui-ngx/src/app/modules/home/menu/side-menu.component.html @@ -15,15 +15,18 @@ limitations under the License. --> -
    - @for (section of menuSections$ | async; track trackByMenuSection($index, section)) { +
      + @for (section of menuSections$ | async; track section.id) {
    • - @switch (section.type === 'link') { - @case (true) { - + @switch (section.type) { + @case ('link') { + } - @case (false) { - + @case ('toggle') { + + } + @case ('divider') { + } }
    • diff --git a/ui-ngx/src/app/modules/home/menu/side-menu.component.scss b/ui-ngx/src/app/modules/home/menu/side-menu.component.scss index b5b1016dc8..7e89cbf61c 100644 --- a/ui-ngx/src/app/modules/home/menu/side-menu.component.scss +++ b/ui-ngx/src/app/modules/home/menu/side-menu.component.scss @@ -13,23 +13,44 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +@import "constants"; + :host { width: 100%; } :host ::ng-deep { - .tb-side-menu, + .tb-side-menu { + padding: 12px 0; + margin: 0; + list-style: none; + --mat-button-text-label-text-weight: 400; + &.tb-collapsed { + a.mat-mdc-button.mat-mdc-button-base { + padding-right: 0; + min-width: 0; + span.mdc-button__label { + opacity: 0; + } + &.is-new::after { + opacity: 0; + } + } + } + .mat-divider.mat-divider-horizontal { + margin-top: 12px; + margin-bottom: 12px; + } + } + .tb-side-menu ul { padding: 0; margin-top: 0; list-style: none; } - .tb-side-menu > li { - border-bottom: 1px solid rgba(0, 0, 0, .12); - } - a.mat-mdc-button.mat-mdc-button-base { display: inline-flex; width: 100%; @@ -39,15 +60,16 @@ line-height: 40px; border-radius: 0; padding: 0 16px; - &:hover { + --mat-button-text-label-text-color: rgba(0, 0, 0, .76); + &:hover, &.tb-hovered { + background-color: rgba(0, 0, 0, .07); border-bottom: none; - background-color: rgba(255,255,255,0.08); } &:focus { border-bottom: none; } &.tb-active { - background-color: rgba(255, 255, 255, .15); + background-color: rgba(0, 0, 0, .05); } .mat-icon { margin-right: 8px; @@ -61,6 +83,8 @@ text-overflow: ellipsis; white-space: nowrap; display: inline-flex; + opacity: 1; + transition: opacity $sidenav-anim-timing; & > span { overflow: hidden; text-overflow: ellipsis; diff --git a/ui-ngx/src/app/modules/home/menu/side-menu.component.ts b/ui-ngx/src/app/modules/home/menu/side-menu.component.ts index f266cee1a8..d3369ba7e5 100644 --- a/ui-ngx/src/app/modules/home/menu/side-menu.component.ts +++ b/ui-ngx/src/app/modules/home/menu/side-menu.component.ts @@ -14,9 +14,9 @@ /// limitations under the License. /// -import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { MenuService } from '@core/services/menu.service'; -import { MenuSection } from '@core/services/menu.models'; +import { coerceBoolean } from '@shared/decorators/coercion'; @Component({ selector: 'tb-side-menu', @@ -25,18 +25,15 @@ import { MenuSection } from '@core/services/menu.models'; changeDetection: ChangeDetectionStrategy.OnPush, standalone: false }) -export class SideMenuComponent implements OnInit { +export class SideMenuComponent { + + @Input() + @coerceBoolean() + collapsed = false; menuSections$ = this.menuService.menuSections(); constructor(private menuService: MenuService) { } - trackByMenuSection(index: number, section: MenuSection){ - return section.id; - } - - ngOnInit() { - } - } diff --git a/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts b/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts index d2322a6b4a..700ee2b2e9 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts +++ b/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts @@ -103,7 +103,7 @@ const routes: Routes = [ component: ImageGalleryComponent, data: { auth: [Authority.TENANT_ADMIN, Authority.SYS_ADMIN], - title: 'image.gallery', + title: 'image.images', imageSubType: ResourceSubType.IMAGE } } @@ -157,7 +157,7 @@ const routes: Routes = [ component: EntitiesTableComponent, data: { auth: [Authority.TENANT_ADMIN, Authority.SYS_ADMIN], - title: 'resource.resources-library', + title: 'resource.files', }, resolve: { entitiesTableConfig: ResourcesLibraryTableConfigResolver @@ -194,7 +194,7 @@ const routes: Routes = [ component: EntitiesTableComponent, data: { auth: [Authority.TENANT_ADMIN, Authority.SYS_ADMIN], - title: 'javascript.javascript-library', + title: 'javascript.scripts', }, resolve: { entitiesTableConfig: JsLibraryTableConfigResolver @@ -227,7 +227,10 @@ const routes: Routes = [ auth: [Authority.SYS_ADMIN, Authority.TENANT_ADMIN], showMainLoadingBar: false, breadcrumb: { - menuId: MenuId.settings + menuIdByAuthority: { + SYS_ADMIN: MenuId.platform, + TENANT_ADMIN: MenuId.settings + } } }, children: [ diff --git a/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/client-dialog.component.html b/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/client-dialog.component.html index fc26b51e86..580dd004e0 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/client-dialog.component.html +++ b/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/client-dialog.component.html @@ -16,7 +16,7 @@ --> - +

      {{ 'admin.oauth2.add-client' | translate }}

      diff --git a/ui-ngx/src/app/modules/home/pages/admin/queue/queue.component.html b/ui-ngx/src/app/modules/home/pages/admin/queue/queue.component.html index 2a5c55f3e8..b86ecd61e7 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/queue/queue.component.html +++ b/ui-ngx/src/app/modules/home/pages/admin/queue/queue.component.html @@ -16,20 +16,20 @@ -->
      - -
      - - -
      - - - - - -
      - - - - - @if (edgesSupportEnabled()) { - } -
      - - - - - - - - -
      - - - - - - - -
      - - - - - - - - - -
      - - - - } @else { - - - - - -
      - - -
      - - - @if (!isImport) { - - - - - - - -
      - - -
      - - - - - @if (loginAsUserEnabled$ | async) { - } -
      - +
      + +
      + + @if (!isReadOnly) { - - +
      + + + +
      - - - - - -