Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 7781f204

Přidáno uživatelem Václav Jirák před téměř 6 roky(ů)

Re #7458 Basic features of add days off component implemented

Zobrazit rozdíly:

webapp/package.json
11 11
  },
12 12
  "private": true,
13 13
  "dependencies": {
14
    "@angular/animations": "~7.2.0",
14
    "@angular/animations": "^7.2.14",
15
    "@angular/cdk": "^7.3.7",
15 16
    "@angular/common": "~7.2.0",
16 17
    "@angular/compiler": "~7.2.0",
17 18
    "@angular/core": "~7.2.0",
18 19
    "@angular/forms": "~7.2.0",
19 20
    "@angular/http": "latest",
21
    "@angular/material": "^7.3.7",
20 22
    "@angular/platform-browser": "~7.2.0",
21 23
    "@angular/platform-browser-dynamic": "~7.2.0",
22 24
    "@angular/router": "~7.2.0",
webapp/src/app/add-days-off-dialog/add-days-off-dialog.component.html
1
<h1 mat-dialog-title>Výběr volna</h1>
2

  
3
<div mat-dialog-content>
4
  <div>
5
    <label id="days-off-type-radio-group-label" class="dialog-label">Typ volna</label>
6
    <mat-radio-group aria-labelledby="days-off-type-radio-group-label" class="days-off-type-radio-group" [(ngModel)]="selectedDaysOffType">
7
      <mat-radio-button class="days-off-type-radio-button" *ngFor="let type of daysOffTypes" [value]="type" >
8
        {{type}}
9
      </mat-radio-button>
10
    </mat-radio-group>
11
  </div>
12

  
13
  <div class="datetime-interval">
14
    <div class="from-datetime">
15
      <label for="from-datetime-input" class="dialog-label">Od:</label>
16
      <div class="datetime-picker">
17
        <mat-form-field>
18
          <input id="from-datetime-input" matInput [matDatepicker]="startDatePicker" [(ngModel)]="data.fromDate">
19
          <mat-datepicker-toggle matSuffix [for]="startDatePicker"></mat-datepicker-toggle>
20
          <mat-datepicker #startDatePicker></mat-datepicker>
21
        </mat-form-field>
22
        <ngb-timepicker [(ngModel)]="data.fromTime" [minuteStep]="MINUTE_STEP"></ngb-timepicker>
23
      </div>
24
    </div>
25

  
26
    <div class="to-datetime">
27
      <label for="to-datetime-input" class="dialog-label">Do:</label>
28
      <div class="datetime-picker">
29
        <mat-form-field>
30
          <input id="to-datetime-input" matInput [matDatepicker]="endDatePicker" [(ngModel)]="data.toDate">
31
          <mat-datepicker-toggle matSuffix [for]="endDatePicker"></mat-datepicker-toggle>
32
          <mat-datepicker #endDatePicker></mat-datepicker>
33
        </mat-form-field>
34
        <ngb-timepicker [(ngModel)]="data.toTime" [minuteStep]="MINUTE_STEP"></ngb-timepicker>
35
      </div>
36
    </div>
37
  </div>
38
</div>
39

  
40
<div mat-dialog-actions align="end">
41
  <button mat-raised-button color="primary" (click)="onConfirmClick()">Potvrdit</button>
42
  <button mat-raised-button color="basic" (click)="onCloseClick()">Zavřít</button>
43
</div>
webapp/src/app/add-days-off-dialog/add-days-off-dialog.component.sass
1
.dialog-label
2
  display: block
3
  font-weight: bold
4

  
5
.datetime-picker > *
6
  display: table-cell
7

  
8
.days-off-type-radio-group
9
  display: flex
10
  flex-direction: column
11
  margin: 15px 0
webapp/src/app/add-days-off-dialog/add-days-off-dialog.component.ts
1
import { Component, Inject } from '@angular/core';
2
import { MAT_DIALOG_DATA, MatDialogRef, MatSnackBar } from '@angular/material';
3
import { FormControl } from '@angular/forms';
4

  
5
@Component({
6
  selector: 'app-add-days-off-dialog',
7
  templateUrl: './add-days-off-dialog.component.html',
8
  styleUrls: ['./add-days-off-dialog.component.sass']
9
})
10
export class AddDaysOffDialogComponent {
11
  MINUTE_STEP = 15;
12

  
13
  selectedDaysOffType: string;
14
  daysOffTypes: string[] = ['Sick-days', 'Extra dovolená'];
15

  
16
  constructor(
17
    public dialogRef: MatDialogRef<AddDaysOffDialogComponent>,
18
    @Inject(MAT_DIALOG_DATA) public data: AddDaysOffDialogData,
19
    private snackBar: MatSnackBar
20
  ) {
21
    if (this.data.toDate == null) {
22
      this.data.toDate = this.data.fromDate;
23
    }
24
    if (this.data.fromTime == null) {
25
      this.data.fromTime = {hour: 8, minute: 0};
26
    }
27
    if (data.toTime == null) {
28
      this.data.toTime = {hour: 16, minute: 0};
29
    }
30
  }
31

  
32
  onConfirmClick(): void {
33
    // TODO lokalizace
34

  
35
    if (this.selectedDaysOffType == null) {
36
      this.snackBar.open('Nevybrán typ volna', 'Zavřít', { duration: 5000 });
37
    } else if (this.data.fromDate > this.data.toDate) {
38
      this.snackBar.open('Datum "od" nemůže být větší než "do"', 'Zavřít', { duration: 5000 });
39
    } else {
40
      // TODO API CALL
41
      this.dialogRef.close();
42
    }
43
  }
44

  
45
  onCloseClick(): void {
46
    this.dialogRef.close();
47
  }
48

  
49
}
50

  
51
export interface AddDaysOffDialogData {
52
  fromDate: FormControl;
53
  toDate: FormControl;
54
  fromTime: { hour: number, minute: number };
55
  toTime: { hour: number, minute: number };
56
}
webapp/src/app/add-days-off-dialog/add-days-off-dialog.module.ts
1
import { NgModule } from '@angular/core';
2
import { CommonModule } from '@angular/common';
3
import { AddDaysOffDialogComponent } from './add-days-off-dialog.component';
4
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
5
import {
6
  MatButtonModule,
7
  MatDialogModule,
8
  MatDatepickerModule,
9
  MatNativeDateModule,
10
  MatInputModule, MatRadioModule, MatSnackBarModule
11
} from '@angular/material';
12
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
13
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
14
import {BrowserModule} from '@angular/platform-browser';
15

  
16
@NgModule({
17
  declarations: [AddDaysOffDialogComponent],
18
  imports: [
19
    CommonModule,
20
    BrowserAnimationsModule,
21
    MatButtonModule,
22
    MatDialogModule,
23
    NgbModule,
24
    FormsModule,
25
    MatDatepickerModule,
26
    MatNativeDateModule,
27
    ReactiveFormsModule,
28
    BrowserModule,
29
    MatInputModule,
30
    MatRadioModule,
31
    MatSnackBarModule
32
  ],
33
  exports: [
34
    AddDaysOffDialogComponent
35
  ],
36
  entryComponents: [
37
    AddDaysOffDialogComponent
38
  ]
39
})
40
export class AddDaysOffDialogModule { }
webapp/src/app/dashboard/employer-dashboard/employer-dashboard.component.ts
1 1
import { Component, OnInit } from '@angular/core';
2
import {UserToApprove} from '../../user-approval/user-to-approve.model';
3
import {DaysOff} from '../../shared/days-off.model';
4
import {OffDayType } from '../../shared/off-day-type';
2
import { UserToApprove } from '../../user-approval/user-to-approve.model';
3
import { DaysOff } from '../../shared/days-off.model';
4
import { OffDayType } from '../../shared/off-day-type';
5
import { MatDialog } from '@angular/material';
6
import { AddDaysOffDialogComponent } from '../../add-days-off-dialog/add-days-off-dialog.component';
5 7

  
6 8
@Component({
7 9
  selector: 'app-employer-dashboard',
......
43 45

  
44 46
  oncomingDaysOff: DaysOff[] = [];
45 47

  
46
  constructor() { }
48
  constructor(public dialog: MatDialog) { }
47 49

  
48 50
  ngOnInit() {
49 51
    this.oncomingDaysOff = this.calculateComingDaysOff();
50 52
  }
51 53

  
52 54
  onDateSelect( date: Date ) {
53
    console.log('Date selected: ' + date.toDateString());
55
    this.dialog.open(AddDaysOffDialogComponent, {
56
      data: {
57
        fromDate: date
58
      }
59
    });
54 60
  }
55 61

  
56 62
  userApproved( user: UserToApprove, approved: boolean ) {
......
60 66
    );
61 67
  }
62 68

  
63
  daysOffApproved(daysOff: DaysOff, approved: boolean ) {
69
  daysOffApproved(daysOff: DaysOff, approved: boolean) {
64 70
    console.log(daysOff.username + ', ' + approved);
65 71
    this.daysOffToApprove.splice(
66 72
      this.daysOffToApprove.indexOf(daysOff), 1
webapp/src/app/dashboard/employer-dashboard/employer-dashboard.module.ts
6 6
import { UserApprovalModule } from '../../user-approval/user-approval.module';
7 7
import { DaysOffApprovalModule } from '../../days-off-approval/days-off-approval.module';
8 8
import { OncomingDaysOffModule } from '../../oncoming-days-off/oncoming-days-off.module';
9
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
10
import {AddDaysOffDialogModule} from '../../add-days-off-dialog/add-days-off-dialog.module';
11
import {MatDialogModule} from '@angular/material';
9 12

  
10 13
@NgModule({
11 14
  declarations: [ EmployerDashboardComponent ],
......
17 20
    UserApprovalModule,
18 21
    DaysOffApprovalModule,
19 22
    DayPickerModule,
20
    OncomingDaysOffModule
23
    OncomingDaysOffModule,
24
    BrowserAnimationsModule,
25
    AddDaysOffDialogModule,
26
    MatDialogModule
21 27
  ]
22 28
})
23 29
export class EmployerDashboardModule { }
webapp/src/styles.sass
1
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'
2

  
1 3
*
2 4
  margin: 0
3 5
  padding: 0

Také k dispozici: Unified diff