Skip to content

Commit

Permalink
refactor activities page to use a calendar
Browse files Browse the repository at this point in the history
  • Loading branch information
RignonNoel committed Jun 14, 2018
1 parent 019e44f commit 96bce7e
Show file tree
Hide file tree
Showing 15 changed files with 1,004 additions and 70 deletions.
38 changes: 38 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@
"@angular/platform-browser": "^5.0.0",
"@angular/platform-browser-dynamic": "^5.0.0",
"@angular/router": "^5.0.0",
"angular-calendar": "^0.24.1",
"angular2-multiselect-dropdown": "^2.5.0",
"angular2-notifications": "^0.9.7",
"core-js": "^2.4.1",
"date-fns": "^1.29.0",
"flexboxgrid-sass": "^8.0.5",
"font-awesome": "^4.7.0",
"font-awesome-sass": "^4.7.0",
Expand Down
9 changes: 8 additions & 1 deletion src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,12 @@ import { ForgotPasswordComponent } from './components/pages/forgot-password/forg
import { ForgotPasswordConfirmationComponent } from './components/pages/forgot-password-confirmation/forgot-password-confirmation.component';
import { ResetPasswordComponent } from './components/pages/reset-password/reset-password.component';
import { MyTableComponent } from './components/my-table/my-table.component';
import { CalendarModule } from 'angular-calendar';
import localeFr from '@angular/common/locales/fr';
import { registerLocaleData } from '@angular/common';
import { MyBenevolometreComponent } from './components/my-benevolometre/my-benevolometre.component';

registerLocaleData(localeFr);

