Skip to content

Commit c581b94

Browse files
authored
feat(theme:menu): add last argument of find (#1834)
1 parent c4e07f2 commit c581b94

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

packages/theme/src/services/menu/menu.service.spec.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ describe('Service: Menu', () => {
4444
},
4545
{ text: 'text', externalLink: '//ng-alain.com' },
4646
{ text: 'text', link: '/demo2', i18n: 'text' },
47-
{ text: 'sub', children: [] },
47+
{ text: 'sub', children: [{ text: 'text', link: '/test', badge: 10 }] },
4848
{ text: 'hide', link: '/hide', hide: true }
4949
];
5050

@@ -342,6 +342,12 @@ describe('Service: Menu', () => {
342342
const res = srv.find({ url: `/always-first-item`, cb: _ => true });
343343
expect(res).toBe(srv.menus[0]);
344344
});
345+
it('return last item', () => {
346+
const first = srv.find({ url: `/test` });
347+
expect((first as NzSafeAny)._parent == null).toBe(true);
348+
const last = srv.find({ url: `/test`, last: true });
349+
expect((last as NzSafeAny)._parent != null).toBe(true);
350+
});
345351
});
346352

347353
describe('#open', () => {

packages/theme/src/services/menu/menu.service.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,14 @@ export class MenuService implements OnDestroy {
211211
* 是否忽略隐藏的项,默认:`false`
212212
*/
213213
ignoreHide?: boolean;
214+
/**
215+
* Whether to return the last one, default: `false`
216+
*
217+
* 是否返回最后一个,默认:`false`
218+
*/
219+
last?: boolean;
214220
}): Menu | null {
215-
const opt = { recursive: false, ignoreHide: false, ...options };
221+
const opt = { recursive: false, ignoreHide: false, last: false, ...options };
216222
if (opt.key != null) {
217223
return this.getItem(opt.key);
218224
}
@@ -223,12 +229,15 @@ export class MenuService implements OnDestroy {
223229

224230
while (!item && url) {
225231
this.visit(opt.data ?? this.data, i => {
232+
if (!opt.last && item != null) {
233+
return;
234+
}
226235
if (opt.ignoreHide && i.hide) {
227236
return;
228237
}
229238
if (opt.cb) {
230239
const res = opt.cb(i);
231-
if (!item && typeof res === 'boolean' && res) {
240+
if (typeof res === 'boolean' && res) {
232241
item = i;
233242
}
234243
}

0 commit comments

Comments
 (0)