Fix: Toggle modified notes (#188)

* Fix: Toggle discussion nodes correctly
* Feat: Show Help keymap in discussion tree winbar
This commit is contained in:
Jakub F. Bortlík
2024-02-24 19:06:16 +01:00
committed by GitHub
parent faf2a25dc4
commit f6a5238d4b
4 changed files with 43 additions and 10 deletions

View File

@@ -84,6 +84,7 @@
---@field resolved_discussions number ---@field resolved_discussions number
---@field resolvable_notes number ---@field resolvable_notes number
---@field resolved_notes number ---@field resolved_notes number
---@field help_keymap string
--- ---
---@class SignTable ---@class SignTable
---@field name string ---@field name string

View File

@@ -401,7 +401,7 @@ end
---This function (settings.discussion_tree.toggle_nodes) expands/collapses all nodes and their children according to the opts. ---This function (settings.discussion_tree.toggle_nodes) expands/collapses all nodes and their children according to the opts.
---@param tree NuiTree ---@param tree NuiTree
---@param opts ToggleNodesOptions ---@param opts ToggleNodesOptions
M.toggle_nodes = function(tree, opts) M.toggle_nodes = function(tree, unlinked, opts)
local current_node = tree:get_node() local current_node = tree:get_node()
if current_node == nil then if current_node == nil then
return return
@@ -409,25 +409,41 @@ M.toggle_nodes = function(tree, opts)
local root_node = M.get_root_node(tree, current_node) local root_node = M.get_root_node(tree, current_node)
for _, node in ipairs(tree:get_nodes()) do for _, node in ipairs(tree:get_nodes()) do
if opts.toggle_resolved then 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) M.collapse_recursively(tree, node, root_node, opts.keep_current_open, true)
else else
M.expand_recursively(tree, node, true) M.expand_recursively(tree, node, true)
end end
end end
if opts.toggle_unresolved then 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) M.collapse_recursively(tree, node, root_node, opts.keep_current_open, false)
else else
M.expand_recursively(tree, node, false) M.expand_recursively(tree, node, false)
end end
end end
end end
-- Reset states of resolved discussions after toggling
if opts.toggle_resolved then 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
end
-- Reset states of unresolved discussions after toggling
if opts.toggle_unresolved then 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 end
tree:render() tree:render()
M.restore_cursor_position(tree, current_node, root_node) M.restore_cursor_position(tree, current_node, root_node)
@@ -543,6 +559,8 @@ M.rebuild_discussion_tree = function()
M.discussion_tree = discussion_tree M.discussion_tree = discussion_tree
M.switch_can_edit_bufs(false) M.switch_can_edit_bufs(false)
vim.api.nvim_set_option_value("filetype", "gitlab", { buf = M.linked_bufnr }) 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 end
M.rebuild_unlinked_discussion_tree = function() 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.set_tree_keymaps(unlinked_discussion_tree, M.unlinked_bufnr, true)
M.unlinked_discussion_tree = unlinked_discussion_tree M.unlinked_discussion_tree = unlinked_discussion_tree
M.switch_can_edit_bufs(false) M.switch_can_edit_bufs(false)
state.unlinked_discussion_tree.resolved_expanded = false
state.unlinked_discussion_tree.unresolved_expanded = false
end end
M.switch_can_edit_bufs = function(bool) M.switch_can_edit_bufs = function(bool)
@@ -662,21 +682,21 @@ M.set_tree_keymaps = function(tree, bufnr, unlinked)
M.toggle_node(tree) M.toggle_node(tree)
end, { buffer = bufnr, desc = "Toggle node" }) end, { buffer = bufnr, desc = "Toggle node" })
vim.keymap.set("n", state.settings.discussion_tree.toggle_all_discussions, function() 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_resolved = true,
toggle_unresolved = true, toggle_unresolved = true,
keep_current_open = state.settings.discussion_tree.keep_current_open, keep_current_open = state.settings.discussion_tree.keep_current_open,
}) })
end, { buffer = bufnr, desc = "Toggle all nodes" }) end, { buffer = bufnr, desc = "Toggle all nodes" })
vim.keymap.set("n", state.settings.discussion_tree.toggle_resolved_discussions, function() 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_resolved = true,
toggle_unresolved = false, toggle_unresolved = false,
keep_current_open = state.settings.discussion_tree.keep_current_open, keep_current_open = state.settings.discussion_tree.keep_current_open,
}) })
end, { buffer = bufnr, desc = "Toggle resolved nodes" }) end, { buffer = bufnr, desc = "Toggle resolved nodes" })
vim.keymap.set("n", state.settings.discussion_tree.toggle_unresolved_discussions, function() 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_resolved = false,
toggle_unresolved = true, toggle_unresolved = true,
keep_current_open = state.settings.discussion_tree.keep_current_open, keep_current_open = state.settings.discussion_tree.keep_current_open,

View File

@@ -40,12 +40,13 @@ local function content(discussions, unlinked_discussions, file_name)
resolved_discussions = resolved_discussions, resolved_discussions = resolved_discussions,
resolvable_notes = resolvable_notes, resolvable_notes = resolvable_notes,
resolved_notes = resolved_notes, resolved_notes = resolved_notes,
help_keymap = state.settings.help,
} }
return state.settings.discussion_tree.winbar(t) return state.settings.discussion_tree.winbar(t)
end end
---This function sends the edited comment to the Go server ---This function updates the winbar
---@param discussions Discussion[] ---@param discussions Discussion[]
---@param unlinked_discussions UnlinkedDiscussion[] ---@param unlinked_discussions UnlinkedDiscussion[]
---@param base_title string ---@param base_title string

View File

@@ -79,7 +79,8 @@ M.settings = {
discussions_content = "%#Comment#" .. discussions_content discussions_content = "%#Comment#" .. discussions_content
notes_content = "%#Text#" .. notes_content notes_content = "%#Text#" .. notes_content
end end
return " " .. discussions_content .. " %#Comment#| " .. notes_content local help = "%#Comment#%=Help: " .. t.help_keymap:gsub(" ", "<space>") .. " "
return " " .. discussions_content .. " %#Comment#| " .. notes_content .. help
end, end,
}, },
merge = { 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 -- Merges user settings into the default settings, overriding them
M.merge_settings = function(args) M.merge_settings = function(args)
M.settings = u.merge(M.settings, args) M.settings = u.merge(M.settings, args)