diff --git a/lua/kubectl/mappings.lua b/lua/kubectl/mappings.lua index 734f20fe..866172b2 100644 --- a/lua/kubectl/mappings.lua +++ b/lua/kubectl/mappings.lua @@ -408,8 +408,23 @@ function M.register() local current_view, _ = view.view_and_definition(string.lower(vim.trim(buf_name))) local name, ns = current_view.getCurrentSelection() + local resource_idx = 0 + for i, row in ipairs(state.instance.processedData) do + if row.name == name and (ns and row.ns == ns or true) then + resource_idx = i + break + end + end + local resource = state.instance.processedData[resource_idx] local line_number = vim.api.nvim_win_get_cursor(0)[1] + if resource.selected then + resource.selected = false + else + resource.selected = true + end + vim.print("resource selected: " .. vim.inspect(resource)) + if state.selections.selected["line" .. line_number] then state.selections.selected["line" .. line_number] = nil else diff --git a/lua/kubectl/resourcebuilder.lua b/lua/kubectl/resourcebuilder.lua index a5be0e6f..4b8fd2cc 100644 --- a/lua/kubectl/resourcebuilder.lua +++ b/lua/kubectl/resourcebuilder.lua @@ -354,6 +354,7 @@ function ResourceBuilder:view(definition, cancellationToken, opts) end) state.instance = self + state.selections.selected = {} return self end diff --git a/lua/kubectl/utils/tables.lua b/lua/kubectl/utils/tables.lua index 70e5db11..62ab7506 100644 --- a/lua/kubectl/utils/tables.lua +++ b/lua/kubectl/utils/tables.lua @@ -475,6 +475,8 @@ function M.pretty_print(data, headers, sort_by) current_col_position = current_col_position + #display_value end table.insert(tbl, table.concat(row_line, "")) + + -- selections end return tbl, extmarks @@ -525,6 +527,20 @@ function M.find_resource(data, name, namespace) return nil end +function M.find_processed_resource(data, name, namespace) + if data.items then + return vim.iter(data.items):find(function(row) + return row.metadata.name == name and (namespace and row.metadata.namespace == namespace or true) + end) + end + if data.rows then + return vim.iter(data.rows):find(function(row) + return row.object.metadata.name == name and (namespace and row.object.metadata.namespace == namespace or true) + end).object + end + return nil +end + --- Check if a table is empty ---@param table table ---@return boolean