Skip to content
Snippets Groups Projects
Commit 44d9631c authored by Florent POITTEVIN's avatar Florent POITTEVIN
Browse files

refacto: on main toolbar avoid multiple subscription and dispatch actions

parent 7f2a7d43
No related branches found
No related tags found
No related merge requests found
Showing
with 214 additions and 92 deletions
<div class="app-wrapper"> <div class="app-wrapper">
<div class="header"> <div class="header">
<!-- TODO Avoid triple event dispatched--> <dlcm-main-toolbar [logged]="isLoggedObs | async"
<dlcm-main-toolbar-desktop-horizontal [logged]="isLoggedObs | async" [currentPath]="currentModule"
[currentPath]="currentModule" [currentLanguage]="appLanguageObs | async"
[currentLanguage]="appLanguageObs | async" [theme]="themeObs | async"
[theme]="themeObs | async" [numberArchiveInCart]="numberArchiveInCartObs | async"
[numberArchiveInCart]="numberArchiveInCartObs | async" [numberPendingRequestNotificationInbox]="sessionStorageHelper.getListItem(sessionStorageEnum.notificationInboxPending).length"
[numberPendingRequestNotificationInbox]="sessionStorageHelper.getListItem(sessionStorageEnum.notificationInboxPending).length" [numberMyOrderReadyNew]="sessionStorageHelper.getListItem(sessionStorageEnum.newOrderAvailable).length"
[numberMyOrderReadyNew]="sessionStorageHelper.getListItem(sessionStorageEnum.newOrderAvailable).length" [userRoles]="userRolesObs | async"
[userRoles]="userRolesObs | async" [user]="currentUserObs | async"
[user]="currentUserObs | async" (languageChange)="useLanguage($event)"
(languageChange)="useLanguage($event)" (navigateChange)="navigate($event)"
(navigateChange)="navigate($event)" (logoutChange)="logout()"
(logoutChange)="logout()" (themeChange)="themeChange($event)"
(themeChange)="themeChange($event)" (cartChange)="openCart()"
(cartChange)="openCart()"
> >
</dlcm-main-toolbar-desktop-horizontal> </dlcm-main-toolbar>
<dlcm-main-toolbar-desktop-vertical [logged]="isLoggedObs | async"
[currentPath]="currentModule"
[currentLanguage]="appLanguageObs | async"
[theme]="themeObs | async"
[numberArchiveInCart]="numberArchiveInCartObs | async"
[numberPendingRequestNotificationInbox]="sessionStorageHelper.getListItem(sessionStorageEnum.notificationInboxPending).length"
[numberMyOrderReadyNew]="sessionStorageHelper.getListItem(sessionStorageEnum.newOrderAvailable).length"
[userRoles]="userRolesObs | async"
[user]="currentUserObs | async"
(languageChange)="useLanguage($event)"
(navigateChange)="navigate($event)"
(logoutChange)="logout()"
(themeChange)="themeChange($event)"
(cartChange)="openCart()"
>
</dlcm-main-toolbar-desktop-vertical>
<dlcm-main-toolbar-mobile [logged]="isLoggedObs | async"
[currentPath]="currentModule"
[currentLanguage]="appLanguageObs | async"
[theme]="themeObs | async"
[numberArchiveInCart]="numberArchiveInCartObs | async"
[numberPendingRequestNotificationInbox]="sessionStorageHelper.getListItem(sessionStorageEnum.notificationInboxPending).length"
[numberMyOrderReadyNew]="sessionStorageHelper.getListItem(sessionStorageEnum.newOrderAvailable).length"
[userRoles]="userRolesObs | async"
(languageChange)="useLanguage($event)"
(navigateChange)="navigate($event)"
(logoutChange)="logout()"
(themeChange)="themeChange($event)"
(cartChange)="openCart()"
>
</dlcm-main-toolbar-mobile>
</div> </div>
<div class="body" <div class="body"
[class.ignore-grid]="ignoreGrid" [class.ignore-grid]="ignoreGrid"
......
...@@ -27,26 +27,6 @@ ...@@ -27,26 +27,6 @@
} }
} }
dlcm-main-toolbar-desktop-horizontal {
display: none;
@include respond-to-breakpoint-and-bigger('md') {
display: block;
}
}
dlcm-main-toolbar-mobile {
display: block;
@include respond-to-breakpoint-and-bigger('md') {
display: none;
}
}
dlcm-main-toolbar-desktop-vertical {
display: none;
}
.app-wrapper { .app-wrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
...@@ -135,18 +115,6 @@ ...@@ -135,18 +115,6 @@
@include respond-to-breakpoint-and-bigger('md') { @include respond-to-breakpoint-and-bigger('md') {
.app-wrapper { .app-wrapper {
flex-direction: row; flex-direction: row;
dlcm-main-toolbar-desktop-horizontal {
display: none;
}
dlcm-main-toolbar-desktop-vertical {
display: block;
@include respond-to-breakpoint-and-bigger('md') {
display: block;
}
}
} }
} }
} }
......
...@@ -33,6 +33,7 @@ import {AvatarPresentational} from "@app/components/presentationals/avatar/avata ...@@ -33,6 +33,7 @@ import {AvatarPresentational} from "@app/components/presentationals/avatar/avata
import {BurgerMenuPresentational} from "@app/components/presentationals/main-toolbar/burger-menu/burger-menu.presentational"; import {BurgerMenuPresentational} from "@app/components/presentationals/main-toolbar/burger-menu/burger-menu.presentational";
import {MainToolbarDesktopVerticalPresentational} from "@app/components/presentationals/main-toolbar/main-toolbar-desktop-vertical/main-toolbar-desktop-vertical.presentational"; import {MainToolbarDesktopVerticalPresentational} from "@app/components/presentationals/main-toolbar/main-toolbar-desktop-vertical/main-toolbar-desktop-vertical.presentational";
import {MainToolbarMobilePresentational} from "@app/components/presentationals/main-toolbar/main-toolbar-mobile/main-toolbar-mobile.presentational"; import {MainToolbarMobilePresentational} from "@app/components/presentationals/main-toolbar/main-toolbar-mobile/main-toolbar-mobile.presentational";
import {MainToolbarPresentational} from "@app/components/presentationals/main-toolbar/main-toolbar/main-toolbar.presentational";
import {ThemeSelectorPresentational} from "@app/components/presentationals/theme-selector/theme-selector.presentational"; import {ThemeSelectorPresentational} from "@app/components/presentationals/theme-selector/theme-selector.presentational";
import {UserForm} from "@app/components/presentationals/user-form/user-form"; import {UserForm} from "@app/components/presentationals/user-form/user-form";
import {InMemoryStorage} from "@app/in-memory.storage"; import {InMemoryStorage} from "@app/in-memory.storage";
...@@ -78,12 +79,13 @@ import { ...@@ -78,12 +79,13 @@ import {
import {environment} from "../environments/environment"; import {environment} from "../environments/environment";
import {AppComponent} from "./app.component"; import {AppComponent} from "./app.component";
import {LanguageSelectorPresentational} from "./components/presentationals/language-selector/language-selector.presentational"; import {LanguageSelectorPresentational} from "./components/presentationals/language-selector/language-selector.presentational";
import {MainToolbarDesktopHorizontalPresentational} from "./components/presentationals/main-toolbar/main-toolbar-desktop/main-toolbar-desktop-horizontal-presentational.component"; import {MainToolbarDesktopHorizontalPresentational} from "./components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational";
import {PageNotFoundPresentational} from "./components/presentationals/page-not-found/page-not-found.presentational"; import {PageNotFoundPresentational} from "./components/presentationals/page-not-found/page-not-found.presentational";
const presentationals = [ const presentationals = [
AppComponent, AppComponent,
LanguageSelectorPresentational, LanguageSelectorPresentational,
MainToolbarPresentational,
MainToolbarDesktopHorizontalPresentational, MainToolbarDesktopHorizontalPresentational,
MainToolbarDesktopVerticalPresentational, MainToolbarDesktopVerticalPresentational,
MainToolbarMobilePresentational, MainToolbarMobilePresentational,
......
...@@ -14,7 +14,7 @@ import { ...@@ -14,7 +14,7 @@ import {
import {environment} from "../../../../../environments/environment"; import {environment} from "../../../../../environments/environment";
import {MockTranslatePipe} from "../../../../../test-helpers/mock-translate.pipe"; import {MockTranslatePipe} from "../../../../../test-helpers/mock-translate.pipe";
import {MainToolbarDesktopHorizontalPresentational} from "./main-toolbar-desktop-horizontal-presentational.component"; import {MainToolbarDesktopHorizontalPresentational} from "./main-toolbar-desktop-horizontal.presentational";
describe("MainToolbarDesktopHorizontalPresentational", () => { describe("MainToolbarDesktopHorizontalPresentational", () => {
let component: MainToolbarDesktopHorizontalPresentational; let component: MainToolbarDesktopHorizontalPresentational;
......
...@@ -7,8 +7,8 @@ import {OAuth2Service} from "solidify-frontend"; ...@@ -7,8 +7,8 @@ import {OAuth2Service} from "solidify-frontend";
@Component({ @Component({
selector: "dlcm-main-toolbar-desktop-horizontal", selector: "dlcm-main-toolbar-desktop-horizontal",
templateUrl: "./main-toolbar-desktop-horizontal-presentational.component.html", templateUrl: "./main-toolbar-desktop-horizontal.presentational.html",
styleUrls: ["./main-toolbar-desktop-horizontal-presentational.component.scss"], styleUrls: ["./main-toolbar-desktop-horizontal.presentational.scss"],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class MainToolbarDesktopHorizontalPresentational extends AbstractMainToolbarPresentational { export class MainToolbarDesktopHorizontalPresentational extends AbstractMainToolbarPresentational {
......
...@@ -7,7 +7,7 @@ import { ...@@ -7,7 +7,7 @@ import {
} from "@angular/core/testing"; } from "@angular/core/testing";
import {MatSnackBar} from "@angular/material/snack-bar"; import {MatSnackBar} from "@angular/material/snack-bar";
import {LanguageSelectorPresentational} from "@app/components/presentationals/language-selector/language-selector.presentational"; import {LanguageSelectorPresentational} from "@app/components/presentationals/language-selector/language-selector.presentational";
import {MainToolbarDesktopHorizontalPresentational} from "@app/components/presentationals/main-toolbar/main-toolbar-desktop/main-toolbar-desktop-horizontal-presentational.component"; import {MainToolbarDesktopHorizontalPresentational} from "@app/components/presentationals/main-toolbar/main-toolbar-desktop-horizontal/main-toolbar-desktop-horizontal.presentational";
import { import {
ENVIRONMENT, ENVIRONMENT,
SNACK_BAR, SNACK_BAR,
......
<dlcm-main-toolbar-desktop-horizontal [logged]="logged"
[currentPath]="currentPath"
[currentLanguage]="currentLanguage"
[theme]="theme"
[numberArchiveInCart]="numberArchiveInCart"
[numberPendingRequestNotificationInbox]="numberPendingRequestNotificationInbox"
[numberMyOrderReadyNew]="numberMyOrderReadyNew"
[userRoles]="userRoles"
[user]="user"
(languageChange)="changeLanguage($event)"
(navigateChange)="changeNavigate($event)"
(logoutChange)="logout()"
(themeChange)="changeTheme($event)"
(cartChange)="changeCart()"
>
</dlcm-main-toolbar-desktop-horizontal>
<dlcm-main-toolbar-desktop-vertical [logged]="logged"
[currentPath]="currentPath"
[currentLanguage]="currentLanguage"
[theme]="theme"
[numberArchiveInCart]="numberArchiveInCart"
[numberPendingRequestNotificationInbox]="numberPendingRequestNotificationInbox"
[numberMyOrderReadyNew]="numberMyOrderReadyNew"
[userRoles]="userRoles"
[user]="user"
(languageChange)="changeLanguage($event)"
(navigateChange)="changeNavigate($event)"
(logoutChange)="logout()"
(themeChange)="changeTheme($event)"
(cartChange)="changeCart()"
>
</dlcm-main-toolbar-desktop-vertical>
<dlcm-main-toolbar-mobile [logged]="logged"
[currentPath]="currentPath"
[currentLanguage]="currentLanguage"
[theme]="theme"
[numberArchiveInCart]="numberArchiveInCart"
[numberPendingRequestNotificationInbox]="numberPendingRequestNotificationInbox"
[numberMyOrderReadyNew]="numberMyOrderReadyNew"
[userRoles]="userRoles"
(languageChange)="changeLanguage($event)"
(navigateChange)="changeNavigate($event)"
(logoutChange)="logout()"
(themeChange)="changeTheme($event)"
(cartChange)="changeCart()"
>
</dlcm-main-toolbar-mobile>
\ No newline at end of file
@import "../../../../../sass/abstracts/variables";
@import "../../../../../sass/abstracts/mixins";
dlcm-main-toolbar-desktop-horizontal {
display: none;
@include respond-to-breakpoint-and-bigger('md') {
display: block;
}
}
dlcm-main-toolbar-mobile {
display: block;
@include respond-to-breakpoint-and-bigger('md') {
display: none;
}
}
dlcm-main-toolbar-desktop-vertical {
display: none;
}
:host-context(body[theme='dlcm']), :host-context(body[theme='olos']) {
@include respond-to-breakpoint-and-bigger('md') {
dlcm-main-toolbar-desktop-horizontal {
display: none;
}
dlcm-main-toolbar-desktop-vertical {
display: block;
@include respond-to-breakpoint-and-bigger('md') {
display: block;
}
}
}
}
\ No newline at end of file
import {
ChangeDetectionStrategy,
Component,
Input,
Output,
} from "@angular/core";
import {SharedAbstractPresentational} from "@shared/components/presentationals/shared-abstract/shared-abstract.presentational";
import {ApplicationRoleEnum} from "@shared/enums/application-role.enum";
import {LanguagesEnum} from "@shared/enums/languages.enum";
import {ThemeEnum} from "@shared/enums/theme.enum";
import {UserExtended} from "@shared/models/business/user-extended.model";
import {
BehaviorSubject,
Observable,
} from "rxjs";
import {ObservableUtil} from "solidify-frontend";
@Component({
selector: "dlcm-main-toolbar",
templateUrl: "./main-toolbar.presentational.html",
styleUrls: ["./main-toolbar.presentational.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class MainToolbarPresentational extends SharedAbstractPresentational {
@Input()
logged: boolean = false;
@Input()
currentPath: string;
@Input()
currentLanguage: LanguagesEnum;
@Input()
userRoles: ApplicationRoleEnum[];
@Input()
user: UserExtended;
@Input()
numberArchiveInCart: number;
@Input()
numberMyOrderReadyNew: number;
@Input()
numberPendingRequestNotificationInbox: number;
@Input()
theme: ThemeEnum;
private readonly _themeBS: BehaviorSubject<ThemeEnum | undefined> = new BehaviorSubject<ThemeEnum | undefined>(undefined);
@Output("themeChange")
readonly themeObs: Observable<ThemeEnum | undefined> = ObservableUtil.asObservable(this._themeBS);
// Navigate
private readonly _navigateBS: BehaviorSubject<string | undefined> = new BehaviorSubject<string | undefined>(undefined);
@Output("navigateChange")
readonly navigateObs: Observable<string | undefined> = ObservableUtil.asObservable(this._navigateBS);
// Language
private readonly _languageBS: BehaviorSubject<LanguagesEnum | undefined> = new BehaviorSubject<LanguagesEnum | undefined>(undefined);
@Output("languageChange")
readonly languageObs: Observable<LanguagesEnum | undefined> = ObservableUtil.asObservable(this._languageBS);
// Logout
private readonly _logoutBS: BehaviorSubject<void | undefined> = new BehaviorSubject<void | undefined>(undefined);
@Output("logoutChange")
readonly logoutObs: Observable<void | undefined> = ObservableUtil.asObservable(this._logoutBS);
// Cart
private readonly _cartBS: BehaviorSubject<void | undefined> = new BehaviorSubject<void | undefined>(undefined);
@Output("cartChange")
readonly cartObs: Observable<void | undefined> = ObservableUtil.asObservable(this._cartBS);
changeTheme(theme: ThemeEnum): void {
if (this._themeBS.value !== theme) {
this._themeBS.next(theme);
}
}
changeLanguage(language: LanguagesEnum): void {
if (this._languageBS.value !== language) {
this._languageBS.next(language);
}
}
changeNavigate(navigate: string): void {
this._navigateBS.next(navigate);
}
changeCart(): void {
this._cartBS.next();
}
logout(): void {
this._logoutBS.next();
}
}
...@@ -30,28 +30,28 @@ ...@@ -30,28 +30,28 @@
<script> <script>
var ua = window.navigator.userAgent; var ua = window.navigator.userAgent;
var browserUnnsuported; var browserUnsupported;
var msie = ua.indexOf('MSIE '); var msie = ua.indexOf('MSIE ');
if (msie > -1) { if (msie > -1) {
// IE 10 or older => return version number // IE 10 or older => return version number
browserUnnsuported = "Internet Explorer " + parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); browserUnsupported = "Internet Explorer " + parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
} }
var trident = ua.indexOf('Trident/'); var trident = ua.indexOf('Trident/');
if (trident > -1) { if (trident > -1) {
// IE 11 => return version number // IE 11 => return version number
var rv = ua.indexOf('rv:'); var rv = ua.indexOf('rv:');
browserUnnsuported = "Internet Explorer " + parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); browserUnsupported = "Internet Explorer " + parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
} }
var edge = ua.indexOf('Edge/'); var edge = ua.indexOf('Edge/');
if (edge > -1) { if (edge > -1) {
// Edge (IE 12+) => return version number // Edge (IE 12+) => return version number
browserUnnsuported = "Edge " + parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); browserUnsupported = "Edge " + parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
} }
if (browserUnnsuported) { if (browserUnsupported) {
alert("Your browser " + browserUnnsuported + " is not supported by this application.\nPlease use a browser more recent like Chrome or Firefox."); alert("Your browser " + browserUnsupported + " is not supported by this application.\nPlease use a browser more recent like Chrome or Firefox.");
document.body.style.display = "none"; document.body.style.display = "none";
} }
</script> </script>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment