Skip to content

Commit 1409d53

Browse files
authored
SF-3603 Convert to Angular standalone components (#3535)
1 parent 6c0ebdf commit 1409d53

File tree

309 files changed

+3367
-2484
lines changed

Some content is hidden

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

309 files changed

+3367
-2484
lines changed

.grit/patterns/xforge_common_absolute_only.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ language js
1818
## Basic example
1919

2020
```ts
21-
import { UICommonModule } from "../../xforge-common/ui-common.module";
21+
import { UserService } from "../../xforge-common/user.service";
2222
```
2323

2424
```ts
25-
import { UICommonModule } from "xforge-common/ui-common.module";
25+
import { UserService } from "xforge-common/user.service";
2626
```

src/SIL.XForge.Scripture/ClientApp/.storybook/preview.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { OverlayContainer } from '@angular/cdk/overlay';
2-
import { importProvidersFrom } from '@angular/core';
32
import { getTestBed } from '@angular/core/testing';
43
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
54
import { provideAnimations } from '@angular/platform-browser/animations';
65
import { setCompodocJson } from '@storybook/addon-docs/angular';
76
import { applicationConfig } from '@storybook/angular';
8-
import docJson from '../documentation.json';
9-
import { I18nStoryDecorator, I18nStoryModule } from 'xforge-common/i18n-story.module';
7+
import { I18nStoryDecorator, provideI18nStory } from 'xforge-common/i18n-story';
108
import { I18nService } from 'xforge-common/i18n.service';
119
import { APP_ROOT_ELEMENT_SELECTOR, InAppRootOverlayContainer } from 'xforge-common/overlay-container';
10+
import { provideUICommon } from 'xforge-common/ui-common-providers';
1211
import { getI18nLocales } from 'xforge-common/utils';
12+
import docJson from '../documentation.json';
13+
import { provideSFTabs } from '../src/app/shared/sf-tab-group';
1314

1415
setCompodocJson(docJson);
1516

@@ -42,8 +43,10 @@ export const decorators = [
4243
I18nStoryDecorator,
4344
applicationConfig({
4445
providers: [
45-
importProvidersFrom(I18nStoryModule),
46+
provideI18nStory(),
4647
provideAnimations(),
48+
provideUICommon(),
49+
provideSFTabs(),
4750
{ provide: APP_ROOT_ELEMENT_SELECTOR, useValue: 'storybook-root' },
4851
{ provide: OverlayContainer, useClass: InAppRootOverlayContainer }
4952
]

src/SIL.XForge.Scripture/ClientApp/.storybook/util/mat-dialog-launch.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import { CommonModule } from '@angular/common';
21
import { Component, Inject, InjectionToken, Injector, OnInit, Provider } from '@angular/core';
3-
import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
2+
import { MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog';
43
import { TranslocoModule } from '@ngneat/transloco';
54
import { StoryFn } from '@storybook/angular';
6-
import { UICommonModule } from 'xforge-common/ui-common.module';
75
import { hasProp } from '../../src/type-utils';
86

97
export function getOverlays(element: HTMLElement): HTMLElement[] {
@@ -25,7 +23,6 @@ export interface MatDialogStoryConfig {
2523
imports?: any[];
2624
declarations?: any[];
2725
providers?: Provider[];
28-
standaloneComponent?: boolean;
2926
}
3027

3128
@Component({ template: '' })
@@ -57,8 +54,8 @@ export class MatDialogLaunchComponent implements OnInit {
5754
export function matDialogStory(component: any, config?: MatDialogStoryConfig): StoryFn {
5855
const story: StoryFn = args => ({
5956
moduleMetadata: {
60-
imports: [UICommonModule, CommonModule, TranslocoModule, ...(config?.imports ?? [])],
61-
declarations: [...(config?.standaloneComponent ? [] : [component]), ...(config?.declarations ?? [])],
57+
imports: [MatDialogModule, TranslocoModule, component, ...(config?.imports ?? [])],
58+
declarations: [...(config?.declarations ?? [])],
6259
providers: [
6360
{ provide: MAT_DIALOG_DATA, useValue: args.data },
6461
{ provide: COMPONENT_UNDER_TEST, useValue: component },

src/SIL.XForge.Scripture/ClientApp/src/app/app-routing.module.ts

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/SIL.XForge.Scripture/ClientApp/src/app/app.component.spec.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ import { BreakpointObserver } from '@angular/cdk/layout';
22
import { Location } from '@angular/common';
33
import { Component, DebugElement, NgZone } from '@angular/core';
44
import { ComponentFixture, discardPeriodicTasks, fakeAsync, flush, TestBed, tick } from '@angular/core/testing';
5+
import { MatIcon } from '@angular/material/icon';
6+
import { MatMenu } from '@angular/material/menu';
7+
import { MatTooltip } from '@angular/material/tooltip';
58
import { By } from '@angular/platform-browser';
6-
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
7-
import { Route, Router, RouterModule } from '@angular/router';
9+
import { provideNoopAnimations } from '@angular/platform-browser/animations';
10+
import { provideRouter, Route, Router } from '@angular/router';
811
import { CookieService } from 'ngx-cookie-service';
912
import { SystemRole } from 'realtime-server/lib/esm/common/models/system-role';
1013
import { User } from 'realtime-server/lib/esm/common/models/user';
@@ -30,12 +33,11 @@ import { NoticeService } from 'xforge-common/notice.service';
3033
import { OnlineStatusService } from 'xforge-common/online-status.service';
3134
import { PWA_BEFORE_PROMPT_CAN_BE_SHOWN_AGAIN, PwaService } from 'xforge-common/pwa.service';
3235
import { TestBreakpointObserver } from 'xforge-common/test-breakpoint-observer';
33-
import { TestOnlineStatusModule } from 'xforge-common/test-online-status.module';
36+
import { provideTestOnlineStatus } from 'xforge-common/test-online-status-providers';
3437
import { TestOnlineStatusService } from 'xforge-common/test-online-status.service';
35-
import { TestRealtimeModule } from 'xforge-common/test-realtime.module';
38+
import { provideTestRealtime } from 'xforge-common/test-realtime-providers';
3639
import { TestRealtimeService } from 'xforge-common/test-realtime.service';
37-
import { configureTestingModule, TestTranslocoModule } from 'xforge-common/test-utils';
38-
import { UICommonModule } from 'xforge-common/ui-common.module';
40+
import { configureTestingModule, getTestTranslocoModule } from 'xforge-common/test-utils';
3941
import { UserService } from 'xforge-common/user.service';
4042
import { AppComponent } from './app.component';
4143
import { SFProjectProfileDoc } from './core/models/sf-project-profile-doc';
@@ -65,8 +67,7 @@ const mockedErrorReportingService = mock(ErrorReportingService);
6567
const mockedDialogService = mock(DialogService);
6668

6769
@Component({
68-
template: `<div>Mock</div>`,
69-
standalone: false
70+
template: `<div>Mock</div>`
7071
})
7172
class MockComponent {}
7273

@@ -87,18 +88,20 @@ const ROUTES: Route[] = [
8788

8889
describe('AppComponent', () => {
8990
configureTestingModule(() => ({
90-
declarations: [AppComponent, NavigationComponent],
9191
imports: [
92-
UICommonModule,
93-
NoopAnimationsModule,
94-
RouterModule.forRoot(ROUTES),
95-
TestTranslocoModule,
96-
TestOnlineStatusModule.forRoot(),
97-
TestRealtimeModule.forRoot(SF_TYPE_REGISTRY),
92+
AppComponent,
93+
NavigationComponent,
94+
getTestTranslocoModule(),
9895
AvatarComponent,
99-
GlobalNoticesComponent
96+
GlobalNoticesComponent,
97+
MatMenu,
98+
MatIcon,
99+
MatTooltip
100100
],
101101
providers: [
102+
provideRouter(ROUTES),
103+
provideTestOnlineStatus(),
104+
provideTestRealtime(SF_TYPE_REGISTRY),
102105
{ provide: AuthService, useMock: mockedAuthService },
103106
{ provide: UserService, useMock: mockedUserService },
104107
{ provide: SettingsAuthGuard, useMock: mockedSettingsAuthGuard },
@@ -116,7 +119,8 @@ describe('AppComponent', () => {
116119
{ provide: FileService, useMock: mockedFileService },
117120
{ provide: ErrorReportingService, useMock: mockedErrorReportingService },
118121
{ provide: BreakpointObserver, useClass: TestBreakpointObserver },
119-
{ provide: DialogService, useMock: mockedDialogService }
122+
{ provide: DialogService, useMock: mockedDialogService },
123+
provideNoopAnimations()
120124
]
121125
}));
122126

src/SIL.XForge.Scripture/ClientApp/src/app/app.component.ts

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
1+
import { BidiModule } from '@angular/cdk/bidi';
12
import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';
2-
import { DOCUMENT } from '@angular/common';
3+
import { CdkScrollable } from '@angular/cdk/scrolling';
4+
import { AsyncPipe, DOCUMENT } from '@angular/common';
35
import { Component, DestroyRef, Inject, OnDestroy, OnInit } from '@angular/core';
46
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5-
import { NavigationEnd, Router } from '@angular/router';
7+
import { MatButton, MatIconAnchor, MatIconButton } from '@angular/material/button';
8+
import { MatDivider } from '@angular/material/divider';
9+
import { MatIcon } from '@angular/material/icon';
10+
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
11+
import { MatProgressBar } from '@angular/material/progress-bar';
12+
import { MatDrawer, MatDrawerContainer } from '@angular/material/sidenav';
13+
import { MatToolbar, MatToolbarRow } from '@angular/material/toolbar';
14+
import { MatTooltip } from '@angular/material/tooltip';
15+
import { NavigationEnd, Router, RouterLink, RouterOutlet } from '@angular/router';
616
import Bugsnag from '@bugsnag/js';
17+
import { TranslocoModule } from '@ngneat/transloco';
718
import { cloneDeep } from 'lodash-es';
819
import { CookieService } from 'ngx-cookie-service';
920
import { SystemRole } from 'realtime-server/lib/esm/common/models/system-role';
@@ -13,6 +24,7 @@ import { Observable, Subscription } from 'rxjs';
1324
import { filter, map } from 'rxjs/operators';
1425
import { ActivatedProjectService } from 'xforge-common/activated-project.service';
1526
import { AuthService } from 'xforge-common/auth.service';
27+
import { AvatarComponent } from 'xforge-common/avatar/avatar.component';
1628
import { DataLoadingComponent } from 'xforge-common/data-loading-component';
1729
import { DiagnosticOverlayService } from 'xforge-common/diagnostic-overlay.service';
1830
import { DialogService } from 'xforge-common/dialog.service';
@@ -28,6 +40,7 @@ import { UserDoc } from 'xforge-common/models/user-doc';
2840
import { NoticeService } from 'xforge-common/notice.service';
2941
import { OnlineStatusService } from 'xforge-common/online-status.service';
3042
import { PWA_BEFORE_PROMPT_CAN_BE_SHOWN_AGAIN, PwaService } from 'xforge-common/pwa.service';
43+
import { RouterLinkDirective } from 'xforge-common/router-link.directive';
3144
import {
3245
BrowserIssue,
3346
SupportedBrowsersDialogComponent
@@ -42,6 +55,8 @@ import { SFProjectProfileDoc } from './core/models/sf-project-profile-doc';
4255
import { roleCanAccessTranslate } from './core/models/sf-project-role-info';
4356
import { SFProjectUserConfigDoc } from './core/models/sf-project-user-config-doc';
4457
import { SFProjectService } from './core/sf-project.service';
58+
import { NavigationComponent } from './navigation/navigation.component';
59+
import { GlobalNoticesComponent } from './shared/global-notices/global-notices.component';
4560
import { checkAppAccess } from './shared/utils';
4661

4762
declare function gtag(...args: any): void;
@@ -50,7 +65,33 @@ declare function gtag(...args: any): void;
5065
selector: 'app-root',
5166
templateUrl: './app.component.html',
5267
styleUrls: ['./app.component.scss'],
53-
standalone: false
68+
imports: [
69+
AsyncPipe,
70+
TranslocoModule,
71+
RouterLink,
72+
AvatarComponent,
73+
RouterLinkDirective,
74+
NavigationComponent,
75+
GlobalNoticesComponent,
76+
RouterOutlet,
77+
MatIcon,
78+
MatDrawerContainer,
79+
MatButton,
80+
MatIconAnchor,
81+
MatIconButton,
82+
MatMenu,
83+
MatMenuItem,
84+
MatMenuTrigger,
85+
MatTooltip,
86+
MatToolbar,
87+
MatToolbarRow,
88+
MatProgressBar,
89+
MatDivider,
90+
MatDrawer,
91+
MatDrawerContainer,
92+
CdkScrollable,
93+
BidiModule
94+
]
5495
})
5596
export class AppComponent extends DataLoadingComponent implements OnInit, OnDestroy {
5697
version: string = versionData.version;

src/SIL.XForge.Scripture/ClientApp/src/app/app.module.ts

Lines changed: 0 additions & 108 deletions
This file was deleted.

0 commit comments

Comments
 (0)