validaciones en perfil completo

parent f5477a32
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class UserProfilesService {
private userProfilesSubject: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);
userProfiles$: Observable<string[]> = this.userProfilesSubject.asObservable();
constructor() {}
setUserProfiles(profiles: string[]) {
this.userProfilesSubject.next(profiles);
}
}
......@@ -13,6 +13,7 @@ import { throwError, timer } from 'rxjs';
import { catchError, switchMap, timeout } from 'rxjs/operators';
import { AuthorizationService } from './AuthorizationService';
import { AccesoNoAutorizadoComponent } from 'src/app/modules/main/pages/programa/opciones/AccesoNoAutorizado/AccesoNoAutorizado.component';
import { UserProfilesService } from './UserProfilesService';
@Injectable({
providedIn: 'root',
})
......@@ -28,6 +29,7 @@ export class AuthService {
private userProfilesSubject: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);
userProfiles$: Observable<string[]> = this.userProfilesSubject.asObservable();
formularioEnviado: boolean;
userProfiles: string[];
constructor(
private oAuthService: OAuthService,
......@@ -35,13 +37,22 @@ export class AuthService {
private globalUserService: GlobalUserService,
private httpClient: HttpClient,
private router: Router,
private dialog: MatDialog
private dialog: MatDialog,
private userProfilesService: UserProfilesService,
) {
this.configureOauthService();
// Establecer intervalo de renovación del token
const refreshTokenInterval = setInterval(() => {
this.checkAndRefreshToken();
}, 300000); // 5 minutos en milisegundos
}
get tokenClaims(): TokenClaim {
return {
......@@ -130,7 +141,11 @@ private getUserProfiles(email: string) {
this.httpClient.get<string[]>(`http://localhost:8080/api/v1.0/usuario/findPerfilesByUsuarioEmail/${email}`).subscribe(
(profiles: string[]) => {
this.setGlobalUserProfiles(profiles); // Actualiza los perfiles del usuario
this.isUiEnabled = true; // Habilitar la interfaz una vez que se completó la verificación
this.isUiEnabled = true;
this.userProfiles = profiles; // Habilitar la interfaz una vez que se completó la verificación
console.log('Perfiles del usuario en AuthService:', profiles);
// Asigna los perfiles a la propiedad userProfiles
this.userProfilesService.setUserProfiles(profiles); // Actualiza los perfiles en el servicio compartido
},
(error) => {
......@@ -138,8 +153,11 @@ private getUserProfiles(email: string) {
}
);
}
setUserProfiles(profiles: string[]) {
this.userProfilesSubject.next(profiles);
}
private setGlobalUserProfiles(profiles: string[]) {
setGlobalUserProfiles(profiles: string[]) {
this.userProfilesSubject.next(profiles);
}
......@@ -172,6 +190,7 @@ private setGlobalUserProfiles(profiles: string[]) {
}
public isLoggedIn(): boolean {
if (this.oAuthService.getAccessToken() === null) {
return false;
......@@ -202,6 +221,25 @@ private setGlobalUserProfiles(profiles: string[]) {
return typeof idToken['sub'] !== 'undefined' ? idToken['sub'].toString() : '';
}
}
private async checkAndRefreshToken() {
const accessTokenExpiration = this.oAuthService.getAccessTokenExpiration();
const currentTime = new Date().getTime();
// Renueva el token si está a punto de expirar en los próximos X segundos (por ejemplo, 300 segundos)
const refreshThreshold = 300 * 1000; // 300 segundos en milisegundos
if (accessTokenExpiration - currentTime < refreshThreshold) {
try {
await this.oAuthService.refreshToken();
console.log('Token renovado exitosamente.');
} catch (error) {
console.error('Error al renovar el token:', error);
}
}
}
}
function ngOnDestroy() {
throw new Error('Function not implemented.');
}
......@@ -10,11 +10,13 @@ export class TokenInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const accessToken = this.oAuthService.getAccessToken();
const email = this.oAuthService.getIdentityClaims()['email'];
const id_token = this.oAuthService.getIdToken();
if (accessToken) {
const headers = request.headers
.set('Authorization', `Bearer ${accessToken}`)
.set('email', email); // envío el email en el encabezado
.set('email', email) // envío el email en el encabezado
.set('id_token', id_token);
const modifiedRequest = request.clone({ headers });
return next.handle(modifiedRequest);
......@@ -24,4 +26,3 @@ export class TokenInterceptor implements HttpInterceptor {
}
}
}
......@@ -231,6 +231,7 @@ import { AccesoDenegadoComponent } from './pages/programa/opciones/AccesoDenegad
import { AccesoNoAutorizadoComponent } from './pages/programa/opciones/AccesoNoAutorizado/AccesoNoAutorizado.component';
import { ErroresComponent } from './pages/programa/opciones/errores/errores.component';
import { MatTooltipModule } from '@angular/material/tooltip';
import { ConfirmarFinalizarComponent } from './pages/programa/opciones/confirmar-finalizar/confirmar-finalizar.component';
@NgModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
declarations: [
......@@ -409,7 +410,8 @@ import { MatTooltipModule } from '@angular/material/tooltip';
ListarDocentesAsignadosComponent,
AccesoDenegadoComponent,
AccesoNoAutorizadoComponent,
ErroresComponent
ErroresComponent,
ConfirmarFinalizarComponent
],
imports: [
MatTooltipModule,
......
......@@ -8,7 +8,7 @@
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
......@@ -22,14 +22,14 @@
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
......@@ -42,20 +42,20 @@
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
......@@ -69,11 +69,11 @@
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
......@@ -86,12 +86,12 @@
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
......@@ -108,7 +108,7 @@
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
......@@ -117,7 +117,7 @@
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
......@@ -135,15 +135,15 @@
border: none;
outline: none;
cursor: pointer;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
......@@ -151,4 +151,23 @@
flex-direction: column;
margin-bottom: 16px;
}
\ No newline at end of file
.Column1 {
padding-left: 0px;
padding-right: 0px;
width: 10px;
white-space: normal;
overflow: visible;
}
.Column {
padding-left: 0px;
padding-right: 0px;
max-width: 100%;
white-space: inherit;
/* overflow: visible;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; */
}
......@@ -5,7 +5,7 @@
<!-- Control de fechas inicio -->
<div class="save-button">
<button mat-raised-button class="botones" color="primary" *ngIf="!cambio" (click)="cambiar()">Editar</button>
<button mat-raised-button class="botones"
<button mat-raised-button class="botones"
[disabled]="myForm.invalid" color="primary" *ngIf="cambio">Guardar</button>
<span class="separator"></span>
<button mat-raised-button class="botones" color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button>
......@@ -57,28 +57,28 @@
<ng-container [formGroup]="dynamicForm" (ngSubmit)="onSubmit()" matColumnDef="Valoracion"
class="Column" >
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header> Valoración</th>
<td class="Column" mat-cell *matCellDef="let dato" let i=index>
<mat-form-field class="form-field">
<mat-label>Seleccione un Item</mat-label>
<mat-label>Seleccione un Item</mat-label>
<mat-select [formControlName]="'valoracion' + dato.uzytavparaeva_id">
<mat-option *ngFor="let opcion of dato.opcionesRespuesta"
<mat-option *ngFor="let opcion of dato.opcionesRespuesta"
[value]="opcion.uzytavaloruzytparametros_id">
{{ opcion.uzytavalorpar_descrip }}
</mat-option>
</mat-select>
</mat-form-field>
</td>
</ng-container>
</ng-container>
<ng-container matColumnDef="Puntaje" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header> Puntaje </th>
<td class="Column" mat-cell *matCellDef="let dato">
{{ getSelectedPuntaje(dato.uzytavparaeva_id) }}
{{ getSelectedPuntaje(dato.uzytavparaeva_id) }}
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
......@@ -92,4 +92,4 @@
</div>
</form>
</div>
\ No newline at end of file
</div>
......@@ -179,9 +179,10 @@ export class AddCalificacionVinculacionComponent implements OnInit {
);
}
openModal() {
openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
disableClose: true,
data: {mensaje: mensaje}
});
dialogRef.afterClosed().subscribe(result => {
......@@ -212,7 +213,7 @@ export class AddCalificacionVinculacionComponent implements OnInit {
this.cabEvalProyService.guardarParametros(this.cabeceraEvalProy).subscribe(() => {
this.enviarEvaluacion(this.cabEvalProyService.obtenerId())
console.log("cabecera enviada ", this.cabeceraEvalProy)
this.openModal()
this.openModal('La Calificación ha sido asignada al Proyecto')
this.guardar()
});
}
......
......@@ -117,20 +117,30 @@ export class ActaDirectorProyectoComponent implements OnInit {
async onSubmit() {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado;
const pdfData = await this.enviarPDF();
if (pdfData.idPDF !== null && pdfData.idPDF !== undefined) {
this.proyecto.uzytavproyec_com_part1_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part1_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal('El PDF ha sido Enviado');
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
try {
const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
if (pdfData.idPDF !== null && pdfData.idPDF !== undefined) {
this.proyecto.uzytavproyec_com_part1_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part1_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal('El PDF ha sido Enviado');
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
}
);
}
);
}
} catch (error) {
}
}
}
......@@ -149,6 +159,7 @@ export class ActaDirectorProyectoComponent implements OnInit {
};
} catch (error) {
this.openModalError('Ya existe un Documento con ese Nombre');
this.archivoEsPDFValido = false;
return {
idPDF: null,
filename: ''
......
......@@ -48,7 +48,7 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10);
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.proyecto = this.mostrarOcultarService.editProyecto;
this.cambio = false;
......@@ -97,19 +97,28 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado;
const pdfData = await this.enviarPDF();
this.proyecto.uzytavproyec_com_part2_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part2_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal();
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
try {
const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
this.proyecto.uzytavproyec_com_part2_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part2_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal();
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
});
}
);
} catch (error) {
}
}
}
......@@ -125,7 +134,8 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
filename: response.fileName
};
} catch (error) {
this.openModalError('¡Este PDF ya se ha subido!');
this.openModalError('Este PDF ya se ha subido');
this.archivoEsPDFValido = false;
return {
idPDF: null,
filename: ''
......
......@@ -2,31 +2,43 @@
<form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<!-- Información de la institución -->
<div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio" (click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" [disabled]="!archivoEsPDFValido" *ngIf="cambio">Guardar</button>
<button mat-raised-button color="primary" *ngIf="!cambio"
(click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" [disabled]="!archivoEsPDFValido"
*ngIf="cambio">Guardar</button>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button>
<button mat-raised-button color="warn" *ngIf="cambio"
(click)="cancelado()">Cancelar</button>
</div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && !cambio">
<div class="input-container"
*ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && !cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
<input type="file" id="uzytavconvoca_digital" accept=".pdf"
(change)="onFileChange($event)" formControlName="archivo">
</div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && cambio">
<div class="input-container"
*ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
<input type="file" id="uzytavconvoca_digital" accept=".pdf"
(change)="onFileChange($event)" formControlName="archivo">
</div>
<button class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && !cambio">
<img src="../../../../../../../assets/img/icons/pdf.png" style="width: 50px; height: 50px;"
<button class="input-container"
*ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && !cambio">
<img src="../../../../../../../assets/img/icons/pdf.png"
style="width: 50px; height: 50px;"
(click)="verPDF(proyecto.uzytavproyec_aprob_con_dep_url,proyecto.uzytavproyec_aprob_con_dep_nom)"
aria-placeholder="Ver PDF">Descargar PDF
</button>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && cambio">
<div class="input-container"
*ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
<input type="file" id="uzytavconvoca_digital" accept=".pdf"
(change)="onFileChange($event)" formControlName="archivo">
</div>
</form>
</div>
......@@ -50,7 +50,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10);
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.proyecto = this.mostrarOcultarService.editProyecto;
this.cambio = false;
......@@ -72,6 +72,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
this.file = fileList[0];
if (!this.validarArchivo(this.file)) {
this.openModalError('¡Por favor, selecciona un archivo PDF!');
this.archivoEsPDFValido = false;
return;
} else {
this.archivoEsPDFValido = true;
......@@ -85,10 +86,11 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
}
openModal() {
openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px',
disableClose: true
disableClose: true,
data: { mensaje: mensaje }
});
dialogRef.afterClosed().subscribe(result => {
......@@ -99,22 +101,53 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
async onSubmit() {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado;
const pdfData = await this.enviarPDF();
this.proyecto.uzytavproyec_aprob_con_dep_url = pdfData.idPDF;
this.proyecto.uzytavproyec_aprob_con_dep_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal();
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
try {
const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
this.proyecto.uzytavproyec_aprob_con_dep_url = pdfData.idPDF;
this.proyecto.uzytavproyec_aprob_con_dep_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal('Acta de Consejo de Departamento Enviada');
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
}
);
}
);
} catch (error) {
// Manejo de error en el envío del PDF
}
}
}
/* async onSubmit() {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado;
const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
this.proyecto.uzytavproyec_aprob_con_dep_url = pdfData.idPDF;
this.proyecto.uzytavproyec_aprob_con_dep_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal('Acta de Consejo de Departamento Enviada');
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
}
);
}
}
}*/
async enviarPDF() {
const formData = new FormData();
formData.append('files', this.file);
......@@ -127,7 +160,8 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
filename: response.fileName
};
} catch (error) {
this.openModalError('¡Este PDF ya se ha subido!');
this.openModalError('Este PDF ya se ha subido');
this.archivoEsPDFValido = false;
return {
idPDF: null,
filename: ''
......
......@@ -5,8 +5,7 @@
<div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio"
(click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" *ngIf="cambio"
>Guardar</button>
<button mat-raised-button color="primary" *ngIf="cambio" [disabled]="myForm.invalid">Guardar</button>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio"
(click)="cancelado()">Cancelar</button>
......@@ -19,10 +18,13 @@
<ckeditor formControlName="viabilidad" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
<div *ngIf="myForm.get('viabilidad').hasError('maxlength')"
<div *ngIf="myForm.get('viabilidad').hasError('maxlength')"
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
<div *ngIf="myForm.get('viabilidad').hasError('required') && (myForm.get('viabilidad').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div>
<div class="editor-separator"></div>
<div>
......@@ -31,22 +33,28 @@
<ckeditor formControlName="perderia" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
<div *ngIf="myForm.get('perderia').hasError('maxlength')"
<div *ngIf="myForm.get('perderia').hasError('maxlength')"
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
<div *ngIf="myForm.get('perderia').hasError('required') && (myForm.get('perderia').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div>
<div class="editor-separator"></div>
<div>
<label class="label-negrita"> ¿Cuáles son los resultados o impactos
esperados del proyecto?</label>
<ckeditor formControlName="resultadoO" class="custom-ckeditor"
<ckeditor formControlName="resultadoO" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
<div *ngIf="myForm.get('resultadoO').hasError('maxlength')"
<div *ngIf="myForm.get('resultadoO').hasError('maxlength')"
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
<div *ngIf="myForm.get('resultadoO').hasError('required') && (myForm.get('resultadoO').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div>
</mat-card-content>
</mat-card>
......
......@@ -820,6 +820,5 @@ export class PdfComponent implements OnInit {
}
......@@ -68,7 +68,7 @@ export class ComisionEvaComponent implements OnInit {
localStorage.setItem('comisionId',idcab.toString());
localStorage.setItem('parametrosId',idpara.toString());
this.router.navigate(['main/Asignar-Comision']);
this.openModal();
this.openModal('La Comisión de Evaluación ha sido Asignada');
});
} catch (error) {
console.log(error);
......@@ -83,7 +83,7 @@ export class ComisionEvaComponent implements OnInit {
});
this.paraS.obtenerParametrosInicial().subscribe(data => {
this.parametroA = data;
this.parametroA = data.filter(item => item.uzytavconparaeva_estado === 'A');
});
this.proyecS.obtenerParametros().subscribe(data => {
......@@ -115,10 +115,11 @@ export class ComisionEvaComponent implements OnInit {
this.mostrarDiv[i] = !this.mostrarDiv[i];
}
openModal() {
openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px',
disableClose: true
disableClose: true,
data: {mensaje: mensaje}
});
dialogRef.afterClosed().subscribe(result => {
......
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ConfirmarFinalizarComponent } from './confirmar-finalizar.component';
describe('ConfirmarFinalizarComponent', () => {
let component: ConfirmarFinalizarComponent;
let fixture: ComponentFixture<ConfirmarFinalizarComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ConfirmarFinalizarComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(ConfirmarFinalizarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'vex-confirmar-finalizar',
templateUrl: './confirmar-finalizar.component.html',
styleUrls: ['./confirmar-finalizar.component.css']
})
export class ConfirmarFinalizarComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment