Skip to content

Commit

Permalink
feat(demo): add eager loaded dialog example
Browse files Browse the repository at this point in the history
  • Loading branch information
Dima Puris committed Jan 11, 2023
1 parent eedc4ca commit 32d6be9
Show file tree
Hide file tree
Showing 18 changed files with 155 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import {ChangeDetectionStrategy, Component} from '@angular/core';

@Component({
selector: 'tui-example-dialog-content',
template: 'Eager loaded dialog content',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DialogContentComponent {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<button
tuiButton
routerLink="path/to/eager/loaded/dialog"
>
Open dialog
</button>

<!-- step 1: add router-outlet to the page -->
<!-- Needed for opening a dialog over of the page-->
<router-outlet></router-outlet>
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import {changeDetection} from '@demo/emulate/change-detection';
import {encapsulation} from '@demo/emulate/encapsulation';

@Component({
selector: 'tui-page-example',
templateUrl: './page.component.html',
selector: 'tui-page-1-example',
templateUrl: './page-1.component.html',
changeDetection,
encapsulation,
})
export class TuiPageExampleComponent {}
export class TuiPage1ExampleComponent {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {TuiButtonModule} from '@taiga-ui/core';
import {tuiWrapInEagerDialog} from '@taiga-ui/kit';

import {DialogContentComponent} from './dialog-content.component';
import {TuiPage1ExampleComponent} from './page-1.component';

@NgModule({
declarations: [TuiPage1ExampleComponent, DialogContentComponent],
exports: [TuiPage1ExampleComponent],
imports: [
RouterModule.forChild([
{
path: ``,
component: TuiPage1ExampleComponent,
children: [
tuiWrapInEagerDialog(
`path/to/eager/loaded/dialog`,
DialogContentComponent,
),
],
},
]),
TuiButtonModule,
],
})
export class TuiPage1ExampleModule {}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {ChangeDetectionStrategy, Component} from '@angular/core';

@Component({
selector: 'tui-example-dialog-content',
template: 'Custom dialog content',
template: 'Lazy loaded dialog content',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DialogContentComponent {}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {tuiWrapInDialog} from '@taiga-ui/kit';
import {tuiWrapInLazyDialog} from '@taiga-ui/kit';

import {DialogContentComponent} from './dialog-content.component';

@NgModule({
declarations: [DialogContentComponent],
// step 3: use tuiWrapInDialog for component
imports: [RouterModule.forChild([tuiWrapInDialog(DialogContentComponent)])],
imports: [RouterModule.forChild([tuiWrapInLazyDialog(DialogContentComponent)])],
exports: [DialogContentComponent],
})
export class DialogContentModule {}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<button
tuiButton
routerLink="path/to/dialog"
routerLink="path/to/lazy/loaded/dialog"
>
Open dialog
</button>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {Component} from '@angular/core';
import {changeDetection} from '@demo/emulate/change-detection';
import {encapsulation} from '@demo/emulate/encapsulation';

@Component({
selector: 'tui-page-2-example',
templateUrl: './page-2.component.html',
changeDetection,
encapsulation,
})
export class TuiPage2ExampleComponent {}
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {TuiButtonModule} from '@taiga-ui/core';
import {TuiRoutableDialogModule} from '@taiga-ui/kit';

import {TuiPageExampleComponent} from './page.component';
import {TuiPage2ExampleComponent} from './page-2.component';

@NgModule({
declarations: [TuiPageExampleComponent],
exports: [TuiPageExampleComponent],
declarations: [TuiPage2ExampleComponent],
exports: [TuiPage2ExampleComponent],
imports: [
TuiRoutableDialogModule,
TuiButtonModule,
RouterModule.forChild([
{
path: ``,
component: TuiPageExampleComponent,
component: TuiPage2ExampleComponent,
children: [
// step 2: add lazy loading for component module as usual
{
path: `path/to/dialog`,
path: `path/to/lazy/loaded/dialog`,
loadChildren: async () =>
(await import(`./dialog-content/dialog-content.module`))
.DialogContentModule,
},
],
},
]),
TuiButtonModule,
],
})
export class TuiPageExampleModule {}
export class TuiPage2ExampleModule {}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,21 @@ import {TuiDocExample} from '@taiga-ui/addon-doc';
})
export class RoutableDialogComponent {
readonly example1: TuiDocExample = {
'page.template': import('./examples/1/page.component.html?raw'),
'page.module': import('./examples/1/page.module.ts?raw'),
'page.template': import('./examples/1/page-1.component.html?raw'),
'page.module': import('./examples/1/page-1.module.ts?raw'),
'dialog-content.component': import(
'./examples/1/dialog-content/dialog-content.component.ts?raw'
'./examples/1/dialog-content.component.ts?raw'
),
};

readonly example2: TuiDocExample = {
'page.template': import('./examples/2/page-2.component.html?raw'),
'page.module': import('./examples/2/page-2.module.ts?raw'),
'dialog-content.component': import(
'./examples/2/dialog-content/dialog-content.component.ts?raw'
),
'dialog-content.module': import(
'./examples/1/dialog-content/dialog-content.module.ts?raw'
'./examples/2/dialog-content/dialog-content.module.ts?raw'
),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@ import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {TuiAddonDocModule} from '@taiga-ui/addon-doc';
import {TuiButtonModule} from '@taiga-ui/core';
import {TuiRoutableDialogModule} from '@taiga-ui/kit';

import {RoutableDialogComponent} from './routable-dialog.component';

@NgModule({
imports: [
CommonModule,
TuiAddonDocModule,
TuiRoutableDialogModule,
RouterModule.forChild([
{
path: ``,
Expand All @@ -20,8 +18,14 @@ import {RoutableDialogComponent} from './routable-dialog.component';
{
path: ``,
loadChildren: async () =>
(await import(`./examples/1/page.module`))
.TuiPageExampleModule,
(await import(`./examples/1/page-1.module`))
.TuiPage1ExampleModule,
},
{
path: ``,
loadChildren: async () =>
(await import(`./examples/2/page-2.module`))
.TuiPage2ExampleModule,
},
],
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,17 @@

<tui-doc-example
i18n-heading
heading="Lazy loading example"
heading="Eager loading dialog"
[content]="example1"
>
<router-outlet></router-outlet>
</tui-doc-example>

<tui-doc-example
i18n-heading
heading="Lazy loading dialog"
[content]="example2"
>
<router-outlet></router-outlet>
</tui-doc-example>
</tui-doc-page>
3 changes: 2 additions & 1 deletion projects/kit/components/routable-dialog/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './routable-dialog.module';
export * from './tui-wrap-in-dialog';
export * from './tui-wrap-in-eager-dialog';
export * from './tui-wrap-in-lazy-dialog';
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,17 @@ export class TuiRoutableDialog {
}

private navigateToParent(): void {
const urlSegments: UrlSegment[] = this.route.parent?.snapshot.url || [];

const backUrl = urlSegments.map(() => '..').join('/');
const backUrl =
this.route.snapshot.data['backUrl'] ?? this.getLazyLoadedBackUrl();

void this.router.navigate([backUrl], {
relativeTo: this.route,
});
}

private getLazyLoadedBackUrl(): string {
const urlSegments: UrlSegment[] = this.route.parent?.snapshot.url || [];

return urlSegments.map(() => '..').join('/');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import {TuiRoutableDialog} from '../routable-dialog.component';
import {tuiWrapInEagerDialog} from '../tui-wrap-in-eager-dialog';

class DialogComponent {}

describe(`tuiWrapInEagerDialog`, () => {
it(`result route data is expected`, () => {
const result = tuiWrapInEagerDialog(`path/to/dialog`, DialogComponent);

const expected = {
path: `path/to/dialog`,
component: TuiRoutableDialog,
data: {
dialog: DialogComponent,
backUrl: `../../..`,
},
};

expect(result).toEqual(expected);
});
});
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {TuiRoutableDialog} from '../routable-dialog.component';
import {tuiWrapInDialog} from '../tui-wrap-in-dialog';
import {tuiWrapInLazyDialog} from '../tui-wrap-in-lazy-dialog';

class DialogComponent {}

describe(`tuiWrapInDialog`, () => {
describe(`tuiWrapInLazyDialog`, () => {
it(`result route data is expected`, () => {
const result = tuiWrapInDialog(DialogComponent);
const result = tuiWrapInLazyDialog(DialogComponent);

const expected = {
path: ``,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import {Type} from '@angular/core';
import {Route} from '@angular/router';

import {TuiRoutableDialog} from './routable-dialog.component';

export function tuiWrapInEagerDialog(path: string, component: Type<any>): Route {
return {
path,
component: TuiRoutableDialog,
data: {
dialog: component,
backUrl: path
.split(`/`)
.map(() => `..`)
.join(`/`),
},
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {Route} from '@angular/router';

import {TuiRoutableDialog} from './routable-dialog.component';

export function tuiWrapInDialog(component: Type<any>): Route {
export function tuiWrapInLazyDialog(component: Type<any>): Route {
return {
path: ``,
component: TuiRoutableDialog,
Expand Down

0 comments on commit 32d6be9

Please sign in to comment.