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 {}