From f6a5238d4b74ddab741a96041b775cc366b73205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?= Date: Sat, 24 Feb 2024 19:06:16 +0100 Subject: [PATCH] Fix: Toggle modified notes (#188) * Fix: Toggle discussion nodes correctly * Feat: Show Help keymap in discussion tree winbar --- .../actions/discussions/annotations.lua | 1 + lua/gitlab/actions/discussions/init.lua | 36 ++++++++++++++----- lua/gitlab/actions/discussions/winbar.lua | 3 +- lua/gitlab/state.lua | 13 ++++++- 4 files changed, 43 insertions(+), 10 deletions(-) diff --git a/lua/gitlab/actions/discussions/annotations.lua b/lua/gitlab/actions/discussions/annotations.lua index 341a57c..72c6db7 100644 --- a/lua/gitlab/actions/discussions/annotations.lua +++ b/lua/gitlab/actions/discussions/annotations.lua @@ -84,6 +84,7 @@ ---@field resolved_discussions number ---@field resolvable_notes number ---@field resolved_notes number +---@field help_keymap string --- ---@class SignTable ---@field name string diff --git a/lua/gitlab/actions/discussions/init.lua b/lua/gitlab/actions/discussions/init.lua index 92b3c1d..50e2a68 100644 --- a/lua/gitlab/actions/discussions/init.lua +++ b/lua/gitlab/actions/discussions/init.lua @@ -401,7 +401,7 @@ end ---This function (settings.discussion_tree.toggle_nodes) expands/collapses all nodes and their children according to the opts. ---@param tree NuiTree ---@param opts ToggleNodesOptions -M.toggle_nodes = function(tree, opts) +M.toggle_nodes = function(tree, unlinked, opts) local current_node = tree:get_node() if current_node == nil then return @@ -409,25 +409,41 @@ M.toggle_nodes = function(tree, opts) local root_node = M.get_root_node(tree, current_node) for _, node in ipairs(tree:get_nodes()) do if opts.toggle_resolved then - if state.resolved_expanded then + if + (unlinked and state.unlinked_discussion_tree.resolved_expanded) + or (not unlinked and state.discussion_tree.resolved_expanded) + then M.collapse_recursively(tree, node, root_node, opts.keep_current_open, true) else M.expand_recursively(tree, node, true) end end if opts.toggle_unresolved then - if state.unresolved_expanded then + if + (unlinked and state.unlinked_discussion_tree.unresolved_expanded) + or (not unlinked and state.discussion_tree.unresolved_expanded) + then M.collapse_recursively(tree, node, root_node, opts.keep_current_open, false) else M.expand_recursively(tree, node, false) end end end + -- Reset states of resolved discussions after toggling if opts.toggle_resolved then - state.resolved_expanded = not state.resolved_expanded + if unlinked then + state.unlinked_discussion_tree.resolved_expanded = not state.unlinked_discussion_tree.resolved_expanded + else + state.discussion_tree.resolved_expanded = not state.discussion_tree.resolved_expanded + end end + -- Reset states of unresolved discussions after toggling if opts.toggle_unresolved then - state.unresolved_expanded = not state.unresolved_expanded + if unlinked then + state.unlinked_discussion_tree.unresolved_expanded = not state.unlinked_discussion_tree.unresolved_expanded + else + state.discussion_tree.unresolved_expanded = not state.discussion_tree.unresolved_expanded + end end tree:render() M.restore_cursor_position(tree, current_node, root_node) @@ -543,6 +559,8 @@ M.rebuild_discussion_tree = function() M.discussion_tree = discussion_tree M.switch_can_edit_bufs(false) vim.api.nvim_set_option_value("filetype", "gitlab", { buf = M.linked_bufnr }) + state.discussion_tree.resolved_expanded = false + state.discussion_tree.unresolved_expanded = false end M.rebuild_unlinked_discussion_tree = function() @@ -561,6 +579,8 @@ M.rebuild_unlinked_discussion_tree = function() M.set_tree_keymaps(unlinked_discussion_tree, M.unlinked_bufnr, true) M.unlinked_discussion_tree = unlinked_discussion_tree M.switch_can_edit_bufs(false) + state.unlinked_discussion_tree.resolved_expanded = false + state.unlinked_discussion_tree.unresolved_expanded = false end M.switch_can_edit_bufs = function(bool) @@ -662,21 +682,21 @@ M.set_tree_keymaps = function(tree, bufnr, unlinked) M.toggle_node(tree) end, { buffer = bufnr, desc = "Toggle node" }) vim.keymap.set("n", state.settings.discussion_tree.toggle_all_discussions, function() - M.toggle_nodes(tree, { + M.toggle_nodes(tree, unlinked, { toggle_resolved = true, toggle_unresolved = true, keep_current_open = state.settings.discussion_tree.keep_current_open, }) end, { buffer = bufnr, desc = "Toggle all nodes" }) vim.keymap.set("n", state.settings.discussion_tree.toggle_resolved_discussions, function() - M.toggle_nodes(tree, { + M.toggle_nodes(tree, unlinked, { toggle_resolved = true, toggle_unresolved = false, keep_current_open = state.settings.discussion_tree.keep_current_open, }) end, { buffer = bufnr, desc = "Toggle resolved nodes" }) vim.keymap.set("n", state.settings.discussion_tree.toggle_unresolved_discussions, function() - M.toggle_nodes(tree, { + M.toggle_nodes(tree, unlinked, { toggle_resolved = false, toggle_unresolved = true, keep_current_open = state.settings.discussion_tree.keep_current_open, diff --git a/lua/gitlab/actions/discussions/winbar.lua b/lua/gitlab/actions/discussions/winbar.lua index c7291b5..da325eb 100644 --- a/lua/gitlab/actions/discussions/winbar.lua +++ b/lua/gitlab/actions/discussions/winbar.lua @@ -40,12 +40,13 @@ local function content(discussions, unlinked_discussions, file_name) resolved_discussions = resolved_discussions, resolvable_notes = resolvable_notes, resolved_notes = resolved_notes, + help_keymap = state.settings.help, } return state.settings.discussion_tree.winbar(t) end ----This function sends the edited comment to the Go server +---This function updates the winbar ---@param discussions Discussion[] ---@param unlinked_discussions UnlinkedDiscussion[] ---@param base_title string diff --git a/lua/gitlab/state.lua b/lua/gitlab/state.lua index 0cd3f23..daa56fb 100644 --- a/lua/gitlab/state.lua +++ b/lua/gitlab/state.lua @@ -79,7 +79,8 @@ M.settings = { discussions_content = "%#Comment#" .. discussions_content notes_content = "%#Text#" .. notes_content end - return " " .. discussions_content .. " %#Comment#| " .. notes_content + local help = "%#Comment#%=Help: " .. t.help_keymap:gsub(" ", "") .. " " + return " " .. discussions_content .. " %#Comment#| " .. notes_content .. help end, }, merge = { @@ -169,6 +170,16 @@ M.settings = { }, } +-- These are the initial states of the discussion trees +M.discussion_tree = { + resolved_expanded = false, + unresolved_expanded = false, +} +M.unlinked_discussion_tree = { + resolved_expanded = false, + unresolved_expanded = false, +} + -- Merges user settings into the default settings, overriding them M.merge_settings = function(args) M.settings = u.merge(M.settings, args)