const appRoutes = [
{
Expand Down Expand Up @@ -294,7 +299,8 @@ export class DefaultIntl {
MyTableComponent,
ForgotPasswordComponent,
ForgotPasswordConfirmationComponent,
ResetPasswordComponent
ResetPasswordComponent,
MyBenevolometreComponent
],
imports: [
BrowserModule,
Expand All @@ -311,6 +317,7 @@ export class DefaultIntl {
AngularMultiSelectModule,
OwlDateTimeModule,
OwlNativeDateTimeModule,
CalendarModule.forRoot()
],
exports: [ RouterModule ],
providers: [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<div class="my-benevolometre">
<div class="my-benevolometre__legend">
<div class="my-benevolometre__legend__title"
*ngFor="let part of parts"
[style.width.%]="part.percentage">
{{ part.totalPercentage }}%
</div>
</div>
<div class="my-benevolometre__body">
<div class="my-benevolometre__body__part"
*ngFor="let part of parts"
[style.background]="part.color"
[style.width.%]="part.percentage">
<div class="my-benevolometre__body__part__head"
*ngIf="part.totalPercentage < 100"
[style.background]="part.color">
</div>
<div class="my-benevolometre__body__part__hover">
{{ part.title }}
</div>
</div>
</div>
<div class="my-benevolometre__name">
Taux de complétion de la page horaire
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
@import "../../../assets/scss/theme";

.my-benevolometre {
&__legend {
padding: 0 2px;
display: flex;
justify-content: flex-start;

&__title {
border-right: 2px solid $main-border;
text-align: right;
padding-right: 5px;
}
}

&__body {
position: relative;

border: 4px solid $main-border;
border-radius: 3px;
width: 100%;
height: 28px;

display: flex;
justify-content: flex-start;

&__part {
height: 100%;

&__head {
position: relative;
left: 97%;
height: 100%;
width: 16px;
border-radius: 0 50% 50% 0;
}

&__hover {
position: absolute;
left: 0;
top: 45px;
width: 100%;
color: $color-info-text;
background-color: $color-info-background;
border: 2px solid $color-info-border;
border-top: none;
padding: 10px;
display: none;
}

&:hover {
.my-benevolometre__body__part__hover {
display: block;
}
}
}
}

&__name {
font-size: 12px;
text-align: right;
}
}
22 changes: 22 additions & 0 deletions src/app/components/my-benevolometre/my-benevolometre.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Component, Input, OnInit } from '@angular/core';

@Component({
selector: 'app-my-benevolometre',
templateUrl: './my-benevolometre.component.html',
styleUrls: ['./my-benevolometre.component.scss']
})
export class MyBenevolometreComponent implements OnInit {

@Input() parts: any;

constructor() { }

ngOnInit() {
let total = 0;
for (const part of this.parts) {
part.totalPercentage = part.percentage + total;
total += part.percentage;
}
}

}
7 changes: 6 additions & 1 deletion src/app/components/my-table/my-table.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
Actions
</th>
</tr>
<tr *ngIf="data && data.length === 0" class="my-table__table__no-data">
<td [colSpan]="settings.columns.length" class="my-table__table__no-data__cell">
{{settings.noDataText}}
</td>
</tr>
<tr *ngFor="let item of data"
[ngClass]="{'my-table__table__line--clickable' : settings.clickable}"
(click)="clickItem(item)"
Expand Down Expand Up @@ -54,5 +59,5 @@
title="Supprimer ?"
button2Label="Supprimer"
(button2)="remove()">
Etes-vous vraiment sur de vouloir supprimer ?
Êtes-vous vraiment sûr de vouloir supprimer ?
</app-my-modal>
8 changes: 8 additions & 0 deletions src/app/components/my-table/my-table.component.scss
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@
}
}

&__no-data {
text-align: center;

&__cell {
padding: 10px;
}
}

&__line {
background-color: $main-background;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
<div class="activities-page">
<div class="activities-page__header" *ngIf="cell">
<div class="activities-page__header__title">
{{ cell.name }}
</div>
<div class="activities-page__header__address">
{{ cell.address.address_line1 }}, {{ cell.address.address_line2 }}<br/>
{{ cell.address.city }}, {{ cell.address.postal_code }}
</div>
</div>
<div class="activities-page__filters">
<angular2-multiselect [data]="dropdownCycleList" [(ngModel)]="selectedCycles"
[settings]="dropdownCycleSettings"
Expand All @@ -16,48 +25,64 @@
</angular2-multiselect>
</div>
<div class="activities-page__activities">
<table class="table">
<tr>
<th>Début</th>
<th>Fin</th>
<th>Activité</th>
<th>Lieu</th>
<th>Inscription</th>
</tr>
<tr *ngFor="let event of filteredEvents">
<td>
{{ event.start_date | date:'dd MMMM yyyy'}}<br/>
{{ event.start_date | date:'HH:mm'}}
</td>
<td>
{{ event.end_date | date:'dd MMMM yyyy'}}<br/>
{{ event.end_date | date:'HH:mm'}}
</td>
<td>
{{ event.task_type.name }}
</td>
<td>
{{ event.cell.address.address_line1 }}<br/>
{{ event.cell.address.address_line2 }}<br/>
{{ event.cell.address.postal_code }} {{ event.cell.address.city }}
</td>
<td>
Bénévoles : {{ event.nb_volunteers }} / {{ event.nb_volunteers_needed }}<br>
Remplaçants : {{ event.nb_volunteers_standby }} / {{ event.nb_volunteers_standby_needed }}<br>
<p *ngIf="event.volunteers.indexOf(user.id) < 0">
<a *ngIf="event.nb_volunteers < event.nb_volunteers_needed || event.nb_volunteers_standby < event.nb_volunteers_standby_needed" routerLink="/confirmation/{{ event.id }}" class="button">
M'inscrire
</a>
<span *ngIf="event.nb_volunteers >= event.nb_volunteers_needed && event.nb_volunteers_standby >= event.nb_volunteers_standby_needed">
Plage horaire complète
</span>
</p>
<p *ngIf="event.volunteers.indexOf(user.id) >= 0">
Déjà inscrit.
</p>
</td>
</tr>
</table>
<div class="activities-page__activities__calendar">
<div class="activities-page__activities__calendar__actions">
<a class="button"
mwlCalendarPreviousView
[view]="view"
[(viewDate)]="viewDate"
(viewDateChange)="activeDayIsOpen = false">
Précédent
</a>
<h3 class="activities-page__activities__calendar__actions__date">
{{ viewDate | calendarDate:(view + 'ViewTitle'):locale }}
</h3>
<a class="button"
mwlCalendarNextView
[view]="view"
[(viewDate)]="viewDate"
(viewDateChange)="activeDayIsOpen = false">
Suivant
</a>
</div>
<div class="activities-page__activities__calendar__calendar">
<mwl-calendar-month-view
[viewDate]="viewDate"
[events]="calendarEvents"
[weekStartsOn]="weekStartsOn"
[locale]="locale"
[activeDayIsOpen]="activeDayIsOpen"
(dayClicked)="dayClicked($event.day)">
</mwl-calendar-month-view>
</div>
<div *ngIf="clickedDay" class="activities-page__activities__calendar__details">
<div class="activities-page__activities__calendar__details__title">
Liste des plages horaires du {{ clickedDay | date:"dd MMMM yyyy"}}:
</div>
<div class="activities-page__activities__calendar__details__table">
<app-my-table [settings]="settings"
[data]="eventsOfDay"
(selectItem)="eventClicked($event)">
</app-my-table>
</div>
</div>
</div>
<div class="activities-page__activities__infos">
<div class="activities-page__activities__infos__explanation">
<div>
<div class="activities-page__activities__infos__explanation__title">
Trouve une plage horaire de bénévolat en quelques clics à l'aide du calendrier!
</div>
<img class="activities-page__activities__infos__explanation__icon" src="../../../../assets/images/right-drawn-arrow.svg"/>
</div>
</div>
<div class="activities-page__activities__infos__benevolometre">
<div class="activities-page__activities__infos__benevolometre__title">
Tu souhaites maximiser ton implication?<br/>
Laisse-toi guider par notre bénévolomètre :
</div>
<app-my-benevolometre [parts]="benevolometre"></app-my-benevolometre>
</div>
</div>
</div>

</div>
Loading

0 comments on commit 96bce7e

Please sign in to comment.