diff --git a/lua/octo/gh/graphql.lua b/lua/octo/gh/graphql.lua index e340d4e0..0e96e8c9 100644 --- a/lua/octo/gh/graphql.lua +++ b/lua/octo/gh/graphql.lua @@ -1076,9 +1076,9 @@ query( ]] .. fragments.discussion_info M.discussion_query = [[ -query($endCursor: String) { - repository(owner: "%s", name: "%s") { - discussion(number: %d) { +query($owner: String!, $name: String!, $number: Int!, $endCursor: String) { + repository(owner: $owner, name: $name) { + discussion(number: $number) { ...DiscussionDetailsFragment labels(first: 20) { ...LabelConnectionFragment diff --git a/lua/octo/pickers/telescope/previewers.lua b/lua/octo/pickers/telescope/previewers.lua index ed4c5171..1e2713a7 100644 --- a/lua/octo/pickers/telescope/previewers.lua +++ b/lua/octo/pickers/telescope/previewers.lua @@ -26,32 +26,32 @@ local discussion = defaulter(function(opts) local number = entry.value local owner, name = utils.split_repo(entry.repo) - local query = graphql("discussion_query", owner, name, number) - - gh.run { - args = { "api", "graphql", "-f", string.format("query=%s", query) }, - cb = function(output, stderr) - if stderr and not utils.is_blank(stderr) then - vim.api.nvim_err_writeln(stderr) - elseif output and vim.api.nvim_buf_is_valid(bufnr) then - -- clear the buffer - vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, {}) - - local result = vim.json.decode(output) - local obj = result.data.repository.discussion - - writers.write_title(bufnr, tostring(obj.title), 1) - writers.write_discussion_details(bufnr, obj) - writers.write_body(bufnr, obj, 11) - - if obj.answer ~= vim.NIL then - local line = vim.api.nvim_buf_line_count(bufnr) + 1 - writers.write_discussion_answer(bufnr, obj, line) - end - vim.api.nvim_buf_set_option(bufnr, "filetype", "octo") - end - end, + gh.api.graphql { + query = graphql "discussion_query", + fields = { owner = owner, name = name, number = number }, + jq = ".data.repository.discussion", + opts = { + cb = gh.create_callback { + failure = vim.api.nvim_err_writeln, + success = function(output) + -- clear the buffer + vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, {}) + + local obj = vim.json.decode(output) + writers.write_title(bufnr, tostring(obj.title), 1) + writers.write_discussion_details(bufnr, obj) + writers.write_body(bufnr, obj, 11) + + if obj.answer ~= vim.NIL then + local line = vim.api.nvim_buf_line_count(bufnr) + 1 + writers.write_discussion_answer(bufnr, obj, line) + end + + vim.api.nvim_buf_set_option(bufnr, "filetype", "octo") + end, + }, + }, } end, }