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
Select Git revision

Target

Select target project
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client
1 result
Select Git revision
Show changes
Commits on Source (67)
Showing
with 10555 additions and 8571 deletions
/title [Scope] Description
[[_TOC_]]
### Résumé du problème
## Contexte
_Donnez une description briève du problème._
## Objectif
### Les étapes pour reproduire le bug
## Ressources
_Listez les étapes qui vous permettent de reproduire ce bug, cette étape est très importante._
### Décrivez le comportement du bug ?
### Quel serez le comportement attendu ?
### Logs et/ou screenshots
### Possible fixes
/label ~"type::bug"
## Tâches
......@@ -2,6 +2,45 @@
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.0-beta5](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.0.0-beta4...v2.0.0-beta5) (2022-11-23)
### Features
* Add solidarity material in onboarding + carto + edit ([1f997f2](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/1f997f2c6536d36cda8df7f0cf09d24b9d50e2d7))
* **admin:** export users ([76a3add](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/76a3add32e542f5dd49cd0824a562c98c429da13))
* **carto:** add pmr handling for carto filtering and orientation ([a5232eb](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/a5232eb2be3997a6ea04db83e2374a091b1fead3))
* center loader in carto ([ff5d016](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/ff5d0161b07e787a77d7236e35dce7b97adee101))
* delete my personal offer ([6ffbd4a](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/6ffbd4ad6158d15540266a3fe690febd25918042))
* **docker:** update registry path ([6698cf8](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/6698cf839f29e780692ff6d1e776599d57a2b5f3))
* **edit-structure:** link to manage members ([e5cc5d3](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/e5cc5d3064b2a925d77bb0c204497518eb002337))
* **footer:** "mediation numérique" button ([2be0de8](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/2be0de896264ff8c840bb7a8f34ae0d33d803b52))
* **nginx:** update matomo base conf ([8166b93](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/8166b93bdaa1e0970bf2da9855d01ed56b17d019))
* **orientation:** :hammer: add new orientation with the following tunnels : trainings, online accompaniement, solidarity material, material access ([249a6be](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/249a6be341319aff8de7766490ce2a2c30faeb57))
* **orientation:** add language selection ([05867d0](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/05867d0e76ca2d4508516b96699163bc31aa8bee))
* **orientation:** Add modal for foreigners demarch ([e8419a6](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/e8419a6b768a19d40283e016fb27eb43bc438236))
* personal offer edition ([9cc07be](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/9cc07bedb7dcafe44bb55b315c2bd0f052eea52f))
* personal offers section in profile ([a2159c5](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/a2159c52384c344065d48fd5e0db824f9b3dc9f5))
* **personnalOffer:** Add-multi-checkbox ([cfe149e](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/cfe149e4a39a8e0a6478d72a83085624e516c8b1))
### Bug Fixes
* add members ([f58fede](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/f58fedeba1a4223a020597661fddd3fe1e2ff484))
* **admin:** loader style ([27584f1](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/27584f1a76e40d8606f7941197d0371e5180e66a))
* **aptic:** handling of missing fields for aptic structures ([1568706](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/1568706de0e377edff1ff930b24e0ac3fed7d2aa))
* clickable structure carto (ios) ([14a397a](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/14a397a73bcf2088e47041cf9115e02af8c2c27b))
* **deps:** update ag-grid monorepo to v28 (major) ([1d634d0](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/1d634d0e5b910028f799a98b138618466ad3d11d))
* **deps:** update dependency @asymmetrik/ngx-leaflet to v14 ([3345bef](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/3345befd2f1dde6bca893b019d7b98473bdd88ac))
* **deps:** update dependency leaflet.locatecontrol to ^0.77.0 ([864de8e](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/864de8ec78d5edf2a62e09c059df605856ded221))
* **deps:** update dependency rxjs to v7 ([7875e76](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/7875e76fee5db11c615a2589416d6b23c6956e71))
* **deps:** update dependency zone.js to ~0.12.0 ([e5aad9e](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/e5aad9ed3d63cf5e9948065b4f64dfb02b43d8e0))
* onboarding structure creation missing end button ([fe0836a](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/fe0836a00a18a2a75bd176227937ebd9accd77ee))
* **orientation:** revert merge conflict from 05867d0e76ca2d4508516b96699163bc31aa8bee ([611d961](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/611d9618be298487bbbbfa54a513e32aa609fc82))
* retours review ([aae2d55](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/aae2d550bf92385125aa45d9983e4c7c9612c0b6))
* Retours review ([f904514](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/f904514b38c184cfabc140500faf4e82882d2ce0))
* **style:** add rouded class for buttons ([5ae4610](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/5ae461025e4f7d45ffd8695102dadf3a8709667b))
## [2.0.0-beta4](https://forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.0.0-beta2.2...v2.0.0-beta4) (2022-10-31)
......
......@@ -138,18 +138,6 @@
"styles": ["src/styles.scss"],
"scripts": []
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "pamn:serve"
},
"configurations": {
"production": {
"devServerTarget": "pamn:serve:production"
}
}
}
}
},
......
......@@ -4,7 +4,7 @@ services:
web-app:
restart: unless-stopped
build: .
image: registry.forge.grandlyon.com/web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client:${TAG}
image: registry.forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client:${TAG}
volumes:
- ./dev.conf:/etc/nginx/conf.d/default.conf
ports:
......
// @ts-check
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts
const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter');
/**
* @type { import("protractor").Config }
*/
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./src/**/*.e2e-spec.ts'
],
capabilities: {
browserName: 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
onPrepare() {
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.json')
});
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: StacktraceOption.PRETTY
}
}));
}
};
\ No newline at end of file
import { AppPage } from './app.po';
import { browser, logging } from 'protractor';
describe('workspace-project App', () => {
let page: AppPage;
beforeEach(() => {
page = new AppPage();
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getTitleText()).toEqual('pamn app is running!');
});
afterEach(async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
expect(logs).not.toContain(jasmine.objectContaining({
level: logging.Level.SEVERE,
} as logging.Entry));
});
});
import { browser, by, element } from 'protractor';
export class AppPage {
navigateTo(): Promise<unknown> {
return browser.get(browser.baseUrl) as Promise<unknown>;
}
getTitleText(): Promise<string> {
return element(by.css('app-root .content span')).getText() as Promise<string>;
}
}
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"module": "commonjs",
"target": "es2018",
"types": [
"jasmine",
"jasminewd2",
"node"
]
}
}
......@@ -29,10 +29,10 @@ server {
_paq.push(['enableLinkTracking']);
(function() {
var u='<URL_GDLYON>';
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '<SITE_ID>']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>";
......
This diff is collapsed.
{
"name": "pamn",
"version": "2.0.0-beta4",
"version": "2.0.0-beta5",
"scripts": {
"ng": "ng",
"start": "ng serve --configuration=fr --proxy-config proxy.conf.json",
......@@ -11,12 +11,12 @@
"doc:serve": "./node_modules/.bin/compodoc compodoc -s",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"release": "standard-version",
"translate": "ng xi18n --ivy --output-path src/locale --out-file messages.en.xlf"
},
"private": true,
"dependencies": {
"@ag-grid-community/csv-export": "^28.2.1",
"@angular/animations": "^14.2.1",
"@angular/cdk": "^14.0.0",
"@angular/common": "^14.2.1",
......@@ -30,17 +30,17 @@
"@angular/service-worker": "^14.2.1",
"@asymmetrik/ngx-leaflet": "^8.1.0",
"@ngx-translate/core": "^14.0.0",
"ag-grid-angular": "^26.2.0",
"ag-grid-community": "^26.2.1",
"ag-grid-angular": "^28.0.0",
"ag-grid-community": "^28.0.0",
"jwt-decode": "^3.1.2",
"leaflet": "^1.7.1",
"leaflet.locatecontrol": "^0.76.0",
"leaflet": "^1.9.2",
"leaflet.locatecontrol": "^0.77.0",
"lodash": "^4.17.21",
"luxon": "^1.25.0",
"ngx-toastr": "^15.0.0",
"rxjs": "~6.6.0",
"rxjs": "~7.5.0",
"tslib": "^2.4.0",
"zone.js": "~0.11.4"
"zone.js": "~0.12.0"
},
"devDependencies": {
"@angular-builders/jest": "^14.0.0",
......@@ -54,22 +54,22 @@
"@angular/compiler-cli": "^14.2.1",
"@angular/localize": "^14.2.1",
"@compodoc/compodoc": "^1.1.16",
"@types/jasmine": "~4.0.0",
"@types/jasmine": "~4.3.0",
"@types/jasminewd2": "~2.0.3",
"@types/leaflet": "^1.5.17",
"@types/leaflet.locatecontrol": "^0.60.7",
"@types/leaflet.locatecontrol": "^0.74.0",
"@types/luxon": "^1.25.0",
"@types/node": "^16.0.0",
"@typescript-eslint/eslint-plugin": "^5.36.2",
"@typescript-eslint/parser": "^5.36.2",
"codelyzer": "^6.0.0",
"codelyzer": "^6.0.2",
"eslint": "^8.23.0",
"eslint-plugin-jest": "^26.2.2",
"eslint-plugin-jest": "^27.0.0",
"http-server": "^14.1.0",
"jasmine-core": "~4.1.0",
"jasmine-core": "~4.5.0",
"jasmine-spec-reporter": "~7.0.0",
"jest": "^27.5.1",
"jest-preset-angular": "^11.1.2",
"jest": "^29.0.0",
"jest-preset-angular": "^12.0.0",
"karma": "^6.4.0",
"karma-browserify": "^8.0.0",
"karma-chrome-launcher": "~3.1.0",
......@@ -78,9 +78,8 @@
"karma-jasmine": "~5.1.0",
"ng-packagr": "^14.2.1",
"prettier": "^2.1.2",
"protractor": "~7.0.0",
"standard-version": "^9.3.2",
"ts-node": "~8.3.0",
"ts-node": "~8.10.0",
"tslint": "~6.1.0",
"typescript": "~4.8.3"
}
......
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { PanelComponent } from './components/panel/panel.component';
import { ClaimStructureComponent } from './components/claim-structure/claim-structure.component';
import { ManageUsersComponent } from './components/manage-users/manage-users.component';
import { NgModule } from '@angular/core';
import { AgGridModule } from 'ag-grid-angular';
import { SharedModule } from '../shared/shared.module';
import { AdminStructuresListComponent } from './components/structures-list/admin-structures-list.component';
import { ManageLockdownInfoComponent } from './components/lockdown-info/manage-lockdown-info.component';
import { AdminRoutingModule } from './admin-routing.module';
import { AgGridModule } from 'ag-grid-angular';
import { DeleteUserComponent } from './components/manage-users/delete-user/delete-user.component';
import { AdministredStructuresComponent } from './components/manage-users/administred-structures/administred-structures.component';
import { ManageJobsComponent } from './components/manage-jobs/manage-jobs.component';
import { ClaimStructureComponent } from './components/claim-structure/claim-structure.component';
import { ManageLockdownInfoComponent } from './components/lockdown-info/manage-lockdown-info.component';
import { DeleteEmployerComponent } from './components/manage-employers/delete-employer/delete-employer.component';
import { ManageEmployersComponent } from './components/manage-employers/manage-employers.component';
import { JobRenderer } from './components/manage-users/job-renderer/job-renderer.component';
import { EmployerRenderer } from './components/manage-users/employer-renderer/employer-renderer.component';
import { ValidateEmployerComponent } from './components/manage-employers/validate-employer/validate-employer.component';
import { AttachedUsersComponent } from './components/manage-jobs/attached-users/attached-users.component';
import { DeleteJobComponent } from './components/manage-jobs/delete-job/delete-job.component';
import { DeleteEmployerComponent } from './components/manage-employers/delete-employer/delete-employer.component';
import { ValidateJobComponent } from './components/manage-jobs/validate-job/validate-job.component';
import { ValidateEmployerComponent } from './components/manage-employers/validate-employer/validate-employer.component';
import { JobPersonalOffer } from './components/manage-jobs/jobPersonalOffer/job-personal-offer';
import { ManageJobsComponent } from './components/manage-jobs/manage-jobs.component';
import { ValidateJobComponent } from './components/manage-jobs/validate-job/validate-job.component';
import { AdministredStructuresComponent } from './components/manage-users/administred-structures/administred-structures.component';
import { DeleteUserComponent } from './components/manage-users/delete-user/delete-user.component';
import { EmployerRenderer } from './components/manage-users/employer-renderer/employer-renderer.component';
import { JobRenderer } from './components/manage-users/job-renderer/job-renderer.component';
import { ManageUsersComponent } from './components/manage-users/manage-users.component';
import { PanelComponent } from './components/panel/panel.component';
import { AdminStructuresListComponent } from './components/structures-list/admin-structures-list.component';
@NgModule({
declarations: [
......@@ -39,13 +39,8 @@ import { JobPersonalOffer } from './components/manage-jobs/jobPersonalOffer/job-
AdministredStructuresComponent,
AttachedUsersComponent,
ManageJobsComponent,
ManageEmployersComponent
ManageEmployersComponent,
],
imports: [
CommonModule,
AdminRoutingModule,
SharedModule,
AgGridModule.withComponents([DeleteUserComponent, AdministredStructuresComponent])
]
imports: [CommonModule, AdminRoutingModule, SharedModule, AgGridModule],
})
export class AdminModule {}
<div *ngIf="isLoading" class="loader">
<img class="loader-gif" src="/assets/gif/loader_circle.gif" alt />
<img class="loader-gif" src="/assets/gif/loader_circle_grey.gif" alt />
</div>
<div *ngIf="!isLoading" fxLayout="column" fxLayoutAlign="center center">
<H2>Gestion de l'affichage des infos Covid</H2>
......
<div fxLayout="column" fxLayoutGap="5px" fxLayoutAlign="center center" class="userBlock">
<h3>
<h2>
Gestion des utilisateurs
<span *ngIf="unVerifiedUsers && unAttachedUsers && attachedUsers">
({{ unVerifiedUsers.length + unAttachedUsers.length + attachedUsers.length }})
</span>
</h3>
</h2>
</div>
<div class="tables-list">
......@@ -24,7 +24,14 @@
</ag-grid-angular>
</div>
<div>
<h3 class="title" *ngIf="unAttachedUsers">Utilisateurs non rattachés ({{ unAttachedUsers.length }})</h3>
<h3 class="title" *ngIf="unAttachedUsers">
Utilisateurs non rattachés ({{ unAttachedUsers.length }})
<app-button
[text]="'Exporter'"
[style]="buttonTypeEnum.Tertiary"
(click)="exportUsers('unattached')"
></app-button>
</h3>
<ag-grid-angular
*ngIf="validatedJobs && validatedEmployers"
class="ag-theme-alpine user-table"
......@@ -35,11 +42,15 @@
[getRowHeight]="getRowHeight"
[defaultColDef]="unAttachedColDef"
[frameworkComponents]="frameworkComponents"
(gridReady)="onGridReady($event, 'unattached')"
>
</ag-grid-angular>
</div>
<div>
<h3 class="title" *ngIf="attachedUsers">Utilisateurs rattachés ({{ attachedUsers.length }})</h3>
<h3 class="title" *ngIf="attachedUsers">
Utilisateurs rattachés ({{ attachedUsers.length }})
<app-button [text]="'Exporter'" [style]="buttonTypeEnum.Tertiary" (click)="exportUsers('attached')"></app-button>
</h3>
<ag-grid-angular
*ngIf="validatedJobs && validatedEmployers"
class="ag-theme-alpine user-table"
......@@ -50,6 +61,7 @@
[getRowHeight]="getRowHeight"
[defaultColDef]="defaultColDef"
[frameworkComponents]="frameworkComponents"
(gridReady)="onGridReady($event, 'attached')"
>
</ag-grid-angular>
</div>
......
......@@ -18,3 +18,7 @@
app-delete-user {
text-align: center;
}
::ng-deep button {
margin-left: 0.5rem;
}
......@@ -8,6 +8,10 @@ import { Employer } from '../../../models/employer.model';
import { EmployerRenderer } from './employer-renderer/employer-renderer.component';
import { NotificationService } from '../../../services/notification.service';
import { DeleteUserComponent } from './delete-user/delete-user.component';
import { CsvExportParams, GridApi, GridReadyEvent } from 'ag-grid-community';
import { ButtonType } from '../../../shared/components/button/buttonType.enum';
type UsersStatus = 'attached' | 'unattached';
@Component({
selector: 'app-admin-manage-users',
......@@ -16,7 +20,9 @@ import { DeleteUserComponent } from './delete-user/delete-user.component';
})
export class ManageUsersComponent {
public attachedUsers: User[] = [];
public gridApiAttached: GridApi;
public unAttachedUsers: User[] = [];
public gridApiUnattached: GridApi;
public unVerifiedUsers: User[] = [];
public validatedJobsName: string[] = [];
public validatedJobs: Job[] = [];
......@@ -53,6 +59,7 @@ export class ManageUsersComponent {
color: '#da6c2e',
},
};
public buttonTypeEnum = ButtonType;
constructor(private adminService: AdminService, private notificationService: NotificationService) {
this.findValidatedJobs();
......@@ -293,6 +300,31 @@ export class ManageUsersComponent {
}
public getRowHeight(params): number {
return params.data.structures ? (params.data.structures.length != 0 ? params.data.structures.length * 40 : 40) : 40;
return params.data.structures?.length * 40 || 40;
}
public onGridReady(params: GridReadyEvent, status: UsersStatus): void {
if (status === 'attached') {
this.gridApiAttached = params.api;
} else if (status === 'unattached') {
this.gridApiUnattached = params.api;
}
}
public exportUsers(status: UsersStatus): void {
const exportParams: CsvExportParams = {
columnKeys: ['name', 'surname', 'email'],
};
if (status === 'attached') {
this.gridApiAttached.exportDataAsCsv({
...exportParams,
fileName: 'RESIN - export utilisateurs rattachés',
});
} else if (status === 'unattached') {
this.gridApiUnattached.exportDataAsCsv({
...exportParams,
fileName: 'RESIN - export utilisateurs non rattachés',
});
}
}
}
<div fxLayout="column" fxLayoutGap="20px" class="content-container full-screen">
<div fxLayout="row" fxLayoutAlign="center center"><h1>Administration</h1></div>
<div fxLayout="row" fxLayoutGap="20px" fxLayoutAlign="center center">
<button (click)="changeActiveFeature(features.pendingStructures)">Revendication structure</button>
<button (click)="changeActiveFeature(features.structuresList)">Liste structures</button>
<button (click)="changeActiveFeature(features.manageUsers)">Gestion des utilisateurs</button>
<button (click)="changeActiveFeature(features.lockdownInfo)">Gestion des infos covid</button>
<button (click)="changeActiveFeature(features.jobsList)">Fonctions</button>
<button (click)="changeActiveFeature(features.employersList)">Employeurs</button>
<app-button
[text]="'Revendication structure'"
[style]="buttonTypeEnum.Secondary"
(click)="changeActiveFeature(features.pendingStructures)"
></app-button>
<app-button
[text]="'Liste structures'"
[style]="buttonTypeEnum.Secondary"
(click)="changeActiveFeature(features.structuresList)"
></app-button>
<app-button
[text]="'Gestion des utilisateurs'"
[style]="buttonTypeEnum.Secondary"
(click)="changeActiveFeature(features.manageUsers)"
></app-button>
<app-button
[text]="'Infos covid'"
[style]="buttonTypeEnum.Secondary"
(click)="changeActiveFeature(features.lockdownInfo)"
></app-button>
<app-button
[text]="'Fonctions'"
[style]="buttonTypeEnum.Secondary"
(click)="changeActiveFeature(features.jobsList)"
></app-button>
<app-button
[text]="'Employeurs'"
[style]="buttonTypeEnum.Secondary"
(click)="changeActiveFeature(features.employersList)"
></app-button>
<a target="_blank" class="custom-link" rel="noopener noreferrer" [href]="ghostLink">Ghost</a>
</div>
<div *ngIf="selectedFeature === features.structuresList">
......
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 { PanelRouteService } from '../../services/panel-route.service';
@Component({
selector: 'app-admin-panel',
templateUrl: './panel.component.html',
providers: [PanelRouteService]
providers: [PanelRouteService],
})
export class PanelComponent implements OnInit {
public features = AdminPannelEnum;
public ghostLink = environment.ghostAdmin;
public selectedFeature;
public buttonTypeEnum = ButtonType;
constructor(private panelRouteService: PanelRouteService) {
this.panelRouteService.destinationChanged$.subscribe((selected: AdminPannelEnum) => {
......
@import '../../../assets/scss/icons';
@import '../../../assets/scss/color';
@import '../../../assets/scss/typography';
@import '../../../assets/scss/breakpoint';
@import '../../../assets/scss/shapes';
@import '../../../assets/scss/hyperlink';
@import '../../../assets/scss/z-index';
.modalemployers {
left: 515px;
......@@ -13,119 +8,6 @@
left: 412px;
}
.maxModal .blockLigne {
box-sizing: border-box;
width: 360px;
.smallList {
display: block;
box-sizing: border-box;
background: $grey-8;
max-width: 300px;
padding: 0.5rem !important;
margin-top: 1rem !important;
}
}
.modal {
max-width: 360px;
width: auto;
z-index: $modal-z-index !important;
position: fixed;
box-shadow: $box-shadow-simple;
border-radius: 8px;
margin-top: 25px;
@media #{$large-phone} {
height: 100%;
max-height: auto;
max-width: auto;
width: 100%;
position: fixed;
top: 0;
left: 0;
border: none;
padding: 0;
}
background: $white;
.body-wrap {
@media #{$large-phone} {
height: 100vh;
height: -webkit-fill-available;
}
.titleFilter {
display: none !important;
margin: 27px 25px 0px 25px;
@include lato-bold-26;
@media #{$large-phone} {
display: flex !important;
}
}
}
.contentModal {
overflow-y: auto;
max-width: 1100px;
border-bottom: 1px solid $grey;
@media #{$large-phone} {
max-height: none;
height: 100%;
}
.blockFiltre {
width: auto;
margin: 25px 20px;
margin-bottom: calc(25px - 1rem);
min-width: 200px;
@media #{$large-phone} {
margin: 0 18px;
padding: 25px 0;
min-width: 0;
}
}
.blockLigne {
padding-left: 0;
margin: 0px;
li {
margin-bottom: 1rem;
}
}
label {
@include lato-regular-16;
color: $grey-1;
}
.arrow {
cursor: pointer;
margin-left: auto;
background-color: transparent;
border-bottom: 1px solid $black;
border-right: 1px solid $black;
transform: translateY(-25%) rotate(45deg);
height: 7px;
width: 7px;
transition: all 300ms ease;
margin-top: -5px;
}
.toggled {
transform: translateY(25%) rotate(-135deg);
}
&.max-height {
max-height: 50vh;
overflow-y: overlay;
}
}
.footer {
box-sizing: border-box;
padding: 0.5rem;
.reset {
width: 45%;
text-align: center;
color: $grey-4;
}
.half-width {
width: 50%;
padding: 0 4px;
}
}
}
a {
@include hyperlink;
}
......@@ -2,17 +2,12 @@
<div class="userNumber">
{{ userList.length }} utilisateur(s)<span *ngIf="showPagination"> sur {{ totalUserResult }} </span>
</div>
<div
class="singleUser"
[ngClass]="{ singleResult: userList.length == 1 }"
*ngFor="let user of userList; let index = index"
(click)="goToUser(user._id)"
>
<div class="singleUser" *ngFor="let user of userList; let index = index" (click)="goToUser(user._id)">
<div class="avatar-container">
<app-svg-icon class="avatar" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'"></app-svg-icon>
</div>
<div class="identity">
<p class="name">{{ user.name }} {{ user.surname }}</p>
<p class="name">{{ user.name }} {{ user.surname.toUpperCase() }}</p>
<p class="job" *ngIf="user.job">{{ user.job.name }}</p>
</div>
<div class="employer" *ngIf="user.employer">{{ user.employer.name }}</div>
......