2 Copyright 2020 TATA ELXSI
4 Licensed under the Apache License, Version 2.0 (the 'License');
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
16 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
19 * @file Project Add Modal
21 import { Component, Injector, Input, OnInit } from '@angular/core';
22 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
23 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
24 import { TranslateService } from '@ngx-translate/core';
25 import { NotifierService } from 'angular-notifier';
26 import { APIURLHEADER, ERRORDATA, MODALCLOSERESPONSEDATA } from 'CommonModel';
27 import { DataService } from 'DataService';
28 import { environment } from 'environment';
29 import { ProjectData, ProjectDetails } from 'ProjectModel';
30 import { ProjectService } from 'ProjectService';
31 import { RestService } from 'RestService';
32 import { SharedService } from 'SharedService';
33 import { isNullOrUndefined } from 'util';
37 * @Component takes ProjectCreateUpdateComponent.html as template url
40 selector: 'app-project-create-update',
41 templateUrl: './ProjectCreateUpdateComponent.html',
42 styleUrls: ['./ProjectCreateUpdateComponent.scss']
44 /** Exporting a class @exports ProjectCreateUpdateComponent */
45 export class ProjectCreateUpdateComponent implements OnInit {
46 /** To inject services @public */
47 public injector: Injector;
49 /** Instance of the rest service @public */
50 public restService: RestService;
52 /** Instance for active modal service @public */
53 public activeModal: NgbActiveModal;
55 /** Contains the recently created project details @public */
56 public recentProject: ProjectDetails;
58 /** Contains project name @public */
59 public projectName: string;
61 /** Contains project create or edit @public */
62 public getProjectType: string;
64 /** To inject input type services @public */
65 @Input() public projectType: string;
67 /** FormGroup user Edit Account added to the form @ html @public */
68 public projectForm: FormGroup;
70 /** Form submission Add */
71 public submitted: boolean = false;
73 /** Check the loading results for loader status @public */
74 public isLoadingResults: boolean = false;
76 /** Give the message for the loading @public */
77 public message: string = 'PLEASEWAIT';
79 /** Holds list of domains @public */
80 public domains: {}[] = [];
82 /** FormBuilder instance added to the formBuilder @private */
83 private formBuilder: FormBuilder;
85 /** DataService to pass the data from one component to another @private */
86 private dataService: DataService;
88 /** Contains project name ref @private */
89 private projectRef: string;
91 /** Notifier service to popup notification @private */
92 private notifierService: NotifierService;
94 /** Contains tranlsate instance @private */
95 private translateService: TranslateService;
97 /** Contains all methods related to shared @private */
98 private sharedService: SharedService;
100 /** ModalData instance of modal @private */
101 private modalData: MODALCLOSERESPONSEDATA;
103 /** Holds all project details @private */
104 private projectService: ProjectService;
106 constructor(injector: Injector) {
107 this.injector = injector;
108 this.formBuilder = this.injector.get(FormBuilder);
109 this.restService = this.injector.get(RestService);
110 this.activeModal = this.injector.get(NgbActiveModal);
111 this.dataService = this.injector.get(DataService);
112 this.notifierService = this.injector.get(NotifierService);
113 this.translateService = this.injector.get(TranslateService);
114 this.sharedService = this.injector.get(SharedService);
115 this.projectService = this.injector.get(ProjectService);
116 /** Initializing Form Action */
117 this.projectForm = this.formBuilder.group({
118 project_name: ['', Validators.required],
123 /** convenience getter for easy access to form fields */
124 get f(): FormGroup['controls'] { return this.projectForm.controls; }
126 /** Lifecyle Hooks the trigger before component is instantiate @public */
127 public ngOnInit(): void {
128 this.getProjectType = this.projectType;
129 if (this.getProjectType === 'Edit') {
130 this.dataService.currentMessage.subscribe((data: ProjectData) => {
131 if (data.projectName !== undefined || data.projectName !== '' || data.projectName !== null) {
132 this.projectName = data.projectName;
133 this.projectRef = data.id;
141 /** Get the last project name @public */
142 public getProjects(): void {
143 this.isLoadingResults = true;
144 this.restService.getResource(environment.PROJECTS_URL).subscribe((projects: ProjectDetails[]) => {
145 this.recentProject = projects.slice(-1).pop();
146 this.getDomainName();
147 }, (error: ERRORDATA) => {
148 this.restService.handleError(error, 'get');
149 this.isLoadingResults = false;
153 /** On modal submit users acction will called @public */
154 public projectAction(userType: string): void {
155 this.submitted = true;
159 this.sharedService.cleanForm(this.projectForm);
160 if (!this.projectForm.invalid) {
161 if (userType === 'Add') {
162 this.createProject();
163 } else if (userType === 'Edit') {
169 /** Create project @public */
170 public createProject(): void {
171 this.isLoadingResults = true;
172 const apiURLHeader: APIURLHEADER = {
173 url: environment.PROJECTS_URL
175 const projectPayload: {} = {
176 name: this.projectForm.value.project_name,
177 domain_name: !isNullOrUndefined(this.projectForm.value.domain_name) ? this.projectForm.value.domain_name : undefined
179 this.restService.postResource(apiURLHeader, projectPayload).subscribe(() => {
180 this.activeModal.close(this.modalData);
181 this.isLoadingResults = false;
182 this.notifierService.notify('success', this.translateService.instant('PAGE.PROJECT.CREATEDSUCCESSFULLY'));
183 }, (error: ERRORDATA) => {
184 this.restService.handleError(error, 'post');
185 this.isLoadingResults = false;
188 /** Edit project @public */
189 public editProject(): void {
190 this.isLoadingResults = true;
191 const apiURLHeader: APIURLHEADER = {
192 url: environment.PROJECTS_URL + '/' + this.projectRef
194 this.restService.patchResource(apiURLHeader, { name: this.projectForm.value.project_name }).subscribe(() => {
195 this.activeModal.close(this.modalData);
196 this.isLoadingResults = false;
197 this.projectService.setHeaderProjects();
198 this.notifierService.notify('success', this.translateService.instant('PAGE.PROJECT.UPDATEDSUCCESSFULLY'));
199 }, (error: ERRORDATA) => {
200 this.restService.handleError(error, 'patch');
201 this.isLoadingResults = false;
204 /** Get domain name @private */
205 private getDomainName(): void {
206 this.restService.getResource(environment.DOMAIN_URL).subscribe((domains: { project_domain_name: string, user_domain_name: string }) => {
207 let domainNames: string[] = [];
208 if (!isNullOrUndefined(domains.project_domain_name)) {
209 domainNames = domainNames.concat(domains.project_domain_name.split(','));
211 if (!isNullOrUndefined(domains.user_domain_name)) {
212 domainNames = domainNames.concat(domains.user_domain_name.split(','));
214 domainNames = Array.from(new Set(domainNames));
215 this.checkDomainNames(domainNames);
216 this.isLoadingResults = false;
217 }, (error: ERRORDATA) => {
218 this.restService.handleError(error, 'get');
219 this.isLoadingResults = false;
223 /** Check the domain names and create modal for domain select @private */
224 private checkDomainNames(domainNames: string[]): void {
225 if (domainNames.length > 0) {
226 domainNames.forEach((domainName: string) => {
227 if (!domainName.endsWith(':ro')) {
228 this.domains.push({ id: domainName, text: domainName });