Skip to content

Commit 2fb2d2b

Browse files
authoredSep 14, 2022
fix(abc:reuse-tab): fix can't refresh current tab (#1529)
1 parent b9e433d commit 2fb2d2b

File tree

9 files changed

+58
-5
lines changed

9 files changed

+58
-5
lines changed
 

‎angular.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@
7575
"ajv",
7676
"file-saver",
7777
"ajv-formats",
78-
"date-fns"
78+
"date-fns",
79+
"extend",
80+
"aos"
7981
]
8082
},
8183
"configurations": {

‎packages/abc/reuse-tab/index.en-US.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ alainProvides.push({
3636
3737
```html
3838
<reuse-tab #reuseTab></reuse-tab>
39-
<router-outlet (activate)="reuseTab.activate($event)"></router-outlet>
39+
<router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
4040
```
4141

4242
> **Note: If you do not specify the `(activate)` event, you cannot refresh current tab when uncached.**

‎packages/abc/reuse-tab/index.zh-CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ alainProvides.push({
3636
3737
```html
3838
<reuse-tab #reuseTab></reuse-tab>
39-
<router-outlet (activate)="reuseTab.activate($event)"></router-outlet>
39+
<router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
4040
```
4141

4242
> **注意:若不指定 `(activate)` 事件,无法刷新未缓存过的当前标签页。**

‎packages/abc/reuse-tab/reuse-tab.component.ts

+7
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,13 @@ export class ReuseTabComponent implements OnInit, OnChanges, OnDestroy {
261261
return false;
262262
}
263263

264+
/**
265+
* 设置激活路由的实例,在 `src/app/layout/basic/basic.component.ts` 修改:
266+
*
267+
* @example
268+
* <reuse-tab #reuseTab></reuse-tab>
269+
* <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
270+
*/
264271
activate(instance: NzSafeAny): void {
265272
this.srv.componentRef = { instance };
266273
}

‎schematics/ng-update/upgrade-rules/v14/index.spec.ts

+14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { JsonObject } from '@angular-devkit/core';
22
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
33

4+
import { findFile } from '../../../utils/file';
45
import { createAlainApp, migrationCollection } from '../../../utils/testing';
56

67
describe('Schematic: ng-update: v14Rule', () => {
@@ -288,4 +289,17 @@ describe('Schematic: ng-update: v14Rule', () => {
288289
const content = tree.readJson('angular.json') as JsonObject;
289290
expect((content.cli as { schematicCollections: string[] }).schematicCollections).toContain(`ng-alain`);
290291
});
292+
293+
it('#fixReuseTabActiviteInHtml', async () => {
294+
const layoutPath = findFile(tree, 'basic/basic.component.ts')!;
295+
tree.overwrite(
296+
layoutPath,
297+
`
298+
<router-outlet (activate)="reuseTab.activate($event)"></router-outlet>
299+
`
300+
);
301+
await runMigration();
302+
const content = tree.get(layoutPath)!.content.toString('utf8');
303+
expect(content).toContain(`(attach)`);
304+
});
291305
});

‎schematics/ng-update/upgrade-rules/v14/index.ts

+20
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
addAllowSyntheticDefaultImports,
99
addPackage,
1010
addSchematicCollections,
11+
findFile,
1112
logStart
1213
} from '../../../utils';
1314
import { UpgradeMainVersions } from '../../../utils/versions';
@@ -42,6 +43,24 @@ function addEslintPluginDeprecation(): Rule {
4243
};
4344
}
4445

46+
function fixReuseTabActiviteInHtml(): Rule {
47+
return (tree: Tree, context: SchematicContext) => {
48+
const layoutPath = findFile(tree, 'basic/basic.component.ts');
49+
if (!tree.exists(layoutPath)) return;
50+
51+
let layoutContent = tree.get(layoutPath)!.content.toString('utf8');
52+
const checkHtml = `<router-outlet (activate)="reuseTab.activate($event)"></router-outlet>`;
53+
if (!layoutContent.includes(checkHtml)) return;
54+
55+
layoutContent = layoutContent.replace(
56+
checkHtml,
57+
`<router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>`
58+
);
59+
tree.overwrite(layoutPath, layoutContent);
60+
logStart(context, `Fix can't refresh current item in resut-tab (https://github.com/ng-alain/ng-alain/issues/2302)`);
61+
};
62+
}
63+
4564
function finished(): Rule {
4665
return (_tree: Tree, context: SchematicContext) => {
4766
context.addTask(new NodePackageInstallTask());
@@ -64,6 +83,7 @@ export function v14Rule(): Rule {
6483
// https://angular.io/guide/build#configuring-commonjs-dependencies
6584
addAllowedCommonJsDependencies([]),
6685
fixSchematicCollections(context),
86+
fixReuseTabActiviteInHtml(),
6787
addEslintPluginDeprecation(),
6888
finished()
6989
]);

‎schematics/utils/file.ts

+10
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ export function readContent(tree: Tree, filePath: string): string {
1818
return tree.read(filePath).toString('utf-8');
1919
}
2020

21+
export function findFile(tree: Tree, fileName: string): string | undefined {
22+
let res: string = undefined;
23+
tree.visit(path => {
24+
if (res == null && path.endsWith(fileName)) {
25+
res = path;
26+
}
27+
});
28+
return res;
29+
}
30+
2131
export interface OverWriteFileOptions {
2232
tree: Tree;
2333
filePath: string;

‎src/dev/layout.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const ICONS = [
8282
</nz-dropdown-menu>
8383
</ng-template>
8484
<reuse-tab [mode]="2" [customContextMenu]="customContextMenu" #reuseTab></reuse-tab>
85-
<router-outlet (activate)="reuseTab.activate($event)"></router-outlet>
85+
<router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
8686
</layout-default>
8787
<setting-drawer></setting-drawer>
8888
`,

‎src/dev/pages/page.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ export class DevPageComponent implements OnInit {
2626

2727
_onReuseInit(): void {
2828
this.now = format(new Date(), 'yyyy-MM-dd HH:mm:ss');
29-
console.log('by _onReuseInit', this.route.snapshot.url.toString());
29+
console.log('by _onReuseInit', this.id);
3030
}
3131
}

0 commit comments

Comments
 (0)
Please sign in to comment.