Project

General

Profile

1
/**
2
 * Created by stefania on 7/13/17.
3
 */
4
import { Component, ViewChild, OnInit } from '@angular/core';
5
import { FormGroup } from "@angular/forms";
6
import { ActivatedRoute } from "@angular/router";
7
import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component";
8
import { HelpContentService } from "../../services/help-content.service";
9
import { PageHelpContent, CheckPageHelpContent, PageHelpContentFilterOptions } from "../../domain/page-help-content";
10
import { Page } from "../../domain/page";
11
import {Router} from "@angular/router";
12
import { Community } from "../../domain/community";
13

    
14
@Component({
15
    selector: 'page-help-contents',
16
    templateUrl: './page-help-contents.component.html',
17
})
18

    
19
export class PageHelpContentsComponent implements OnInit {
20

    
21
    // @ViewChild(ModalFormComponent)
22
    // @ViewChild('saveModal')
23
    // public modal:ModalFormComponent;
24
    //
25
    // @ViewChild('updateModal')
26
    // public updateModal:ModalFormComponent;
27
    //
28
    // @ViewChild(PageHelpContentsFormComponent)
29
    // public formComponent : PageHelpContentsFormComponent;
30

    
31
    @ViewChild('deleteConfirmationModal')
32
    public deleteConfirmationModal : DeleteConfirmationDialogComponent;
33

    
34
    public pageHelpContentsCheckboxes : CheckPageHelpContent[] = [];
35

    
36
    public pageHelpContents : PageHelpContent[] = [];
37

    
38
    public errorMessage: string;
39

    
40
    public formGroup : FormGroup;
41

    
42
    public pages: Page[];
43

    
44
    public checkboxAll : boolean = false;
45

    
46
    public filters : PageHelpContentFilterOptions = {id : '', active : null, text : new RegExp('')};
47

    
48
    public counter = {all : 0, active : 0, inactive : 0};
49

    
50
    public communities: Community[] = [];
51

    
52
    public selectedCommunityId: string;
53

    
54
    public selectedPageId: string;
55

    
56
    public pageType: string;
57

    
58
    ngOnInit() {
59
      this.route.queryParams.subscribe(params => {
60

    
61
        this.selectedCommunityId = params['community'];
62
        this.selectedPageId = params['page'];
63

    
64
        if(this.selectedCommunityId && this.selectedPageId) {
65
          this.getPageHelpContents(this.selectedCommunityId);
66
          this.getPage(this.selectedPageId);
67
        } else {
68
          this.selectedPageId = "";
69
          this.getCommunities();
70
        }
71
      });
72
        // this.formGroup = this.formComponent.form;
73
    }
74

    
75
    constructor(private route: ActivatedRoute, private _helpService: HelpContentService, private router : Router) {}
76

    
77
    getPage(pageId: string) {
78
      let self = this;
79
      this._helpService.getPage(pageId).subscribe(
80
          page => {
81
              self.pageType = page.type;
82
            }
83
          );
84
    }
85

    
86
    getCommunities() {
87
        let self = this;
88
        this._helpService.getCommunities().subscribe(
89
            communities => {
90
                self.communities = communities;
91
                self.selectedCommunityId = self.communities[0]._id;
92
                this.getPages(self.selectedCommunityId);
93
                this.getPageHelpContents(self.selectedCommunityId);
94
        },
95
        error => this.handleError('System error retrieving communities', error));
96
    }
97

    
98
    getPages(community_id: string) {
99
        this._helpService.getCommunityPages(community_id).subscribe(
100
            pages => this.pages = pages,
101
            error => this.handleError('System error retrieving pages', error));
102
    }
103

    
104
    public countPageHelpContents() {
105
        this.counter = {all : 0, active : 0, inactive : 0};
106
        let filter = Object.assign({},this.filters);
107
        filter.active = null;
108
        this.pageHelpContents.forEach(_ => {
109
            if(this.filterPageHelpContent(_,filter)){
110
                if (_.isActive==true) this.counter.active++;
111
                else this.counter.inactive++
112
            }
113
        });
114
        this.counter.all = this.counter.active + this.counter.inactive;
115
    }
116

    
117
    getPageHelpContents(community_id: string) {
118
        let self = this;
119
        this._helpService.getCommunityPageHelpContents(community_id).subscribe(
120
            pageHelpContents => {
121
                self.pageHelpContents = pageHelpContents as Array<PageHelpContent>;
122
                self.counter.all = self.pageHelpContents.length;
123
                self.pageHelpContentsCheckboxes = [];
124
                /*self.pageHelpContents.forEach(_ => {
125
                  let page: Page = _.page as Page;
126
                  if(!self.selectedPageId || (page._id == self.selectedPageId)) {
127
                    self.pageHelpContentsCheckboxes.push(<CheckPageHelpContent>{pageHelpContent : _, checked : false});
128
                  }
129
                });*/
130
                for (let i = self.pageHelpContents.length - 1; i >= 0; i -= 1) {
131
                  let page: Page =  self.pageHelpContents[i].page as Page;
132
                  if(!self.selectedPageId || (page._id == self.selectedPageId)) {
133
                    self.pageHelpContentsCheckboxes.push(<CheckPageHelpContent>{pageHelpContent : self.pageHelpContents[i], checked : false});
134
                  } else {
135
                    self.pageHelpContents.splice(i, 1);
136
                  }
137
                }
138

    
139
                self.countPageHelpContents();
140
            },
141
            error => this.handleError('System error retrieving page contents', error));
142
    }
143

    
144
    // public showModal():void {
145
    //     this.modal.showModal();
146
    // }
147

    
148
    public toggleCheckBoxes(event) {
149
        this.pageHelpContentsCheckboxes.forEach(_ => _.checked = event.target.checked);
150
        this.checkboxAll = event.target.checked;
151
    }
152

    
153
    public applyCheck(flag : boolean) {
154
        this.pageHelpContentsCheckboxes.forEach(_ => _.checked = flag);
155
        this.checkboxAll = false;
156
    }
157

    
158
    public getSelectedPageHelpContents() : string[] {
159
        return this.pageHelpContentsCheckboxes.filter(pageHelpContent => pageHelpContent.checked == true)
160
            .map(checkedPageHelpContent => checkedPageHelpContent.pageHelpContent).map(res => res._id);
161
    }
162

    
163
    public confirmDeletePageHelpContent(id : string) {
164
        this.deleteConfirmationModal.ids = [id];
165
        this.deleteConfirmationModal.showModal();
166
    }
167

    
168
    public confirmDeleteSelectedPageHelpContents() {
169
        this.deleteConfirmationModal.ids = this.getSelectedPageHelpContents();
170
        this.deleteConfirmationModal.showModal();
171
    }
172

    
173
    public confirmedDeletePageHelpContents(ids : string[]) {
174
        this._helpService.deletePageHelpContents(ids).subscribe(
175
            _ => this.deletePageHelpContentsFromArray(ids),
176
            error => this.handleError('System error deleting the selected page content(s)', error)
177
        );
178
    }
179

    
180
    private deletePageHelpContentsFromArray(ids : string[]) : void {
181
        for(let id of ids) {
182
            let iqc = this.pageHelpContentsCheckboxes.findIndex(_ => _.pageHelpContent._id == id);
183
            let iq = this.pageHelpContents.findIndex(_ => _._id == id);
184
            this.pageHelpContentsCheckboxes.splice(iqc, 1);
185
            this.pageHelpContents.splice(iqc, 1);
186
        }
187
    }
188

    
189
    public editPageHelpContent(_id : string) {
190
        //this.router.navigate(['/pageContents/edit/', _id]);
191
        if(this.selectedPageId) {
192
          this.router.navigate( ['/pageContents/edit/'], { queryParams: { "pageContentId": _id, "communityId": this.selectedCommunityId, "pageId": this.selectedPageId  } } );
193
        } else {
194
          this.router.navigate( ['/pageContents/edit/'], { queryParams: { "pageContentId": _id, "communityId": this.selectedCommunityId } } );
195
        }
196
    }
197

    
198
    public togglePageHelpContents(status : boolean, ids : string[]) {
199
        this._helpService.togglePageHelpContents(ids,status).subscribe(
200
            () => {
201
                for(let id of ids) {
202
                    let i = this.pageHelpContentsCheckboxes.findIndex(_ => _.pageHelpContent._id == id);
203
                    console.info(i);
204
                    this.pageHelpContentsCheckboxes[i].pageHelpContent.isActive=status;
205
                }
206
                this.countPageHelpContents();
207
                this.applyCheck(false);
208
            },
209
            error => this.handleError('System error changing the status of the selected page content(s)', error)
210
        );
211
    }
212

    
213
    public savePageHelpContent(data : any):void {
214
        console.log(data);
215
        this._helpService.savePageHelpContent(data).subscribe(
216
            pageHelpContent => this.pageHelpContentSavedSuccessfully(pageHelpContent),
217
            error => this.handleError('System error saving the specified help content', error)
218
        );
219
    }
220

    
221
    public pageHelpContentSavedSuccessfully(pageHelpContent: PageHelpContent) {
222
        this.pageHelpContentsCheckboxes.push(<CheckPageHelpContent>{pageHelpContent : pageHelpContent, checked : false});
223
        this.pageHelpContents.push(pageHelpContent);
224
        this.applyCheck(false);
225
        this.countPageHelpContents();
226
    }
227

    
228
    public pageHelpContentUpdatedSuccessfully(pageHelpContent : PageHelpContent) {
229
        this.pageHelpContentsCheckboxes.find(checkItem => checkItem.pageHelpContent._id==pageHelpContent._id).pageHelpContent = pageHelpContent;
230
        let index = this.pageHelpContents.findIndex(checkItem => checkItem._id==pageHelpContent._id);
231
        this.pageHelpContents[index] = pageHelpContent;
232
        this.applyCheck(false);
233
        this.countPageHelpContents();
234
    }
235

    
236

    
237
    public filterPageHelpContent(pageHelpContent : PageHelpContent, filters : PageHelpContentFilterOptions) : boolean {
238
        let idFlag = filters.id == '' || (<Page>pageHelpContent.page)._id == filters.id;
239
        let activeFlag = filters.active == null || pageHelpContent.isActive == filters.active;
240
        let textFlag = filters.text.toString() == '' || (pageHelpContent.content).match(filters.text) != null;
241
        return idFlag && activeFlag && textFlag;
242
    }
243

    
244
    public applyFilter() {
245
        this.pageHelpContentsCheckboxes = [];
246
        this.pageHelpContents.filter(item => this.filterPageHelpContent(item,this.filters)).forEach(
247
            _ => this.pageHelpContentsCheckboxes.push(<CheckPageHelpContent>{pageHelpContent: _, checked: false})
248
        );
249
        this.countPageHelpContents();
250
    }
251

    
252
    public filterByPage(event: any) {
253
        this.filters.id = event.target.value;
254
        this.applyFilter();
255
    }
256

    
257
    public displayAllPageHelpContents() {
258
        this.filters.active = null;
259
        this.applyFilter();
260
    }
261

    
262
    public displayActivePageHelpContents() {
263
        this.filters.active = true;
264
        this.applyFilter();
265
    }
266

    
267
    public filterBySearch(text : string) {
268
        this.filters.text = new RegExp(text, "i");
269
        this.applyFilter();
270
    }
271

    
272
    public displayInactivePageHelpContents() {
273
        this.filters.active = false;
274
        this.applyFilter();
275
    }
276

    
277
    handleError(message: string, error) {
278
        if(error == null) {
279
            // this.formComponent.reset();
280
        }
281
        this.errorMessage = message + ' (Server responded: ' + error + ')';
282
    }
283

    
284
    public filterByCommunity(event: any) {
285
        this.selectedCommunityId = event.target.value;
286
        this.applyCommunityFilter(this.selectedCommunityId);
287
    }
288

    
289
    public applyCommunityFilter(community_id: string) {
290
        this.getPages(community_id);
291
        this.getPageHelpContents(community_id);
292
    }
293
}
(14-14/18)