╭ changed ────────────╮ │src/ui/Home/Users.zig│ ╰─────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────╮ │10 const Grid = xitui.grid.Grid; │ │11 const Focus = xitui.focus.Focus;│ │12 │ │13 -users: []const evt.User, │ │13 +users: []const evt.User.Safe, │ │14 │ │15 const Self = @This(); │ │16 │ ╰────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │20 ) !Self { │ │21 const DB = evt.AdminDB; │ │22 │ │23 - var users: std.ArrayList(evt.User) = .empty; │ │23 + var users: std.ArrayList(evt.User.Safe) = .empty; │ │24 │ │25 const event_id_to_user_cursor = try haxy_moment.getCursor(hash.hashInt(evt.admin_repo_opts.hash, "event-id->user")) orelse return error.NotFound;│ │26 const event_id_to_user = try DB.HashMap(.read_only).init(event_id_to_user_cursor); │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────╮ │30 const kv = try kv_cursor.readKeyValuePair(); │ │31 const user_map = try DB.HashMap(.read_only).init(kv.value_cursor); │ │32 const user_event = try evt.read(evt.User, DB, evt.admin_repo_opts.hash, arena, user_map);│ │33 - try users.append(arena.allocator(), user_event); │ │33 + try users.append(arena.allocator(), evt.User.Safe.init(user_event)); │ │34 } │ │35 │ │36 return .{ │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────╮ │59 const aa = arena.allocator(); │ │60 │ │61 const lines = try aa.alloc([]const u8, data.users.len); │ │62 + const links = try aa.alloc([]const u8, data.users.len); │ │63 for (data.users, 0..) |user, i| { │ │64 lines[i] = try std.fmt.allocPrint(aa, "{s} ({s})", .{ user.name, user.display_name });│ │65 + // clicking a user opens their page; the "a:" prefix makes the web │ │66 + // renderer emit an <a href="/user/foo"> anchor. │ │67 + links[i] = try std.fmt.allocPrint(aa, "a:/user/{s}", .{user.name}); │ │68 } │ │65 - try self.list.setItems(allocator, lines); │ │69 + try self.list.setItems(allocator, lines, links); │ │70 │ │71 return self; │ │72 } │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────╯