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
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client
1 result
Show changes
Commits on Source (28)
Showing
with 122 additions and 59 deletions
......@@ -18,7 +18,6 @@ build_branch:
DOCKER_DRIVER: overlay2
only:
- merge_requests
- V2.0
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/docker:18.09
stage: build
except:
......@@ -78,8 +77,7 @@ deploy_dev:
tags:
- deploy
only:
# - dev
- V2.0
- dev
script:
- cd /home/mps/ram
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
......
......@@ -2,6 +2,32 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [2.0.1](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.0.0...v2.0.1) (2022-12-16)
### Features
* **orientation:** Add RDVS starting tunnel ([17bc381](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/17bc381a759eb88d18d8be8ab4e71c2dca5f9e02))
* **rdvs:** Add icon on structure panel to take an appointment (hidden) ([48d65cb](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/48d65cb815da0130208b86ddb6ae341ea310abe0))
* **structure:** Admin has to validate new member joining a structure ([9b68552](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/9b685524cc5bb64648a4622057428a0ea4fc968d))
### Bug Fixes
* **cicd:** restore dev conf ([f7ef72a](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/f7ef72a3726ce79683c925cc7657da54167cc929))
* **deps:** update dependency leaflet.locatecontrol to ^0.79.0 ([83d6741](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/83d674148f79547480a3edc1fd387c89b24696a7))
* **deps:** update dependency rxjs to ~7.6.0 ([9c9869d](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/9c9869d023ac13dc0e7d26c7c72a7090fc231164))
* hide unknown mail from structure list ([aafa2f5](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/aafa2f5c0f3d3f30853934ed9f25550194ebfa2d))
* prevent profile page and edition for uncomplete user to crash ([9a054cc](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/9a054ccf3cc4c8e3cbdc927d1127fc6f3a24edf3))
* Wifi validation stops make structure incomplete ([dadc206](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/dadc206d2cb1596604f0bb4182d28d58e9126905))
### [1.17.3](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v1.17.2...v1.17.3) (2022-05-31)
### Bug Fixes
* **carto:** lockdown display handling ([b500721](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/b500721b851d81796719fec312d52ae5723bbf6a))
## [2.0.0](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.0.0-beta5...v2.0.0) (2022-12-02)
......@@ -210,7 +236,6 @@ All notable changes to this project will be documented in this file. See [standa
* **style:** add tertiary and icon onlybutton. Update logo and header. Button refacto with enum ([276dc59](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/276dc594376cf4054490ccea327323e391bd1571))
* **style:** change colors, buttons, header, typo ([38629d8](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/38629d8ca71eaaa831109b101f71971bb94f53c4))
### Bug Fixes
* add missing layout import ([621d77d](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/621d77d1610e02a47bc4e6b29d8c973e68d6cebe))
......@@ -292,6 +317,12 @@ All notable changes to this project will be documented in this file. See [standa
* **style:** button hover ([122fcfc](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/122fcfc1412282af29734f33985f375b83606b30))
* **style:** update button style ([c8ade31](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/c8ade31b7d4f187a2c9cb0db321dd5355e7ebb88))
### [1.17.3](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v1.17.2...v1.17.3) (2022-05-31)
### Bug Fixes
* add missing layout import ([621d77d](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/621d77d1610e02a47bc4e6b29d8c973e68d6cebe))
* **carto:** lockdown display handling ([b500721](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/b500721b851d81796719fec312d52ae5723bbf6a))
### [1.17.2](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v1.17.1...v1.17.2) (2022-05-30)
......
{
"name": "pamn",
"version": "2.0.0-beta4",
"version": "2.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
......@@ -21995,9 +21995,9 @@
"integrity": "sha512-Kc77HQvWO+y9y2oIs3dn5h5sy2kr3j41ewdqCMEUA4N89lgfUUfOBy7wnnHEstDpefiGFObq12FdopGRMx4J7g=="
},
"leaflet.locatecontrol": {
"version": "0.77.0",
"resolved": "https://registry.npmjs.org/leaflet.locatecontrol/-/leaflet.locatecontrol-0.77.0.tgz",
"integrity": "sha512-yh2SX7Dcey7eR2zH4PXaa4WgNk0mg8hTdrVfVNTvM4/t7+IUKa122SjnL0XD2zc7gz2bQMddaMXL9142yl6mpg=="
"version": "0.79.0",
"resolved": "https://registry.npmjs.org/leaflet.locatecontrol/-/leaflet.locatecontrol-0.79.0.tgz",
"integrity": "sha512-h64QIHFkypYdr90lkSfjKvPvvk8/b8UnP3m9WuoWdp5p2AaCWC0T1NVwyuj4rd5U4fBW3tQt4ppmZ2LceHMIDg=="
},
"less": {
"version": "4.1.3",
......@@ -25285,9 +25285,9 @@
"dev": true
},
"rxjs": {
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz",
"integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==",
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.6.0.tgz",
"integrity": "sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==",
"requires": {
"tslib": "^2.1.0"
}
{
"name": "pamn",
"version": "2.0.0",
"version": "2.0.1",
"scripts": {
"ng": "ng",
"start": "ng serve --configuration=fr --proxy-config proxy.conf.json",
......@@ -34,11 +34,11 @@
"ag-grid-community": "^28.0.0",
"jwt-decode": "^3.1.2",
"leaflet": "^1.9.2",
"leaflet.locatecontrol": "^0.77.0",
"leaflet.locatecontrol": "^0.79.0",
"lodash": "^4.17.21",
"luxon": "^1.25.0",
"ngx-toastr": "^15.0.0",
"rxjs": "~7.5.0",
"rxjs": "~7.6.0",
"tslib": "^2.4.0",
"zone.js": "~0.12.0"
},
......
......@@ -3,12 +3,14 @@
<thead>
<th scope="col">Utilisateur</th>
<th scope="col">Structure</th>
<th scope="col">Date de demande</th>
<th scope="col">Options</th>
</thead>
<tbody>
<tr *ngFor="let structure of demandsAttachment">
<td>{{ structure.userEmail }}</td>
<td>{{ structure.structureName }}</td>
<td>{{ structure.createdAt | date: 'mediumDate' }}</td>
<td>
<button (click)="acceptDemand(structure)">Valider</button
><button (click)="refuseDemand(structure)">Refuser</button>
......
import { Component, OnInit } from '@angular/core';
import { NotificationService } from '../../../services/notification.service';
import { StructureAdminInfo } from '../../models/demandAttachment.model';
import { AdminService } from '../../services/admin.service';
......@@ -12,7 +13,7 @@ export class ClaimStructureComponent implements OnInit {
public structuresUnclaimed: StructureAdminInfo[];
public isClaimedStructure: boolean = true;
public isUnclaimedStructure: boolean = false;
constructor(private adminService: AdminService) {}
constructor(private adminService: AdminService, private notificationService: NotificationService) {}
ngOnInit(): void {
this.adminService.getPendingStructure().subscribe((demands) => {
......@@ -21,19 +22,27 @@ export class ClaimStructureComponent implements OnInit {
}
public acceptDemand(demand: StructureAdminInfo): void {
this.adminService
.acceptStructureClaim(demand.userEmail, demand.structureId, demand.structureName)
.subscribe((data) => {
this.adminService.acceptStructureClaim(demand.userEmail, demand.structureId, demand.structureName).subscribe({
next: (data) => {
this.demandsAttachment = data;
});
this.notificationService.showSuccess('Demande acceptée avec succès');
},
error: (e) => {
this.notificationService.showError('Une erreur est survenue');
},
});
}
public refuseDemand(demand: StructureAdminInfo): void {
this.adminService
.refuseStructureClaim(demand.userEmail, demand.structureId, demand.structureName)
.subscribe((data) => {
this.adminService.refuseStructureClaim(demand.userEmail, demand.structureId, demand.structureName).subscribe({
next: (data) => {
this.demandsAttachment = data;
});
this.notificationService.showSuccess('Demande refusée avec succès');
},
error: (e) => {
this.notificationService.showError('Une erreur est survenue');
},
});
}
public claimedStructure(_event: boolean): void {
......
import { Component, Input } from '@angular/core';
import { AdminPannelEnum } from '../../../../shared/enum/adminPanel.enum';
import { AdminPanelEnum } from '../../../../shared/enum/adminPanel.enum';
import { PanelRouteService } from '../../../services/panel-route.service';
@Component({
......@@ -14,7 +14,7 @@ export class AttachedUsersComponent {
constructor(private panelRouteService: PanelRouteService) {}
public redirectTo() {
this.panelRouteService.redirectTo(AdminPannelEnum.manageUsers);
this.panelRouteService.redirectTo(AdminPanelEnum.manageUsers);
}
public agInit(params: any): void {
......
import { Component, OnInit } from '@angular/core';
import { environment } from '../../../../environments/environment';
import { ButtonType } from '../../../shared/components/button/buttonType.enum';
import { AdminPannelEnum } from '../../../shared/enum/adminPanel.enum';
import { AdminPanelEnum } from '../../../shared/enum/adminPanel.enum';
import { PanelRouteService } from '../../services/panel-route.service';
@Component({
......@@ -10,13 +10,13 @@ import { PanelRouteService } from '../../services/panel-route.service';
providers: [PanelRouteService],
})
export class PanelComponent implements OnInit {
public features = AdminPannelEnum;
public features = AdminPanelEnum;
public ghostLink = environment.ghostAdmin;
public selectedFeature;
public buttonTypeEnum = ButtonType;
constructor(private panelRouteService: PanelRouteService) {
this.panelRouteService.destinationChanged$.subscribe((selected: AdminPannelEnum) => {
this.panelRouteService.destinationChanged$.subscribe((selected: AdminPanelEnum) => {
this.selectedFeature = selected;
});
}
......@@ -25,7 +25,7 @@ export class PanelComponent implements OnInit {
this.selectedFeature = this.features.pendingStructures;
}
public changeActiveFeature(newFeature: AdminPannelEnum): void {
public changeActiveFeature(newFeature: AdminPanelEnum): void {
this.selectedFeature = newFeature;
}
}
......@@ -2,4 +2,5 @@ export class StructureAdminInfo {
userEmail: string;
structureId: number;
structureName: string;
createdAt: string;
}
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { AdminPannelEnum } from '../../shared/enum/adminPanel.enum';
import { AdminPanelEnum } from '../../shared/enum/adminPanel.enum';
@Injectable()
export class PanelRouteService {
private destination = new Subject<AdminPannelEnum>();
private destination = new Subject<AdminPanelEnum>();
destinationChanged$ = this.destination.asObservable();
redirectTo(dest: AdminPannelEnum) {
redirectTo(dest: AdminPanelEnum) {
this.destination.next(dest);
}
}
......@@ -40,7 +40,7 @@
></app-button>
</div>
<div class="results unlogged" *ngIf="!isLogged">
<div class="results unlogged" *ngIf="!isLogged && totalUserResult">
<img src="../../assets/ico/annuaire-unlogged.svg" alt="Illustration annuaire" />
<div class="users" [ngPlural]="totalUserResult">
<ng-template ngPluralCase="0">Aucun utilisateur n'est présent dans l'annuaire Rés'in</ng-template>
......
......@@ -150,7 +150,21 @@ const routes: Routes = [
],
},
{
path: 'join/:id',
path: 'join-request/:id',
children: [
{
path: '',
canActivate: [AuthGuard],
component: StructureJoinComponent,
resolve: {
structure: StructureResolver,
},
},
footerOutletRoute,
],
},
{
path: 'join-validation',
children: [
{
path: '',
......@@ -236,6 +250,7 @@ const routes: Routes = [
canActivate: [AdminGuard],
loadChildren: () => import('./admin/admin.module').then((m) => m.AdminModule),
},
footerOutletRoute,
],
},
{
......
<form [formGroup]="accountForm" *ngIf="accountForm && !profile">
<div class="title">
<h3>Qui êtes-vous&nbsp;?</h3>
<p>Vous pourrez choisir de rendre visibles ces informations sur votre profil public</p>
</div>
<div class="form-group" fxLayout="column">
<label for="name">Prénom</label>
......
......@@ -92,11 +92,3 @@
font-style: italic;
}
}
@media #{$tablet} {
.page {
height: calc(
100vh - #{$header-height-phone} - #{$footer-height-phone} - 87px - 1px
); // -1px because of header border
}
}
......@@ -11,6 +11,7 @@ import { ProfileService } from '../../profile/services/profile.service';
import { NotificationService } from '../../services/notification.service';
import { PersonalOfferService } from '../../services/personal-offer.service';
import { StructureService } from '../../services/structure.service';
import { UserService } from '../../services/user.service';
import { MustMatch } from '../../shared/validator/form';
import { CustomRegExp } from '../../utils/CustomRegExp';
import { formUtils } from '../../utils/formUtils';
......@@ -86,7 +87,8 @@ export class FormViewComponent implements OnInit, AfterViewInit {
private route: ActivatedRoute,
private router: Router,
private structureService: StructureService,
private utils: Utils
private utils: Utils,
private usersService: UserService
) {}
ngAfterViewInit(): void {
......@@ -151,7 +153,7 @@ export class FormViewComponent implements OnInit, AfterViewInit {
this.route.data.subscribe((data) => {
if (data.user) {
this.createAccountForm(data.user.email);
this.linkedStructureId = data.user.pendingStructuresLink;
this.linkedStructureId = data.user.structuresLink;
this.currentForm = this.accountForm;
this.isAccountMode = true;
}
......@@ -275,7 +277,7 @@ export class FormViewComponent implements OnInit, AfterViewInit {
this.structureService.isClaimed(this.structure._id, this.profile).subscribe((isClaimed) => {
this.structure.isClaimed = isClaimed;
if (isClaimed) {
this.structureService.joinStructure(this.structureForm.value._id, this.profile.email).subscribe(() => {
this.usersService.joinStructure(this.structureForm.value._id, this.profile.email).subscribe(() => {
this.currentPage = structureFormStep.mailSentInfo;
});
} else {
......@@ -517,15 +519,27 @@ export class FormViewComponent implements OnInit, AfterViewInit {
}
}
private setExitPages(): number[] {
switch (this.currentFormType) {
case formType.structure:
return [
structureFormStep.noStructure,
structureFormStep.structureCreationFinishedInfo,
structureFormStep.mailSentInfo,
structureFormStep.StructureInfoUnknown,
];
case formType.profile:
return [profileFormStep.profileJobSelection];
case formType.personaloffer:
return [personalOfferFormStep.personalOfferFinishedInfo];
default:
return [];
}
}
public canExit(): Promise<boolean> {
// List all exit pages in order to authorise exit
const exitPages: stepType[] = [
structureFormStep.noStructure,
structureFormStep.structureCreationFinishedInfo,
structureFormStep.mailSentInfo,
profileFormStep.profileJobSelection,
personalOfferFormStep.personalOfferFinishedInfo,
];
const exitPages: stepType[] = this.setExitPages();
// Avoid confirmation when user submit form and leave.
if (
this.currentPage === this.nbSteps ||
......
......@@ -32,7 +32,6 @@ import { StructureHoursComponent } from './structure-form/structure-hours/struct
import { StructureLabelsComponent } from './structure-form/structure-labels/structure-labels.component';
import { StructureNameAndAddressComponent } from './structure-form/structure-name-and-address/structure-name-and-address.component';
import { structureDigitalHelpingAccompanimentOtherComponent } from './structure-form/structure-public-target-other/structure-public-target-other.component';
import { StructurePublicTargetComponent } from './structure-form/structure-public-target/structure-public-target.component';
import { StructureTrainingPriceComponent } from './structure-form/structure-training-price/structure-training-price.component';
import { StructureTrainingTypeComponent } from './structure-form/structure-training-type/structure-training-type.component';
import { StructureTypeComponent } from './structure-form/structure-type/structure-type.component';
......@@ -61,7 +60,6 @@ import { StructureSolidarityMaterialComponent } from './structure-form/structure
StructureAccessModalityComponent,
StructureHoursComponent,
StructureWebAndSocialNetworkComponent,
StructurePublicTargetComponent,
structureDigitalHelpingAccompanimentOtherComponent,
StructureDigitalHelpingAccompanimentComponent,
StructureTrainingPriceComponent,
......
......@@ -2,8 +2,8 @@
<div class="information-step-container no-max-width">
<img src="../../assets/form/emailVerification.svg" alt="Image de validation de finalisation de l'inscription" />
<p>
Un email vous a été envoyé<br />
afin de finaliser votre inscription
Merci !<br />
Finalisez votre inscription en ouvrant l’email qui vient de vous être envoyé
</p>
</div>
</ng-container>
......
......@@ -7,7 +7,6 @@
align-items: center;
justify-content: center;
min-height: inherit;
height: 450px;
svg {
width: 100%;
max-width: 200px;
......
......@@ -23,6 +23,12 @@
width: 100%;
height: 6px;
border-radius: 7px;
&[value] {
// fix color issue on safari
appearance: none;
}
&::-webkit-progress-bar {
background-color: $grey-6;
border-radius: 7px;
......
import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
import { formType } from '../../formType.enum';
import { personalOfferFormStep } from '../../personal-offer-form/personalOfferFormStep.enum';
import { profileFormStep } from '../../profile-form/profileFormStep.enum';
import { structureFormStep } from '../../structure-form/structureFormStep.enum';
......