Skip to content

Commit 3c902e9

Browse files
committed
feat(code-review): change apis at list page;
refactor: move monaco-api loading to deps service;
1 parent 718edd6 commit 3c902e9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+201
-179
lines changed

apps/code-review/src/app/config/app.config.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
1-
import { AuthService, UrlsWithAuthService, User, UserService } from '@acua/shared';
1+
import { AuthService, User, UserService } from '@acua/shared';
22
import { Injectable } from '@angular/core';
33
import { Observable, catchError, of } from 'rxjs';
4-
import { environment } from '../../environments/environment';
54

65
@Injectable({
76
providedIn: 'root'
87
})
98
export class AppConfig {
109
constructor(
1110
private readonly userService: UserService,
12-
private readonly authService: AuthService,
13-
private readonly urlsWithAuthService: UrlsWithAuthService
11+
private readonly authService: AuthService
1412
) {}
1513

1614
public load(): Observable<unknown> {
17-
this.urlsWithAuthService.register([environment.backendUrl, environment.mainBackendUrl]);
18-
1915
return this.loadUserData();
2016
}
2117

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
<h2>Список запитів на код-ревью</h2>
1+
<ng-container *ngIf="reviewRequests$ | async as reviewRequests">
2+
<ng-container *ngIf="reviewRequests.length; else emptyDataTemplate">
3+
<acua-review-request-card
4+
*ngFor="let reviewRequest of reviewRequests"
5+
[data]="reviewRequest"
6+
>
7+
</acua-review-request-card>
8+
</ng-container>
9+
</ng-container>
210

3-
<acua-review-request-card
4-
*ngFor="let reviewRequest of reviewRequests$ | async"
5-
[data]="reviewRequest"
6-
>
7-
</acua-review-request-card>
11+
<ng-template #emptyDataTemplate>
12+
<acua-absent-data>Запити на Код-Ревью відсутні.</acua-absent-data>
13+
</ng-template>
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChangeDetectionStrategy, Component } from '@angular/core';
2-
import { ReviewRequestService } from '@code-review/shared';
2+
import { CodeReviewRequestStatusEnum, ReviewRequestService } from '@code-review/shared';
33

44
@Component({
55
selector: 'acua-all-requests',
@@ -8,7 +8,9 @@ import { ReviewRequestService } from '@code-review/shared';
88
changeDetection: ChangeDetectionStrategy.OnPush
99
})
1010
export class AllRequestsComponent {
11-
public readonly reviewRequests$ = this.reviewRequestsService.getAll();
11+
public readonly reviewRequests$ = this.reviewRequestsService.getAllWithStatus(
12+
CodeReviewRequestStatusEnum.Opened
13+
);
1214

1315
constructor(private readonly reviewRequestsService: ReviewRequestService) {}
1416
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
<h2>Список історичних запитів на код-ревью</h2>
1+
<ng-container *ngIf="reviewRequests$ | async as reviewRequests">
2+
<ng-container *ngIf="reviewRequests.length; else emptyDataTemplate">
3+
<acua-review-request-card
4+
*ngFor="let reviewRequest of reviewRequests"
5+
[data]="reviewRequest"
6+
>
7+
</acua-review-request-card>
8+
</ng-container>
9+
</ng-container>
210

3-
<acua-review-request-card
4-
*ngFor="let reviewRequest of reviewRequests$ | async"
5-
[data]="reviewRequest"
6-
>
7-
</acua-review-request-card>
11+
<ng-template #emptyDataTemplate>
12+
<acua-absent-data>Історичні запити на Код-Ревью відсутні.</acua-absent-data>
13+
</ng-template>
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChangeDetectionStrategy, Component } from '@angular/core';
2-
import { ReviewRequestService } from '@code-review/shared';
2+
import { CodeReviewRequestStatusEnum, ReviewRequestService } from '@code-review/shared';
33

