Skip to content

Commit 7c08b52

Browse files
committed
cleanup(universal-app): various improvements
- Create a separate root component & module - Add styling to hide overlay so hover styles can be inspected - Give cdk-virtual-scroll-viewport non-zero height - Add support for cdk-experimental and material-experimental
1 parent 4b93a6e commit 7c08b52

File tree

10 files changed

+98
-42
lines changed

10 files changed

+98
-42
lines changed

src/universal-app/index.html

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,27 @@
88
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
99
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
1010
<base href="/">
11+
12+
<style>
13+
/* Make sure bottom sheet doesn't obscure components. */
14+
body {
15+
padding-bottom: 80px;
16+
}
17+
18+
/*
19+
* Hide the overlay so hover styles can be tested,
20+
* but show a message so we can see that the overlay is there.
21+
*/
22+
.cdk-overlay-backdrop {
23+
bottom: 100vh !important;
24+
}
25+
.cdk-overlay-backdrop::after {
26+
content: 'OVERLAY ACTIVE';
27+
background: lime;
28+
}
29+
</style>
1130
</head>
1231
<body>
13-
<kitchen-sink>Loading...</kitchen-sink>
32+
<kitchen-sink-root>Loading...</kitchen-sink-root>
1433
</body>
1534
</html>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import {Component, NgModule} from '@angular/core';
2+
import {BrowserModule} from '@angular/platform-browser';
3+
import {ServerModule} from '@angular/platform-server';
4+
import {KitchenSinkModule} from './kitchen-sink/kitchen-sink';
5+
6+
@Component({
7+
selector: 'kitchen-sink-root',
8+
template: `
9+
<h1>Kitchen sink app</h1>
10+
<kitchen-sink></kitchen-sink>
11+
`,
12+
})
13+
export class KitchenSinkRoot {
14+
}
15+
16+
@NgModule({
17+
imports: [BrowserModule.withServerTransition({appId: 'kitchen-sink'}), KitchenSinkModule],
18+
declarations: [KitchenSinkRoot],
19+
exports: [KitchenSinkRoot],
20+
bootstrap: [KitchenSinkRoot],
21+
})
22+
export class KitchenSinkRootModule {
23+
}
24+
25+
@NgModule({
26+
imports: [KitchenSinkRootModule, ServerModule],
27+
bootstrap: [KitchenSinkRoot],
28+
})
29+
export class KitchenSinkRootServerModule {
30+
}

src/universal-app/kitchen-sink/kitchen-sink.html

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
<h1>Kitchen sink app</h1>
2-
31
<h2>Autocomplete</h2>
42
<mat-autocomplete>
53
<mat-option>Grace Hopper</mat-option>
@@ -375,7 +373,7 @@ <h2>Drag and Drop</h2>
375373

376374
<h2>Virtual scroll</h2>
377375

378-
<cdk-virtual-scroll-viewport itemSize="50">
376+
<cdk-virtual-scroll-viewport itemSize="50" class="universal-viewport">
379377
<div *cdkVirtualFor="let size of virtualScrollData; let i = index" style="height: 50px">
380378
Item #{{i}}
381379
</div>

