8000 feat: resolve navigation page on navigation event (#624) · iuriimattos2/nativescript-vue@787d1a5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 787d1a5

Browse files
authored
feat: resolve navigation page on navigation event (nativescript-vue#624)
Allow passing in `resolveOnEvent` (`navigatingTo` or `navigatedTo`) to `$navigateTo` options. When passed, an event listener will be attached to the page element, and whenever it fires - the Promise returned from `$navigateTo` will be resolved with the target `Page`. Useful for for triggering actions after a navigation is complete.
1 parent 099941f commit 787d1a5

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ export type NativeScriptVueItemEventData<T> = ItemEventData & { item: T }
99

1010
export interface NavigationEntryVue extends NavigationEntry {
1111
props?: Record<string, any>,
12-
frame?: any
12+
frame?: any,
13+
resolveOnEvent?: Page.navigatingToEvent | Page.navigatedToEvent
1314
}
1415

1516
export type navigateTo = (

platform/nativescript/plugins/navigator-plugin.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ export default {
8989

9090
updateDevtools()
9191

92+
const resolveOnEvent = options.resolveOnEvent
93+
// ensure we dont resolve twice event though this should never happen!
94+
let resolved = false
95+
9296
const handler = args => {
9397
if (args.isBackNavigation) {
9498
page.off('navigatedFrom', handler)
@@ -97,6 +101,17 @@ export default {
97101
}
98102
page.on('navigatedFrom', handler)
99103

104+
if (resolveOnEvent) {
105+
const resolveHandler = args => {
106+
if (!resolved) {
107+
resolved = true
108+
resolve(page)
109+
}
110+
page.off(resolveOnEvent, resolveHandler)
111+
}
112+
page.on(resolveOnEvent, resolveHandler)
113+
}
114+
100115
// ensure that the navEntryInstance vue instance is destroyed when the
101116
// page is disposed (clearHistory: true for example)
102117
const dispose = page.disposeNativeView
@@ -106,7 +121,10 @@ export default {
106121
}
107122

108123
frame.navigate(Object.assign({}, options, { create: () => page }))
109-
resolve(page)
124+
if (!resolveOnEvent) {
125+
resolved = true
126+
resolve(page)
127+
}
110128
})
111129
}
112130
}

0 commit comments

Comments
 (0)
0