44
@Component({
55
selector: 'acua-historical-requests',
@@ -8,7 +8,9 @@ import { ReviewRequestService } from '@code-review/shared';
88
changeDetection: ChangeDetectionStrategy.OnPush
99
})
1010
export class HistoricalRequestsComponent {
11-
public readonly reviewRequests$ = this.reviewRequestsService.getAll();
11+
public readonly reviewRequests$ = this.reviewRequestsService.getAllWithStatus(
12+
CodeReviewRequestStatusEnum.Closed
13+
);
1214

1315
constructor(private readonly reviewRequestsService: ReviewRequestService) {}
1416
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
<h2>Відкриті запити</h2>
1+
<ng-container *ngIf="reviewRequests$ | async as reviewRequests">
2+
<ng-container *ngIf="reviewRequests.length; else emptyDataTemplate">
3+
<acua-review-request-card
4+
*ngFor="let reviewRequest of reviewRequests"
5+
[data]="reviewRequest"
6+
>
7+
</acua-review-request-card>
8+
</ng-container>
9+
</ng-container>
210

3-
<acua-review-request-card
4-
*ngFor="let reviewRequest of reviewRequests$ | async"
5-
[data]="reviewRequest"
6-
>
7-
</acua-review-request-card>
8-
9-
<h2>Закриті запити</h2>
10-
11-
<acua-review-request-card
12-
*ngFor="let reviewRequest of reviewRequests$ | async"
13-
[data]="reviewRequest"
14-
>
15-
</acua-review-request-card>
11+
<ng-template #emptyDataTemplate>
12+
<acua-absent-data>Ви ще не створили жодного запиту на Код-Ревью.</acua-absent-data>
13+
</ng-template>

apps/code-review/src/app/pages/list/components/my-requests/my-requests.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { ReviewRequestService } from '@code-review/shared';
88
changeDetection: ChangeDetectionStrategy.OnPush
99
})
1010
export class MyRequestsComponent {
11-
public readonly reviewRequests$ = this.reviewRequestsService.getAll();
11+
public readonly reviewRequests$ = this.reviewRequestsService.getAllMy();
1212

1313
constructor(private readonly reviewRequestsService: ReviewRequestService) {}
1414
}

apps/code-review/src/app/pages/list/components/review-request-card/review-request-card.component.scss

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
:host {
22
display: block;
3-
margin-bottom: 10px;
3+
margin-top: 10px;
44
cursor: pointer;
55
opacity: 0.9;
66
}

apps/code-review/src/app/pages/list/list.module.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { ActionButtonModule, AuthModule, ScreenModule, UserAvatarModule } from '@acua/shared';
1+
import {
2+
AbsentDataModule,
3+
ActionButtonModule,
4+
AuthModule,
5+
ScreenModule,
6+
UserAvatarModule
7+
} from '@acua/shared';
28
import { CommonModule } from '@angular/common';
39
import { NgModule } from '@angular/core';
410
import { MatButtonModule } from '@angular/material/button';
@@ -39,6 +45,7 @@ import { LIST_ROUTES } from './list.routes';
3945
MatRippleModule,
4046
MatTooltipModule,
4147
MatIconModule,
48+
AbsentDataModule,
4249
ScreenModule,
4350
ActionButtonModule,
4451
UserAvatarModule,

apps/code-review/src/app/pages/overview/components/code-editor/code-editor.component.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
import { ChangeDetectionStrategy, Component, Inject, ViewEncapsulation } from '@angular/core';
22
import type { editor } from 'monaco-editor';
33
import { ReviewRequestCommentsState } from '../../states';
4-
import { MONACO_API } from '../../tokens';
54
import { MonacoApi } from '../../types';
65
import {
76
LineCommentsAmountDirective,
87
LineHighlighterDirective,
98
TextSelectionDisablerDirective
109
} from './directives';
11-
import { MONACO_EDITOR_PROVIDER } from './providers';
10+
import { MONACO_API_PROVIDER, MONACO_EDITOR_PROVIDER } from './providers';
1211
import { LanguageService } from './services';
1312
import { EditorCommentsState } from './states';
14-
import { MONACO_EDITOR } from './tokens';
13+
import { MONACO_API, MONACO_EDITOR } from './tokens';
1514

