@@ -35,6 +35,7 @@ const Navigation = @This();
3535const NavigationKind = @import ("root.zig" ).NavigationKind ;
3636const NavigationHistoryEntry = @import ("root.zig" ).NavigationHistoryEntry ;
3737const NavigationTransition = @import ("root.zig" ).NavigationTransition ;
38+ const NavigationState = @import ("root.zig" ).NavigationState ;
3839const NavigationCurrentEntryChangeEvent = @import ("root.zig" ).NavigationCurrentEntryChangeEvent ;
3940
4041const NavigationEventTarget = @import ("NavigationEventTarget.zig" );
@@ -110,10 +111,10 @@ pub fn _forward(self: *Navigation, page: *Page) !NavigationReturn {
110111pub fn updateEntries (self : * Navigation , url : []const u8 , kind : NavigationKind , page : * Page , dispatch : bool ) ! void {
111112 switch (kind ) {
112113 .replace = > {
113- _ = try self .replaceEntry (url , null , page , dispatch );
114+ _ = try self .replaceEntry (url , .{ . source = .navigation , . value = null } , page , dispatch );
114115 },
115116 .push = > | state | {
116- _ = try self .pushEntry (url , state , page , dispatch );
117+ _ = try self .pushEntry (url , .{ . source = .navigation , . value = state } , page , dispatch );
117118 },
118119 .traverse = > | index | {
119120 self .index = index ;
@@ -132,7 +133,13 @@ pub fn processNavigation(self: *Navigation, page: *Page) !void {
132133
133134/// Pushes an entry into the Navigation stack WITHOUT actually navigating to it.
134135/// For that, use `navigate`.
135- pub fn pushEntry (self : * Navigation , _url : []const u8 , state : ? []const u8 , page : * Page , dispatch : bool ) ! * NavigationHistoryEntry {
136+ pub fn pushEntry (
137+ self : * Navigation ,
138+ _url : []const u8 ,
139+ state : NavigationState ,
140+ page : * Page ,
141+ dispatch : bool ,
142+ ) ! * NavigationHistoryEntry {
136143 const arena = page .session .arena ;
137144
138145 const url = try arena .dupe (u8 , _url );
@@ -171,7 +178,13 @@ pub fn pushEntry(self: *Navigation, _url: []const u8, state: ?[]const u8, page:
171178 return entry ;
172179}
173180
174- pub fn replaceEntry (self : * Navigation , _url : []const u8 , state : ? []const u8 , page : * Page , dispatch : bool ) ! * NavigationHistoryEntry {
181+ pub fn replaceEntry (
182+ self : * Navigation ,
183+ _url : []const u8 ,
184+ state : NavigationState ,
185+ page : * Page ,
186+ dispatch : bool ,
187+ ) ! * NavigationHistoryEntry {
175188 const arena = page .session .arena ;
176189 const url = try arena .dupe (u8 , _url );
177190
@@ -242,7 +255,7 @@ pub fn navigate(
242255 // todo: Fire navigate event
243256 try finished .resolve ({});
244257
245- _ = try self .pushEntry (url , state , page , true );
258+ _ = try self .pushEntry (url , .{ . source = .navigation , . value = state } , page , true );
246259 } else {
247260 try page .navigateFromWebAPI (url , .{ .reason = .navigation }, kind );
248261 }
@@ -290,7 +303,7 @@ pub fn _reload(self: *Navigation, _opts: ?ReloadOptions, page: *Page) !Navigatio
290303 const entry = self .currentEntry ();
291304 if (opts .state ) | state | {
292305 const previous = entry ;
293- entry .state = state .toJson (arena ) catch return error .DataClone ;
306+ entry .state = .{ . source = .navigation , . value = state .toJson (arena ) catch return error .DataClone } ;
294307 NavigationCurrentEntryChangeEvent .dispatch (self , previous , .reload );
295308 }
296309
@@ -323,6 +336,6 @@ pub fn _updateCurrentEntry(self: *Navigation, options: UpdateCurrentEntryOptions
323336 const arena = page .session .arena ;
324337
325338 const previous = self .currentEntry ();
326- self .currentEntry ().state = options .state .toJson (arena ) catch return error .DataClone ;
339+ self .currentEntry ().state = .{ . source = .navigation , . value = options .state .toJson (arena ) catch return error .DataClone } ;
327340 NavigationCurrentEntryChangeEvent .dispatch (self , previous , null );
328341}
0 commit comments