src/universal-app/kitchen-sink/kitchen-sink.ts

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {ViewportRuler, ScrollingModule} from '@angular/cdk/scrolling';
2-
import {
3-
CdkTableModule,
4-
DataSource
5-
} from '@angular/cdk/table';
1+
import {FocusMonitor} from '@angular/cdk/a11y';
2+
import {DragDropModule} from '@angular/cdk/drag-drop';
3+
import {ScrollingModule, ViewportRuler} from '@angular/cdk/scrolling';
4+
import {CdkTableModule, DataSource} from '@angular/cdk/table';
65
import {Component, ElementRef, NgModule} from '@angular/core';
76
import {
87
MatAutocompleteModule,
98
MatBadgeModule,
9+
MatBottomSheet,
1010
MatBottomSheetModule,
1111
MatButtonModule,
1212
MatButtonToggleModule,
@@ -42,12 +42,7 @@ import {
4242
MatTabsModule,
4343
MatToolbarModule,
4444
MatTooltipModule,
45-
MatBottomSheet,
4645
} from '@angular/material';
47-
import {BrowserModule} from '@angular/platform-browser';
48-
import {ServerModule} from '@angular/platform-server';
49-
import {FocusMonitor} from '@angular/cdk/a11y';
50-
import {DragDropModule} from '@angular/cdk/drag-drop';
5146
import {Observable, of as observableOf} from 'rxjs';
5247

5348
export class TableDataSource extends DataSource<any> {
@@ -68,9 +63,14 @@ export class TestEntryComponent {}
6863
@Component({
6964
selector: 'kitchen-sink',
7065
templateUrl: './kitchen-sink.html',
66+
styles: [`
67+
.universal-viewport {
68+
height: 100px;
69+
border: 1px solid black;
70+
}
71+
`]
7172
})
7273
export class KitchenSink {
73-
7474
/** List of columns for the CDK and Material table. */
7575
tableColumns = ['userId'];
7676

@@ -102,7 +102,6 @@ export class KitchenSink {
102102

103103
@NgModule({
104104
imports: [
105-
BrowserModule.withServerTransition({appId: 'kitchen-sink'}),
106105
MatAutocompleteModule,
107106
MatBadgeModule,
108107
MatBottomSheetModule,
@@ -144,15 +143,9 @@ export class KitchenSink {
144143
CdkTableModule,
145144
DragDropModule,
146145
],
147-
bootstrap: [KitchenSink],
148146
declarations: [KitchenSink, TestEntryComponent],
147+
exports: [KitchenSink, TestEntryComponent],
149148
entryComponents: [TestEntryComponent],
150149
})
151-
export class KitchenSinkClientModule { }
152-
153-
154-
@NgModule({
155-
imports: [KitchenSinkClientModule, ServerModule],
156-
bootstrap: [KitchenSink],
157-
})
158-
export class KitchenSinkServerModule { }
150+
export class KitchenSinkModule {
151+
}

src/universal-app/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './kitchen-sink/kitchen-sink';
2+
export * from './kitchen-sink-root';

src/universal-app/prerender.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1+
import 'reflect-metadata';
2+
import 'zone.js';
3+
14
import {renderModuleFactory} from '@angular/platform-server';
25
import {readFileSync, writeFileSync} from 'fs-extra';
36
import {log} from 'gulp-util';
47
import {join} from 'path';
5-
import 'reflect-metadata';
6-
import 'zone.js';
7-
import {KitchenSinkServerModuleNgFactory} from './kitchen-sink/kitchen-sink.ngfactory';
8+
9+
import {KitchenSinkRootServerModuleNgFactory} from './kitchen-sink-root.ngfactory';
810

911
// Do not enable production mode, because otherwise the `MatCommonModule` won't execute
1012
// the browser related checks that could cause NodeJS issues.
1113

12-
const result = renderModuleFactory(KitchenSinkServerModuleNgFactory, {
13-
document: readFileSync(join(__dirname, 'index.html'), 'utf-8')
14-
});
14+
const result = renderModuleFactory(
15+
KitchenSinkRootServerModuleNgFactory,
16+
{document: readFileSync(join(__dirname, 'index.html'), 'utf-8')});
1517

1618
result
1719
.then(content => {
1820
const filename = join(__dirname, 'index-prerendered.html');
1921

20-
console.log(`Outputting result to ${filename}`);
22+
console.log('Inspect pre-rendered page here:');
23+
console.log(`file://${filename}`);
2124
writeFileSync(filename, content, 'utf-8');
2225
log('Prerender done.');
2326
})

src/universal-app/tsconfig-build.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@
2424
"paths": {
2525
"@angular/material": ["./material"],
2626
"@angular/cdk/*": ["./cdk/*"],
27-
"@angular/material/*": ["./material/*"]
27+
"@angular/material/*": ["./material/*"],
28+
"@angular/cdk-experimental": ["./cdk-experimental"],
29+
"@angular/cdk-experimental/*": ["./cdk-experimental/*"],
30+
"@angular/material-experimental": ["./material-experimental"]
2831
}
2932
},
3033
"files": [

src/universal-app/tsconfig-prerender.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
"paths": {
2424
"@angular/material": ["./material"],
2525
"@angular/cdk/*": ["./cdk/*"],
26-
"@angular/material/*": ["./material/*"]
26+
"@angular/material/*": ["./material/*"],
27+
"@angular/cdk-experimental": ["./cdk-experimental"],
28+
"@angular/cdk-experimental/*": ["./cdk-experimental/*"],
29+
"@angular/material-experimental": ["./material-experimental"]
2730
}
2831
},
2932
"files": [

src/universal-app/tsconfig.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
"paths": {
88
"@angular/cdk/*": ["../cdk/*"],
99
"@angular/material/*": ["../lib/*"],
10-
"@angular/material": ["../lib/public_api"]
10+
"@angular/material": ["../lib/public_api"],
11+
"@angular/cdk-experimental": ["../cdk-experimental"],
12+
"@angular/cdk-experimental/*": ["../cdk-experimental/*"],
13+
"@angular/material-experimental": ["../material-experimental"]
1114
}
1215
},
1316
"include": ["./**/*.ts"]

tools/gulp/tasks/universal.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ task('prerender', ['universal:build'], execTask(
3232
}
3333
));
3434

35-
task('universal:build', sequenceTask(
36-
'clean',
37-
['material:build-release', 'cdk:build-release'],
38-
['universal:copy-release', 'universal:copy-files'],
39-
['universal:build-app-ts', 'universal:build-app-scss'],
40-
'universal:build-prerender-ts',
41-
));
35+
task(
36+
'universal:build',
37+
sequenceTask(
38+
'clean',
39+
['material:build-release', 'cdk:build-release', 'material-experimental:build-release'],
40+
['universal:copy-release', 'universal:copy-files'],
41+
['universal:build-app-ts', 'universal:build-app-scss'],
42+
'universal:build-prerender-ts',
43+
));
4244

4345
/** Task that builds the universal app in the output directory. */
4446
task('universal:build-app-ts', ngcBuildTask(tsconfigAppPath));
@@ -57,4 +59,5 @@ task('universal:build-prerender-ts', tsBuildTask(tsconfigPrerenderPath));
5759
task('universal:copy-release', () => {
5860
copySync(join(releasesDir, 'material'), join(outDir, 'material'));
5961
copySync(join(releasesDir, 'cdk'), join(outDir, 'cdk'));
62+
copySync(join(releasesDir, 'material-experimental'), join(outDir, 'material-experimental'));
6063
});

0 commit comments

Comments
 (0)