Skip to content
Commits on Source (12)
......@@ -2,6 +2,8 @@
All notable changes to [ngpr_prodige_contribution](https://gitlab.adullact.net/prodige/ngpr_prodige_contribution) project will be documented in this file.
## [5.0.7](https://gitlab.adullact.net/prodige/ngpr_prodige_contribution/compare/5.0.6...5.0.7) - 2023-03-20
## [5.0.6](https://gitlab.adullact.net/prodige/ngpr_prodige_contribution/compare/5.0.5...5.0.6) - 2023-03-15
## [5.0.5](https://gitlab.adullact.net/prodige/ngpr_prodige_contribution/compare/5.0.4...5.0.5) - 2023-03-08
......
5.0.6
\ No newline at end of file
5.0.7
\ No newline at end of file
......@@ -16,7 +16,7 @@ docker-compose -f $SCRIPTDIR/docker-build/docker-compose.yml up -d
sleep 2 # Wait entrypoint run
# Exec
docker exec --user node:node -w /home/node/app ${DOCKER_NAME}_web /bin/bash -c " \
docker exec --user node:node -w /home/node/app ${DOCKER_NAME}_build_web /bin/bash -c " \
set -e; \
npm run lint;"
......
......@@ -15,13 +15,13 @@ pipeline {
stash includes: 'site/node_modules/', name: 'node_modules', useDefaultExcludes: false, allowEmpty: true
}
}
//stage('Lint') {
// agent any
// steps {
// unstash 'node_modules'
// sh 'cicd/build/1_lint.sh', useDefaultExcludes: false, allowEmpty: true
// }
//}
// stage('Lint') {
// agent any
// steps {
// unstash 'node_modules'
// sh 'cicd/build/1_lint.sh'
// }
// }
stage('Build prod') {
agent any
steps {
......
......@@ -10,6 +10,12 @@ const routes: Routes = [
pathMatch: `full`,
canActivate: [CasGuard],
loadChildren: () => import( `./pages/home/home.module` ).then(({ HomeModule }) => HomeModule ),
}, {
path: `contribute/home/:id`,
pathMatch: `full`,
canActivate: [CasGuard],
loadChildren: () => import( `./pages/home/home.module` ).then(({ HomeModule }) => HomeModule ),
resolve: [ContributionResolver],
}, {
path: `contribute/form/:id`,
canActivate: [CasGuard],
......
......@@ -2,6 +2,10 @@
<alk-header *ngIf="!loading"></alk-header>
<router-outlet (activate)="onAppActivate()"></router-outlet>
<alk-footer *ngIf="!loading"></alk-footer>
<alk-modal-logger></alk-modal-logger>
<alk-toast-logger></alk-toast-logger>
<ng-container *ngIf="loading">
<div class="app-loading" >
<h1 i18n="@@loading">Chargement... <i class="fa fa-spinner fa-spin" aria-hidden="true"></i></h1>
......
......@@ -11,6 +11,7 @@ import { HttpClientModule } from "@angular/common/http";
import { CommonModule } from "@angular/common";
import { MapModule, VisualiseurCoreModule } from '@alkante/visualiseur-core';
import { DragulaModule } from 'ng2-dragula';
import { LoggerModule } from './core/components/logger/logger.module';
@NgModule({
declarations: [
......@@ -27,6 +28,7 @@ import { DragulaModule } from 'ng2-dragula';
VisualiseurCoreModule,
MapModule,
DragulaModule,
LoggerModule,
],
providers: [EnvServiceProvider],
bootstrap: [AppComponent],
......
<form class=" row g-3" [formGroup]="formGroup" *ngIf="formGroup">
<!-- Organisation -->
<div class="col-lg-4 mb-3">
<label class="form-label" i18n="@@organisationName">Nom de l'organisation</label>
<input type="name" name="contact-name" class="form-control" id="inputNameOrga" aria-describedby="NameOrga"
......@@ -6,12 +7,16 @@
>
<alk-form-error [control]="formGroup" field="organization"></alk-form-error>
</div>
<!-- Adresse mail -->
<div class="col-lg-4 mb-3">
<label class="form-label" i18n="@@MailAdress">Adresse mail</label>
<input type="email" class="form-control" id="mailAdress" placeholder="nom@mail.com" name="contact-mail-address"
formControlName="mail" >
<alk-form-error [control]="formGroup" field="mail"></alk-form-error>
</div>
<!-- Rôle -->
<div class="col-lg-3 mb-3 ">
<label class="form-label" i18n="@@Role">Rôle</label>
<select class="form-control" aria-label="Default select example" name="contact-role"
......@@ -23,6 +28,8 @@
</select>
<alk-form-error [control]="formGroup" field="role"></alk-form-error>
</div>
<!-- Suppression -->
<div class="col-lg-1 mb-3" *ngIf="total > 1">
<label class="form-label" i18n="@deletion" >Suppression</label>
<div style="display: block">
......
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Contact } from '../../models/contact';
import { BaseComponent } from '../base/base.component';
import { OperatorFunction, takeUntil } from 'rxjs';
import { RoleCode } from '../../models/role-code';
......@@ -17,7 +16,7 @@ export class ContactComponent extends BaseComponent implements OnInit{
@Input() contactForm!: FormGroup|AbstractControl;
@Input() total!: number;
@Output() removeContact = new EventEmitter<Contact>();
@Output() removeContact = new EventEmitter<void>();
public roleCodes: RoleCode[] = [];
......@@ -39,16 +38,10 @@ export class ContactComponent extends BaseComponent implements OnInit{
this.formGroup = <FormGroup> this.contactForm;
this.loadRoles();
this.organizationService.loadOrganization$().pipe(
takeUntil( this.endSubscriptions ),
).subscribe({
error: console.error,
});
}
public remove(): void{
// this.removeContact.emit( this.contact.value );
this.removeContact.emit();
}
private loadRoles() {
......
......@@ -3,7 +3,8 @@ import { ContributionField } from '../../models/contribution';
import { GeoFeature } from '../../models/geojson-validator';
import { BaseComponent } from '../base/base.component';
import { FieldDisplayService } from './field-display.service';
import { takeUntil } from 'rxjs';
import { finalize, takeUntil } from 'rxjs';
import { LoggerService } from '../logger/logger.service';
@Component({
selector: `alk-field-display`,
......@@ -22,6 +23,7 @@ export class FieldDisplayComponent extends BaseComponent implements OnInit {
constructor(
private fieldDisplayService: FieldDisplayService,
private loggerService: LoggerService,
) {
super();
}
......@@ -29,8 +31,17 @@ export class FieldDisplayComponent extends BaseComponent implements OnInit {
ngOnInit(): void {
this.fieldDisplayService.getFeatures( this.mapFile, this.layerId ).pipe(
takeUntil( this.endSubscriptions ),
finalize(() => {
console.log( 35 );
setTimeout(() => {
if ( !this.geoFeatures || this.geoFeatures.length === 0 ){
this.loggerService.errorOnToast$( $localize`:@@contextNotLoad:Erreur pendant le chargement du Tableau des données` );
}
}, 250 );
}),
)
.subscribe(( geoFeature ) =>{
console.log( `fieldDisplayService` );
this.geoFeatures = geoFeature;
});
}
......
......@@ -30,7 +30,7 @@ export class FieldDisplayService extends GetDataService<GeoCollection>{
const url = `${this.envService.datacarto}/map/${mapName}?request=getFeature&outputformat=geojson&count=20&service=WFS&version=2.0.0&typenames=${layerId}`;
return super.getData$( url, geoCollectionValidator ).pipe(
return this.getData$( url, geoCollectionValidator ).pipe(
map(( geoCollection ) => geoCollection.features.slice( 0, 20 )),
);
}
......
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ToastLoggerComponent } from './toast-logger/toast-logger.component';
import { ModalLoggerComponent } from './modal-logger/modal-logger.component';
import { NgbToastModule } from '@ng-bootstrap/ng-bootstrap';
import { FormsModule } from '@angular/forms';
@NgModule({
declarations: [
ModalLoggerComponent,
ToastLoggerComponent,
],
exports: [
ModalLoggerComponent,
ToastLoggerComponent,
],
imports: [
NgbToastModule,
CommonModule,
FormsModule,
],
})
export class LoggerModule { }
import { TestBed } from '@angular/core/testing';
import {LoggerService} from './logger.service';
describe('DisplayErrorService', () => {
let service: LoggerService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(LoggerService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});
import { Injectable } from '@angular/core';
import { Observable, ReplaySubject } from 'rxjs';
@Injectable({
providedIn: `root`,
})
export class LoggerService {
private msgOnModal$ = new ReplaySubject<string>( 1 );
private msgOnToast$ = new ReplaySubject<string[]>( 1 );
private toasts: string[] = [];
errorOnModal$( message: string ): void{
this.msgOnModal$.next( message );
}
getErrorOnModal$(): Observable<string>{
return this.msgOnModal$.asObservable();
}
getErrorOnTaoast(): Observable<string[]>{
return this.msgOnToast$.asObservable();
}
errorOnToast$( message: string ): void {
this.toasts.push( message );
this.msgOnToast$.next( this.toasts );
}
remove$( toast:string ): void {
this.toasts = this.toasts.filter(( t ) => t !== toast );
this.msgOnToast$.next( this.toasts );
}
clear$(): void {
this.toasts.splice( 0, this.toasts.length );
this.msgOnToast$.next( this.toasts );
}
}
<ng-template #content let-modal>
<div class="modal-header">
<h5 class="modal-title">Confirmation</h5>
<button type="button" class="close" aria-label="Close" (click)="modal.close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>{{message}}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" (click)="modal.close()">Ok</button>
</div>
</ng-template>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import {ModalLoggerComponent} from './modal-logger.component';
describe('DisplayErrorComponent', () => {
let component: ModalLoggerComponent;
let fixture: ComponentFixture<ModalLoggerComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ModalLoggerComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ModalLoggerComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import { takeUntil } from 'rxjs';
import { BaseComponent } from '../../base/base.component';
import { LoggerService } from '../logger.service';
@Component({
selector: `alk-modal-logger`,
templateUrl: `./modal-logger.component.html`,
styleUrls: [`./modal-logger.component.scss`],
})
export class ModalLoggerComponent extends BaseComponent implements OnInit {
@ViewChild( `content` ) modalContent: ElementRef;
public message = ``;
private modalRef: NgbModalRef = null;
constructor(
private ngbModal: NgbModal,
private displayErrorService: LoggerService,
)
{
super();
}
ngOnInit(): void {
this.displayErrorService.getErrorOnModal$().pipe(
takeUntil( this.endSubscriptions ),
).subscribe(( message ) => {
this.displayMessage( message );
});
}
public displayMessage( message: string ): void{
/** */
if ( !this.modalRef ){
this.message = message;
this.modalRef = this.ngbModal.open( this.modalContent );
}
this.modalRef.result.finally(() => this.modalRef = null );
}
}
<div class="toast-container position-fixed top-0 end-0 p-3 alk-toast" style="z-index: 1200">
<ngb-toast *ngFor="let toast of toasts" class="bg-danger text-light"
[autohide]="true" [delay]="5000" (hidden)="remove(toast)">
{{ toast }}
</ngb-toast>
</div>