Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • prodige/ngpr_prodige_contribution
1 result
Show changes
Commits on Source (12)
Showing
with 219 additions and 20 deletions
......@@ -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>
.alk-toast{
top: 10px;
right: 10px;
}