1615
@Component({
1716
selector: 'acua-code-editor',
@@ -23,7 +22,7 @@ import { MONACO_EDITOR } from './tokens';
2322
LineCommentsAmountDirective,
2423
TextSelectionDisablerDirective
2524
],
26-
providers: [MONACO_EDITOR_PROVIDER, LanguageService, EditorCommentsState],
25+
providers: [MONACO_EDITOR_PROVIDER, MONACO_API_PROVIDER, LanguageService, EditorCommentsState],
2726
encapsulation: ViewEncapsulation.None
2827
})
2928
export class CodeEditorComponent {

apps/code-review/src/app/pages/overview/components/code-editor/models/comment-content-widget.model.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { ComponentRef, Injector, ViewContainerRef } from '@angular/core';
22
import type { editor } from 'monaco-editor';
3-
import { MONACO_API } from '../../../tokens';
43
import { CommentsAmountComponent } from '../components';
54
import { EditorCommentsState } from '../states';
6-
import { MONACO_EDITOR } from '../tokens';
5+
import { MONACO_API, MONACO_EDITOR } from '../tokens';
76

87
export class CommentContentWidget implements editor.IContentWidget {
98
private readonly editor = this.injector.get(MONACO_EDITOR);
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
export * from './monaco-api.provider';
12
export * from './monaco-editor.provider';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { inject, Provider } from '@angular/core';
2+
import { MonacoApiState } from '../../../states';
3+
import { MONACO_API } from '../tokens';
4+
5+
export const MONACO_API_PROVIDER: Provider = {
6+
provide: MONACO_API,
7+
useFactory: () => {
8+
const monacoApiState = inject(MonacoApiState);
9+
10+
return monacoApiState.data!;
11+
}
12+
};

apps/code-review/src/app/pages/overview/components/code-editor/providers/monaco-editor.provider.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
import { ElementRef, inject, Provider } from '@angular/core';
2-
import { ActivatedRoute } from '@angular/router';
3-
import { OverviewDataParam as DataParam } from '../../../enums';
2+
import { MonacoApiState } from '../../../states';
43
import { MonacoApi } from '../../../types';
54
import { MONACO_OPTIONS } from '../constants';
65
import { MONACO_EDITOR } from '../tokens';
76

87
export const MONACO_EDITOR_PROVIDER: Provider = {
98
provide: MONACO_EDITOR,
109
useFactory: () => {
11-
const activatedRoute = inject(ActivatedRoute);
10+
const monacoApiState = inject(MonacoApiState);
1211
const hostRef = inject(ElementRef);
13-
const routeData = activatedRoute.snapshot.data;
14-
const monacoApi: MonacoApi = routeData[DataParam.MonacoApi];
12+
const monacoApi: MonacoApi = monacoApiState.data!;
1513

1614
return monacoApi.editor.create(hostRef.nativeElement, MONACO_OPTIONS);
1715
}

apps/code-review/src/app/pages/overview/components/code-editor/services/language.service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Inject, Injectable } from '@angular/core';
2-
import { MONACO_API } from '../../../tokens';
32
import { MonacoApi } from '../../../types';
3+
import { MONACO_API } from '../tokens';
44

55
@Injectable()
66
export class LanguageService {
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
export * from './monaco-api.token';
12
export * from './monaco-editor.token';
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import { InjectionToken } from '@angular/core';
2-
import { MonacoApi } from '../types';
2+
import { MonacoApi } from '../../../types';
33

44
export const MONACO_API = new InjectionToken<MonacoApi>('MONACO_API');

apps/code-review/src/app/pages/overview/facades/dependencies.facade.ts

+21-7
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ import {
88
ReviewRequestService,
99
ReviewRequestSourceCodeService
1010
} from '@code-review/shared';
11-
import { Observable, forkJoin, tap } from 'rxjs';
11+
import monacoLoader from '@monaco-editor/loader';
12+
import { Observable, forkJoin, from, switchMap, tap } from 'rxjs';
1213
import { OverviewParamEnum } from '../enums';
1314
import { MonacoThemeLoaderService } from '../services';
1415
import {
16+
MonacoApiState,
1517
OpenedReviewRequestState,
1618
ProjectEntitiesState,
1719
ReviewRequestCommentsState
1820
} from '../states';
21+
import { MonacoApi } from '../types';
1922

2023
@Injectable()
2124
export class DependenciesFacade {
@@ -29,18 +32,29 @@ export class DependenciesFacade {
2932
private readonly commentsService: ReviewRequestCommentsService,
3033
private readonly sourceCodeService: ReviewRequestSourceCodeService,
3134
private readonly monacoThemeLoaderService: MonacoThemeLoaderService,
35+
private readonly monacoApiState: MonacoApiState,
3236
private readonly commentsState: ReviewRequestCommentsState,
3337
private readonly projectEntitiesState: ProjectEntitiesState,
3438
private readonly openedReviewRequestState: OpenedReviewRequestState
3539
) {}
3640

3741
public loadAll(): Observable<unknown> {
38-
return forkJoin([
39-
this.loadOpenedReviewRequestInfo(),
40-
this.loadSourceCode(),
41-
this.loadComments(),
42-
this.monacoThemeLoaderService.loadAndDefine()
43-
]);
42+
return this.loadMonacoApi().pipe(
43+
switchMap(() =>
44+
forkJoin([
45+
this.loadOpenedReviewRequestInfo(),
46+
this.loadSourceCode(),
47+
this.loadComments(),
48+
this.monacoThemeLoaderService.loadAndDefine()
49+
])
50+
)
51+
);
52+
}
53+
54+
private loadMonacoApi(): Observable<MonacoApi> {
55+
return from(monacoLoader.init()).pipe(
56+
tap((monacoApi) => this.monacoApiState.set(monacoApi))
57+
);
4458
}
4559

4660
private loadComments(): Observable<CommentsAmountDictionary> {

apps/code-review/src/app/pages/overview/overview.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import { ProjectFile } from '@code-review/shared';
55
import { Observable, map } from 'rxjs';
66
import { CodeEditorComponent } from './components';
77
import { DependenciesFacade } from './facades';
8-
import { MONACO_API_PROVIDER } from './providers';
98
import { MonacoThemeLoaderService } from './services';
109
import {
10+
MonacoApiState,
1111
OpenedReviewRequestState,
1212
ProjectEntitiesState,
1313
ReviewRequestCommentsState
@@ -19,8 +19,8 @@ import {
1919
styleUrls: ['./overview.component.scss'],
2020
changeDetection: ChangeDetectionStrategy.OnPush,
2121
providers: [
22-
MONACO_API_PROVIDER,
2322
DependenciesFacade,
23+
MonacoApiState,
2424
MonacoThemeLoaderService,
2525
ReviewRequestCommentsState,
2626
OpenedReviewRequestState,

apps/code-review/src/app/pages/overview/overview.module.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { NgxAsyncModule } from 'ngx-async-directive';
77
import { CodeEditorModule, FileExplorerModule, HeaderModule } from './components';
88
import { OverviewComponent } from './overview.component';
99
import { OVERVIEW_ROUTES } from './overview.routes';
10-
import { MonacoApiResolver } from './resolvers';
1110

1211
@NgModule({
1312
declarations: [OverviewComponent],
@@ -20,7 +19,6 @@ import { MonacoApiResolver } from './resolvers';
2019
LoaderModule,
2120
NgxAsyncModule,
2221
RouterModule.forChild(OVERVIEW_ROUTES)
23-
],
24-
providers: [MonacoApiResolver]
22+
]
2523
})
2624
export class OverviewModule {}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import { Route } from '@angular/router';
2-
import { OverviewDataParam, OverviewParamEnum } from './enums';
2+
import { OverviewParamEnum } from './enums';
33
import { OverviewComponent } from './overview.component';
4-
import { MonacoApiResolver } from './resolvers';
54
export const OVERVIEW_ROUTES: Route[] = [
65
{
76
path: `:${OverviewParamEnum.Id}`,
8-
component: OverviewComponent,
9-
resolve: {
10-
[OverviewDataParam.MonacoApi]: MonacoApiResolver
11-
}
7+
component: OverviewComponent
128
}
139
];

apps/code-review/src/app/pages/overview/providers/index.ts

-1
This file was deleted.

apps/code-review/src/app/pages/overview/providers/monaco-api.provider.ts

-16
This file was deleted.

apps/code-review/src/app/pages/overview/resolvers/index.ts

-1
This file was deleted.

0 commit comments

Comments
 (0)