Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

183 Zeilen
6.3 KiB

  1. import {
  2. ChangeDetectionStrategy,
  3. ChangeDetectorRef,
  4. Component,
  5. EventEmitter,
  6. OnInit,
  7. Output,
  8. ViewChild
  9. } from '@angular/core';
  10. import {IInternalMeeting} from '../../../model/entities/internal-meeting';
  11. import {NgForm} from '@angular/forms';
  12. import {InternalMeetingEditComponent} from '../internal-meeting-edit/internal-meeting-edit.component';
  13. import {Utils} from '../../../utils/utils';
  14. import {Factory} from '../../../factory/factory';
  15. import {IConfig} from '../../../model/virtual/config';
  16. import {AppService} from '../../../services/app.service';
  17. import {IUser} from '../../../model/entities/user';
  18. import {FormComponent} from '../../../components/form-component';
  19. // import {ScrollToService} from '@nicky-lenaers/ngx-scroll-to';
  20. import {MeetingService} from '../../../services/meeting.service';
  21. import {Const} from '../../../utils/const';
  22. @Component({
  23. selector: 'app-internal-meeting-detail',
  24. templateUrl: './internal-meeting-detail.component.html',
  25. styleUrls: ['./internal-meeting-detail.component.scss'],
  26. // NOTE: We need manual change detection in this component
  27. changeDetection: ChangeDetectionStrategy.OnPush,
  28. })
  29. export class InternalMeetingDetailComponent extends FormComponent implements OnInit {
  30. @Output() editMeeting: EventEmitter<IInternalMeeting> = new EventEmitter<IInternalMeeting>();
  31. @Output() deleteMeeting: EventEmitter<number> = new EventEmitter<number>();
  32. @Output() editMeetingReport: EventEmitter<any> = new EventEmitter<any>();
  33. @ViewChild('internalMeetingDetailEdit', { static: true }) internalMeetingDetailEdit: InternalMeetingEditComponent;
  34. @ViewChild('internalMeetingReportForm', { static: true }) internalMeetingReportForm: NgForm;
  35. public internalMeeting: IInternalMeeting;
  36. public creator: IUser;
  37. public owner: IUser;
  38. public participants: IUser[];
  39. public dateStart: string;
  40. public dateEnd: string;
  41. public timeStart: string;
  42. public timeEnd: string;
  43. public config: IConfig;
  44. public isEditMode: boolean;
  45. public errorMsg: string;
  46. public reportFormVisible: boolean;
  47. public reportOld: string;
  48. public hasAdminRights: boolean;
  49. constructor(public appService: AppService, private meetingService: MeetingService, /*protected scrollToService: ScrollToService,*/ private ref: ChangeDetectorRef) {
  50. super(/*scrollToService*/);
  51. }
  52. ngOnInit() {
  53. this.hasAdminRights = this.appService.userHasRole(Const.USER_ROLE_ADMIN);
  54. this.config = this.appService.getConfig();
  55. this.internalMeeting = Factory.getEmptyInternalMeeting();
  56. this.creator = Factory.getEmptyUser();
  57. this.owner = Factory.getEmptyUser();
  58. this.participants = [];
  59. this.dateStart = '';
  60. this.dateEnd = '';
  61. this.timeStart = '';
  62. this.timeEnd = '';
  63. this.isEditMode = false;
  64. this.errorMsg = '';
  65. this.reportFormVisible = false;
  66. this.reportOld = '';
  67. }
  68. /**
  69. * Set data
  70. */
  71. public setData(internalMeeting: IInternalMeeting): void {
  72. this.internalMeeting = internalMeeting;
  73. this.setMeetingData();
  74. }
  75. /**
  76. * Updates data
  77. */
  78. public updateData(internalMeeting: IInternalMeeting): void {
  79. if (null !== this.internalMeeting.id) {
  80. this.internalMeeting = internalMeeting;
  81. this.setMeetingData();
  82. }
  83. }
  84. /**
  85. * Sets variables for meeting
  86. */
  87. public setMeetingData() {
  88. this.reportFormVisible = false;
  89. this.reportOld = this.internalMeeting.report;
  90. this.creator = this.config.vc_user_by_id[this.internalMeeting.creation_user_id];
  91. this.owner = this.config.vc_user_by_id[this.internalMeeting.owner_user_id];
  92. this.participants = [];
  93. for (let i = 0; i < this.internalMeeting.v_participants.length; i++) {
  94. this.participants.push(this.config.vc_user_by_id[this.internalMeeting.v_participants[i].participant_user_id]);
  95. }
  96. this.dateStart = Utils.getDateTimeToDisplay(this.internalMeeting.start_date);
  97. this.dateEnd = Utils.getDateTimeToDisplay(this.internalMeeting.end_date);
  98. this.timeStart = Utils.getDateTimeToDisplay(this.internalMeeting.start_date, false, true);
  99. this.timeEnd = Utils.getDateTimeToDisplay(this.internalMeeting.end_date, false, true);
  100. this.isEditMode = false;
  101. this.errorMsg = '';
  102. this.resetFormValidation();
  103. // NOTE: We need manual change detection in this component
  104. this.ref.detectChanges();
  105. }
  106. /**
  107. * Edit meeting entry
  108. */
  109. public editEntry(): void {
  110. this.isEditMode = true;
  111. this.internalMeetingDetailEdit.setData(Utils.deepClone(this.internalMeeting) as IInternalMeeting);
  112. }
  113. /**
  114. * Edits meeting entry
  115. */
  116. public editInternalMeetingFunction(internalMeeting: IInternalMeeting) {
  117. this.editMeeting.emit(internalMeeting);
  118. }
  119. /**
  120. * Delete meeting entry
  121. */
  122. public deleteEntry(): void {
  123. const confirmAction = confirm('Wollen Sie diesen Eintrag wirklich löschen?');
  124. if (confirmAction === true) {
  125. this.deleteMeeting.emit(this.internalMeeting.id);
  126. }
  127. }
  128. /**
  129. * Check if edit report after meeting has started
  130. */
  131. public editReport(): void {
  132. this.meetingService.apiCheckInternalMeetingReport(this.internalMeeting.id).subscribe(
  133. data => {
  134. this.reportFormVisible = data.result_data as boolean;
  135. // NOTE: We need manual change detection in this component
  136. this.ref.detectChanges();
  137. // todo this.scrollUp('internal-meeting-edit-report');
  138. },
  139. error => {
  140. }
  141. );
  142. }
  143. /**
  144. * Resets Form Validation
  145. */
  146. public resetFormValidation(): void {
  147. if (this.reportFormVisible) {
  148. this.internalMeetingReportForm.form.markAsUntouched();
  149. }
  150. }
  151. /**
  152. * Saves internal meeting report
  153. */
  154. public onFormSubmit({value, valid}: { value: any, valid: boolean }): void {
  155. this.errorMsg = 'Bitte beheben Sie alle Fehler.';
  156. if (valid) {
  157. this.editMeetingReport.emit({
  158. id: this.internalMeeting.id,
  159. report: this.internalMeeting.report
  160. });
  161. this.errorMsg = '';
  162. } else {
  163. // todo this.scrollUp('internal-meeting-edit-report');
  164. }
  165. }
  166. }