Project

General

Profile

1
import {Component, OnInit, Input} from '@angular/core';
2
import { ActivatedRoute, Router } from "@angular/router";
3
import {FormGroup, FormArray, FormBuilder, Validators} from "@angular/forms";
4
import { HelpContentService } from "../../services/help-content.service";
5
import { Page } from "../../domain/page";
6
import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties';
7

    
8
import {Session} from '../../openaireLibrary/login/utils/helper.class';
9
import {LoginErrorCodes} from '../../openaireLibrary/login/utils/guardHelper.class';
10

    
11
@Component({
12
    selector: 'divId-form',
13
    templateUrl: './divId-form.component.html',
14
})
15

    
16
export class DivIdFormComponent implements OnInit{
17
    @Input('group')
18
    myForm: FormGroup;
19
    @Input('pageId')
20
    pageId: string;
21
    @Input('formPages')
22
    formPages: Page[] = [];
23

    
24
    //public allPages : Page[] = [];
25
    public allPages: Map<Page, boolean> = new Map<Page, boolean>();
26
    private gotPages: boolean = false;
27

    
28
    public properties:EnvProperties = null;
29

    
30
    public showLoading: boolean = false;
31
    public errorMessage: string = '';
32
    selectedCommunityPid = null;
33
    constructor(private route: ActivatedRoute, private _router: Router, public _fb: FormBuilder, private _helpContentService: HelpContentService){}
34

    
35
    ngOnInit(): void {
36
      this.route.data
37
        .subscribe((data: { envSpecific: EnvProperties }) => {
38
           this.properties = data.envSpecific;
39
           this.route.queryParams.subscribe(params => {
40
             this.selectedCommunityPid = params['communityId'];
41
           });
42
         });
43
    }
44

    
45
    public getKeys( map) {
46
      return Array.from(map.keys());
47
    }
48

    
49
    getPages(includedPages: Set<String>) {
50
      if(!Session.isLoggedIn()){
51
        this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl":  this._router.url} });
52
      } else {
53
        this.showLoading = true;
54
        this.errorMessage = "";
55

    
56
        this._helpContentService.getPages(this.properties.adminToolsAPIURL,this.selectedCommunityPid).subscribe(
57
          pages => {
58
            //this.allPages = allPages;
59
            for(let page of pages) {
60
              if(includedPages.has(page._id)) {
61
                this.allPages.set(page, true);
62
              } else {
63
                this.allPages.set(page, false);
64
              }
65
            }
66
            this.showLoading = false;
67
          },
68
          error => this.handleError('System error retrieving pages', error)
69
        );
70
      }
71
    }
72

    
73
    public toggle() {
74
      if(!Session.isLoggedIn()){
75
        this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl":  this._router.url} });
76
      } else {
77
        this.myForm.value.isCollapsed = !this.myForm.value.isCollapsed;
78
  ///////
79
        if(!this.myForm.value.isCollapsed) {
80
          let includedPages: Set<String> = new Set<String>();
81
          for(let pageName of this.myForm.value.pages) {
82
            includedPages.add(pageName._id);
83
          }
84

    
85
          let allPages = this.allPages;
86

    
87
          let self = this;
88
          allPages.forEach(function (status, page, map) {
89
            if(includedPages.has(page._id)) {
90
              self.allPages.set(page, true);
91
            } else {
92
              self.allPages.set(page, false);
93
            }
94
          });
95

    
96

    
97
          if(!this.gotPages) {
98
            this.gotPages = true;
99
            this.getPages(includedPages);
100
          }
101
        }
102
      }
103
/////
104
    }
105

    
106
    public get form() {
107
        return this._fb.group({
108
            _id: '',
109
            name : ['', Validators.required],
110
            pages: this._fb.array([]),
111
            isCollapsed: [true]
112
        });
113
    }
114

    
115
    public reset() {
116
        this.myForm.patchValue({
117
            _id : '',
118
            name : '',
119
            isCollapsed: [true]
120
        });
121

    
122
        this.setPages([]);
123
        this.formPages = [];
124
    }
125

    
126
    public get pages(): FormArray {
127
      return this.myForm.get('pages') as FormArray;
128
    };
129

    
130
    setPages(pages: Page[]) {
131
      //const pageFormArray = this._fb.array(pages);
132
      //this.myForm.setControl('pages', pageFormArray);
133

    
134
      const pageFGs = pages.map(page => this._fb.group(page));
135
      const pageFormArray = this._fb.array(pageFGs);
136
      this.myForm.setControl('pages', pageFormArray);
137
    }
138

    
139
    indexOfPageInForm(pageId: string): number {
140
      let index: number = -1;
141
      for(let i=0; i<this.formPages.length; i++) {
142
        if(this.formPages[i]._id == pageId) {
143
          index = i;
144
          break;
145
        }
146
      }
147
      return index;
148
    }
149

    
150
    public togglePage(status : boolean, page: Page) {
151
      /*let index: number = this.indexOfPageInForm(page._id);
152

    
153
      if(status && index<0) {
154
        this.formPages.push(page);
155
        this.myForm.value.pages.push(page._id);
156
      } else if(!status){
157
        if(index >= 0) {
158
          this.formPages.splice(index, 1);
159
          this.myForm.value.pages.splice(index, 1);
160
        }
161
      }*/
162

    
163
      if(!Session.isLoggedIn()){
164
        this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl":  this._router.url} });
165
      } else {
166
        let index: number = -1;
167
        for(let i=0; i<this.myForm.get('pages').value.length; i++) {
168
          if(this.myForm.get('pages').value[i]._id == page._id) {
169
            index = i;
170
            break;
171
          }
172
        }
173

    
174
        this.allPages.set(page, status);
175

    
176
        if(status && index<0) {
177
          this.myForm.value.pages.push(page);
178
        } else  if(!status){
179
          if(index >= 0) {
180
            this.myForm.value.pages.splice(index, 1);
181
          }
182
        }
183
      }
184
    }
185

    
186
    handleError(message: string, error) {
187
        this.errorMessage = message;
188
        console.log('Server responded: ' + error);
189

    
190
        this.showLoading = false;
191
    }
192
}
(2-2/6)