╭ changed ───────────────╮ │src/ui/Repo/Settings.zig│ ╰────────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────╮ │12 const Grid = xitui.grid.Grid; │ │13 const Focus = xitui.focus.Focus; │ │14 │ │15 -const Roles = @import("./Roles.zig"); │ │15 +const Members = @import("./Members.zig"); │ │16 │ │17 const wasm = builtin.target.cpu.arch == .wasm32;│ │18 │ ╰────────────────────────────────────────────────────╯ ╭─────────────────────────────────────╮ │29 patch_role: ?evt.Repo.Role, │ │30 hash_kind: hash.HashKind, │ │31 // the sub tab the route names │ │32 -view: enum { settings, roles }, │ │33 -roles: Roles, │ │32 +view: enum { settings, members },│ │33 +members: Members, │ │34 │ │35 const Self = @This(); │ │36 │ ╰─────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │37 -// the tab role choices, in the order the form shows them │ │38 -const role_choices = [_]?evt.Repo.Role{ null, .owner, .write, .read }; │ │37 +// the tab role choices, in the order the form shows them. no owners-only│ │38 +// choice, so anyone who can push may push events for every tab. │ │39 +const role_choices = [_]?evt.Repo.Role{ null, .write, .read }; │ │40 │ │41 const role_labels = blk: { │ │42 var labels: [role_choices.len][]const u8 = undefined; │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────╮ │47 pub fn roleLabel(role_maybe: ?evt.Repo.Role) []const u8 {│ │48 const role = role_maybe orelse return "nobody"; │ │49 return switch (role) { │ │49 - .owner => "owners", │ │50 - .write => "collaborators", │ │50 + .owner, .write => "members", │ │51 .read => "anybody", │ │52 }; │ │53 } │ ╰─────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────╮ │60 return error.InvalidRole; │ │61 } │ │62 │ │63 -// the repo settings and user roles sub tabs over their content│ │63 +// the repo settings and members sub tabs over their content │ │64 pub const View = struct { │ │65 box: wgt.Box(ui.Widget), │ │66 │ ╰───────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │75 var header = try wgt.Box(ui.Widget).init(allocator, .{ .border = null, .direction = .horiz }); │ │76 errdefer header.deinit(allocator); │ │77 const on_tab = switch (session.data.current_page) { │ │78 - .repo_settings, .repo_roles => true, │ │78 + .repo_settings, .repo_members => true, │ │79 else => false, │ │80 }; │ │81 - const routes = [_]?ui.RoutablePage{ ui.RoutablePage.repoSettingsRoute(data.identity), ui.RoutablePage.repoRolesRoute(data.identity, 0) }; │ │82 - for ([_]@FieldType(Self, "view"){ .settings, .roles }, [_][]const u8{ "repo settings", "user roles" }, routes) |view, label, route| { │ │81 + const routes = [_]?ui.RoutablePage{ ui.RoutablePage.repoSettingsRoute(data.identity), ui.RoutablePage.repoMembersRoute(data.identity, 0) };│ │82 + for ([_]@FieldType(Self, "view"){ .settings, .members }, [_][]const u8{ "repo settings", "members" }, routes) |view, label, route| { │ │83 var tab = try wgt.TextBox.init(allocator, label, .{ .border = .hidden, .round_corners = true, .wrap_kind = .none }); │ │84 errdefer tab.deinit(allocator); │ │85 tab.getFocus().mode = .all; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │100 try stack.children.put(allocator, form.getFocus().id, .{ .repo_settings_form = form }); │ │101 } │ │102 { │ │103 - var roles = try Roles.View.init(allocator, &data.roles, session); │ │104 - errdefer roles.deinit(allocator); │ │105 - try stack.children.put(allocator, roles.getFocus().id, .{ .repo_roles = roles }); │ │103 + var members = try Members.View.init(allocator, &data.members, session); │ │104 + errdefer members.deinit(allocator); │ │105 + try stack.children.put(allocator, members.getFocus().id, .{ .repo_members = members }); │ │106 } │ │107 stack.getFocus().child_id = stack.children.keys()[@backingInt(data.view)]; │ │108 try box.children.put(allocator, stack.getFocus().id, .{ .widget = .{ .stack = stack }, .rect = null, .min_size = null });│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