diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 2d43fe13..dc505e0d 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -1,19 +1,19 @@ -import { HttpClientModule } from '@angular/common/http'; -import { APP_INITIALIZER, ErrorHandler, NgModule } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { NG_ENTITY_SERVICE_CONFIG } from '@datorama/akita-ng-entity-service'; -import { AkitaNgRouterStoreModule } from '@datorama/akita-ng-router-store'; -import { AkitaNgDevtools } from '@datorama/akita-ngdevtools'; -import { environment } from '../environments/environment'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { NzIconModule } from 'ng-zorro-antd/icon'; -import { NzSpinModule } from 'ng-zorro-antd/spin'; -import { QuillModule } from 'ngx-quill'; +import {HttpClientModule} from '@angular/common/http'; +import {APP_INITIALIZER, ErrorHandler, NgModule} from '@angular/core'; +import {ReactiveFormsModule} from '@angular/forms'; +import {BrowserModule} from '@angular/platform-browser'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {NG_ENTITY_SERVICE_CONFIG} from '@datorama/akita-ng-entity-service'; +import {AkitaNgRouterStoreModule} from '@datorama/akita-ng-router-store'; +import {AkitaNgDevtools} from '@datorama/akita-ngdevtools'; +import {environment} from '../environments/environment'; +import {AppRoutingModule} from './app-routing.module'; +import {AppComponent} from './app.component'; +import {NzIconModule} from 'ng-zorro-antd/icon'; +import {NzSpinModule} from 'ng-zorro-antd/spin'; +import {QuillModule} from 'ngx-quill'; import * as Sentry from '@sentry/angular'; -import { Router } from '@angular/router'; +import {Router} from '@angular/router'; @NgModule({ declarations: [AppComponent], @@ -32,7 +32,7 @@ import { Router } from '@angular/router'; providers: [ { provide: NG_ENTITY_SERVICE_CONFIG, - useValue: { baseUrl: 'https://jsonplaceholder.typicode.com/' } + useValue: {baseUrl: 'https://jsonplaceholder.typicode.com/'} }, { provide: ErrorHandler, @@ -44,11 +44,13 @@ import { Router } from '@angular/router'; }, { provide: APP_INITIALIZER, - useFactory: () => () => {}, + useFactory: () => () => { + }, deps: [Sentry.TraceService], multi: true, }, ], bootstrap: [AppComponent] }) -export class AppModule {} +export class AppModule { +} diff --git a/frontend/src/app/core/directives/target-click.directive.ts b/frontend/src/app/core/directives/target-click.directive.ts new file mode 100644 index 00000000..68ba8c27 --- /dev/null +++ b/frontend/src/app/core/directives/target-click.directive.ts @@ -0,0 +1,17 @@ +import {Directive, HostListener, Input} from '@angular/core'; +import {GoogleAnalyticsService} from '@trungk18/core/services/google-analytics.service'; + +@Directive({ + selector: '[targetClick]' +}) +export class TargetClickDirective { + @Input() targetEventName: string; + @Input() targetEventCategory: string = 'button'; + + constructor(private _googleAnalytics: GoogleAnalyticsService) { + } + + @HostListener('click') onClick($event) { + this._googleAnalytics.sendEvent(this.targetEventName, this.targetEventCategory); + } +} diff --git a/frontend/src/app/core/pipes/array-id-find.module.ts b/frontend/src/app/core/pipes/array-id-find.module.ts new file mode 100644 index 00000000..221db4e0 --- /dev/null +++ b/frontend/src/app/core/pipes/array-id-find.module.ts @@ -0,0 +1,11 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {ArrayIdFindPipe} from './array-id-find.pipe'; + +@NgModule({ + imports: [CommonModule], + declarations: [ArrayIdFindPipe], + exports: [ArrayIdFindPipe] +}) +export class ArrayIdFindModule { +} diff --git a/frontend/src/app/core/pipes/array-id-find.pipe.ts b/frontend/src/app/core/pipes/array-id-find.pipe.ts new file mode 100644 index 00000000..c48ce27f --- /dev/null +++ b/frontend/src/app/core/pipes/array-id-find.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'arrayIdFind' +}) +export class ArrayIdFindPipe implements PipeTransform { + + transform(value: {id: string}[], id: string): unknown { + return value.find(v => v.id === id); + } +} diff --git a/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.html b/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.html index 347bb600..8525e205 100644 --- a/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.html +++ b/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.html @@ -16,10 +16,10 @@
- {{ selected.nzValue }}
-
\ No newline at end of file + diff --git a/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.ts b/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.ts index 386483a3..725dd712 100644 --- a/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.ts +++ b/frontend/src/app/project/components/add-issue-modal/issue-priority-select/issue-priority-select.component.ts @@ -1,24 +1,28 @@ -import { Component, Input } from '@angular/core'; -import { FormControl } from '@angular/forms'; -import { IssuePriorityIcon } from '@trungk18/interface/issue-priority-icon'; -import { IssueUtil } from '@trungk18/project/utils/issue'; -import { IssuePriority } from '@trungk18/interface/issue'; -import { ProjectConst } from '@trungk18/project/config/const'; +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {FormControl} from '@angular/forms'; +import {IssuePriorityIcon} from '@trungk18/interface/issue-priority-icon'; +import {ProjectConst} from '@trungk18/project/config/const'; + +type IssuePriorityMap = { [key: string]: IssuePriorityIcon }; @Component({ selector: 'issue-priority-select', templateUrl: './issue-priority-select.component.html', - styleUrls: ['./issue-priority-select.component.scss'] + styleUrls: ['./issue-priority-select.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush }) +// TODO implement ControlValueAccessor export class IssuePrioritySelectComponent { @Input() control: FormControl; - priorities: IssuePriorityIcon[]; + + public priorities: IssuePriorityIcon[]; + public prioritiesMap: IssuePriorityMap = {}; constructor() { this.priorities = ProjectConst.PrioritiesWithIcon; - } - getPriorityIcon(priority: IssuePriority) { - return IssueUtil.getIssuePriorityIcon(priority); + ProjectConst.PrioritiesWithIcon.forEach(p => { + this.prioritiesMap[p.value] = p; + }); } } diff --git a/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.html b/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.html index 42523236..15665d96 100644 --- a/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.html +++ b/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.html @@ -10,5 +10,5 @@ - - \ No newline at end of file + + diff --git a/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.ts b/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.ts index d380e015..1e2d3ed9 100644 --- a/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.ts +++ b/frontend/src/app/project/components/add-issue-modal/issue-reporter-select/issue-reporter-select.component.ts @@ -1,19 +1,14 @@ -import { Component, Input } from '@angular/core'; -import { FormControl } from '@angular/forms'; -import { JUser } from '@trungk18/interface/user'; +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {FormControl} from '@angular/forms'; +import {JUser} from '@trungk18/interface/user'; @Component({ selector: 'issue-reporter-select', templateUrl: './issue-reporter-select.component.html', - styleUrls: ['./issue-reporter-select.component.scss'] + styleUrls: ['./issue-reporter-select.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class IssueReporterSelectComponent { @Input() control: FormControl; @Input() users: JUser[]; - - constructor() {} - - getUser(userId: string) { - return this.users.find((user) => user.id === userId); - } } diff --git a/frontend/src/app/project/project.module.ts b/frontend/src/app/project/project.module.ts index d631f4a0..a7c9f6e6 100644 --- a/frontend/src/app/project/project.module.ts +++ b/frontend/src/app/project/project.module.ts @@ -34,6 +34,7 @@ import { SettingsComponent } from './pages/settings/settings.component'; import { ProjectRoutingModule } from './project-routing.module'; import { ProjectComponent } from './project.component'; import { TargetClickDirective } from '@trungk18/core/directives/target-click.directive'; +import {ArrayIdFindModule} from "@trungk18/core/pipes/array-id-find.module"; @NgModule({ declarations: [ @@ -73,7 +74,8 @@ import { TargetClickDirective } from '@trungk18/core/directives/target-click.dir ReactiveFormsModule, JiraControlModule, ContentLoaderModule, - QuillModule + QuillModule, + ArrayIdFindModule ] }) export class ProjectModule {}