New layout sidebar and Change user password
parent
48867b2c14
commit
60c4d61fcf
|
@ -32,6 +32,7 @@ import {MatSelectModule} from '@angular/material/select';
|
||||||
import { EditUserModalComponent } from './components/pages/admin/users/users/edit-user-modal/edit-user-modal.component';
|
import { EditUserModalComponent } from './components/pages/admin/users/users/edit-user-modal/edit-user-modal.component';
|
||||||
import { AddRoleModalComponent } from './components/pages/admin/roles/roles/add-role-modal/add-role-modal.component';
|
import { AddRoleModalComponent } from './components/pages/admin/roles/roles/add-role-modal/add-role-modal.component';
|
||||||
import { DeleteRoleModalComponent } from './components/pages/admin/roles/roles/delete-role-modal/delete-role-modal.component';
|
import { DeleteRoleModalComponent } from './components/pages/admin/roles/roles/delete-role-modal/delete-role-modal.component';
|
||||||
|
import { ChangePasswordModalComponent } from './components/pages/admin/users/users/change-password-modal/change-password-modal.component';
|
||||||
|
|
||||||
|
|
||||||
@NgModule({ declarations: [
|
@NgModule({ declarations: [
|
||||||
|
@ -49,7 +50,8 @@ import { DeleteRoleModalComponent } from './components/pages/admin/roles/roles/d
|
||||||
AddUserModalComponent,
|
AddUserModalComponent,
|
||||||
EditUserModalComponent,
|
EditUserModalComponent,
|
||||||
AddRoleModalComponent,
|
AddRoleModalComponent,
|
||||||
DeleteRoleModalComponent
|
DeleteRoleModalComponent,
|
||||||
|
ChangePasswordModalComponent
|
||||||
],
|
],
|
||||||
bootstrap: [AppComponent],
|
bootstrap: [AppComponent],
|
||||||
imports: [BrowserModule,
|
imports: [BrowserModule,
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
:host{
|
|
||||||
display: block;
|
|
||||||
background-color: rgb(126, 126, 126);
|
|
||||||
grid-area: header;
|
|
||||||
}
|
|
||||||
|
|
||||||
mat-toolbar {
|
mat-toolbar {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
height: 50px;
|
||||||
|
box-shadow: 10px 0 10px -5px rgba(0, 0, 0, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-button-row {
|
.navbar-button-row {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<mat-toolbar>
|
<mat-toolbar>
|
||||||
<button mat-mini-fab color="primary" aria-label="menu">
|
<button mat-mini-fab color="primary" aria-label="menu" (click)="onToggleSidebar()">
|
||||||
<mat-icon>menu</mat-icon>
|
<mat-icon>person</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<span class="navbar-tittle" routerLink="/dashboard">Opengnsys webconsole</span>
|
<span class="navbar-tittle" routerLink="/dashboard">Opengnsys webconsole</span>
|
||||||
<div class="navbar-button-row">
|
<div class="navbar-button-row">
|
||||||
|
@ -13,7 +13,6 @@
|
||||||
<button mat-flat-button color="primary">Buscar</button>
|
<button mat-flat-button color="primary">Buscar</button>
|
||||||
<button mat-flat-button color="primary">Calendario</button>
|
<button mat-flat-button color="primary">Calendario</button>
|
||||||
<button mat-flat-button color="primary">Ayuda</button>
|
<button mat-flat-button color="primary">Ayuda</button>
|
||||||
<button mat-flat-button color="accent" routerLink="/admin" *ngIf="isSuperAdmin">Admin</button>
|
|
||||||
<button mat-flat-button color="warn" routerLink="/auth/login">Salir</button>
|
<button mat-flat-button color="warn" routerLink="/auth/login">Salir</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, EventEmitter, OnInit, Output } from '@angular/core';
|
||||||
import {jwtDecode} from 'jwt-decode';
|
import {jwtDecode} from 'jwt-decode';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -7,20 +7,14 @@ import {jwtDecode} from 'jwt-decode';
|
||||||
styleUrls: ['./header.component.css'],
|
styleUrls: ['./header.component.css'],
|
||||||
})
|
})
|
||||||
export class HeaderComponent implements OnInit {
|
export class HeaderComponent implements OnInit {
|
||||||
isSuperAdmin: boolean = false;
|
@Output() toggleSidebar = new EventEmitter<void>();
|
||||||
|
|
||||||
|
onToggleSidebar() {
|
||||||
|
this.toggleSidebar.emit();
|
||||||
|
}
|
||||||
|
|
||||||
constructor() { }
|
constructor() { }
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
const token = localStorage.getItem('loginToken');
|
|
||||||
if (token) {
|
|
||||||
try {
|
|
||||||
const decodedToken: any = jwtDecode(token);
|
|
||||||
console.log('Decoded JWT:', decodedToken);
|
|
||||||
this.isSuperAdmin = decodedToken.roles.includes('ROLE_SUPER_ADMIN');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error decoding JWT:', error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
:host{
|
|
||||||
width: 100%;
|
|
||||||
display: grid;
|
|
||||||
grid-template-areas:
|
|
||||||
"header"
|
|
||||||
"content"
|
|
||||||
"footer";
|
|
||||||
}
|
|
||||||
.content-wrapper{
|
.content-wrapper{
|
||||||
display: block;
|
display: block;
|
||||||
grid-area: content;
|
grid-area: content;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<app-header></app-header>
|
<app-header (toggleSidebar)="toggleSidebar()"></app-header>
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
|
<app-sidebar [isVisible]="isSidebarVisible"></app-sidebar>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<router-outlet />
|
<router-outlet />
|
||||||
</div>
|
</div>
|
|
@ -5,5 +5,9 @@ import { Component } from '@angular/core';
|
||||||
styleUrl: './main-layout.component.css'
|
styleUrl: './main-layout.component.css'
|
||||||
})
|
})
|
||||||
export class MainLayoutComponent {
|
export class MainLayoutComponent {
|
||||||
|
isSidebarVisible: boolean = false;
|
||||||
|
|
||||||
|
toggleSidebar() {
|
||||||
|
this.isSidebarVisible = !this.isSidebarVisible;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
:host{
|
.sidebar {
|
||||||
display: block;
|
width: 250px;
|
||||||
background-color: rgb(85, 85, 85);
|
position: fixed;
|
||||||
grid-area: sidebar;
|
top: 50px;
|
||||||
|
left: -260px;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgb(245, 245, 245);
|
||||||
|
transition: left 0.3s ease-in-out;
|
||||||
|
box-shadow: 10px 0 10px -5px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar.visible {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-content{
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1 +1,8 @@
|
||||||
<p>sidebar works!</p>
|
<div class="sidebar" [class.visible]="isVisible">
|
||||||
|
<div class="sidebar-content">
|
||||||
|
<h4>Bienvenido {{username}}</h4>
|
||||||
|
<button mat-flat-button color="primary" (click)="editUser(username)">Editar usuario</button>
|
||||||
|
<button mat-flat-button color="accent" routerLink="/admin" *ngIf="isSuperAdmin">Admin</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
|
import { jwtDecode } from 'jwt-decode';
|
||||||
|
import { EditUserModalComponent } from '../../pages/admin/users/users/edit-user-modal/edit-user-modal.component';
|
||||||
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
|
import { ChangePasswordModalComponent } from '../../pages/admin/users/users/change-password-modal/change-password-modal.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-sidebar',
|
selector: 'app-sidebar',
|
||||||
|
@ -6,6 +10,32 @@ import { Component } from '@angular/core';
|
||||||
styleUrl: './sidebar.component.css'
|
styleUrl: './sidebar.component.css'
|
||||||
})
|
})
|
||||||
export class SidebarComponent {
|
export class SidebarComponent {
|
||||||
hovered = false;
|
@Input() isVisible: boolean = false;
|
||||||
|
isSuperAdmin: boolean = false;
|
||||||
|
username: string = localStorage.getItem('username') ?? '';
|
||||||
|
|
||||||
|
constructor(public dialog: MatDialog) {}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
const token = localStorage.getItem('loginToken');
|
||||||
|
if (token) {
|
||||||
|
try {
|
||||||
|
const decodedToken: any = jwtDecode(token);
|
||||||
|
console.log('Decoded JWT:', decodedToken);
|
||||||
|
this.isSuperAdmin = decodedToken.roles.includes('ROLE_SUPER_ADMIN');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error decoding JWT:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
editUser(user: any) {
|
||||||
|
// Implementar la lógica de edición
|
||||||
|
const dialogRef = this.dialog.open(ChangePasswordModalComponent, {
|
||||||
|
data: { user: user }
|
||||||
|
});
|
||||||
|
dialogRef.componentInstance.userEdited.subscribe(() => {
|
||||||
|
console.log("User edited successfully!")
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//https://medium.com/@yevhen.chmykhun.01/angular-blueprint-application-layout-b1680ca888e0
|
|
|
@ -37,6 +37,7 @@ export class LoginComponent {
|
||||||
if (res.token) {
|
if (res.token) {
|
||||||
localStorage.setItem('loginToken', res.token);
|
localStorage.setItem('loginToken', res.token);
|
||||||
localStorage.setItem('refreshToken', res.refreshToken);
|
localStorage.setItem('refreshToken', res.refreshToken);
|
||||||
|
localStorage.setItem('username', this.loginObj.username);
|
||||||
this.router.navigateByUrl('/dashboard');
|
this.router.navigateByUrl('/dashboard');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -25,9 +25,8 @@ export class EditUserModalComponent implements OnInit {@Output() userEdited = ne
|
||||||
private fb: FormBuilder,
|
private fb: FormBuilder,
|
||||||
private userService: UserService // Inyecta el servicio
|
private userService: UserService // Inyecta el servicio
|
||||||
) {
|
) {
|
||||||
console.log(this.data)
|
|
||||||
this.userForm = this.fb.group({
|
this.userForm = this.fb.group({
|
||||||
username: [this.data.user.username],
|
username: [this.data],
|
||||||
password: [''],
|
password: [''],
|
||||||
role: this.data.user.allowedOrganizationalUnits,
|
role: this.data.user.allowedOrganizationalUnits,
|
||||||
organizationalUnit: [[this.data.user.allowedOrganizationalUnits], Validators.required]
|
organizationalUnit: [[this.data.user.allowedOrganizationalUnits], Validators.required]
|
||||||
|
|
Loading…
Reference in New Issue