Revert "feat(views): add hide_done_categories config option (#153)"
This reverts commit 283f93eda1.
This commit is contained in:
parent
7c0ba178d0
commit
e6816d13ef
6 changed files with 4 additions and 123 deletions
|
|
@ -882,16 +882,6 @@ Fields: ~
|
||||||
`false` uses Vim's built-in foldtext.
|
`false` uses Vim's built-in foldtext.
|
||||||
Folds only apply to category view.
|
Folds only apply to category view.
|
||||||
|
|
||||||
{hide_done_categories}
|
|
||||||
(boolean, default: false)
|
|
||||||
When true, categories where every task is
|
|
||||||
done (or deleted) are hidden from the
|
|
||||||
rendered buffer. The tasks remain in the
|
|
||||||
store and reappear when any task in the
|
|
||||||
category is un-done or a new pending task
|
|
||||||
is added. Hidden tasks are protected from
|
|
||||||
deletion on `:w`.
|
|
||||||
|
|
||||||
{queue} (table) *pending.QueueViewConfig*
|
{queue} (table) *pending.QueueViewConfig*
|
||||||
Queue (priority) view settings.
|
Queue (priority) view settings.
|
||||||
{sort} (string[], default:
|
{sort} (string[], default:
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,6 @@ local _filter_predicates = {}
|
||||||
---@type table<integer, true>
|
---@type table<integer, true>
|
||||||
local _hidden_ids = {}
|
local _hidden_ids = {}
|
||||||
---@type table<integer, true>
|
---@type table<integer, true>
|
||||||
local _done_cat_hidden_ids = {}
|
|
||||||
---@type table<integer, true>
|
|
||||||
local _dirty_rows = {}
|
local _dirty_rows = {}
|
||||||
---@type boolean
|
---@type boolean
|
||||||
local _on_bytes_active = false
|
local _on_bytes_active = false
|
||||||
|
|
@ -76,11 +74,6 @@ function M.hidden_ids()
|
||||||
return _hidden_ids
|
return _hidden_ids
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return table<integer, true>
|
|
||||||
function M.done_cat_hidden_ids()
|
|
||||||
return _done_cat_hidden_ids
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param predicates string[]
|
---@param predicates string[]
|
||||||
---@param hidden table<integer, true>
|
---@param hidden table<integer, true>
|
||||||
---@return nil
|
---@return nil
|
||||||
|
|
@ -701,13 +694,10 @@ function M.render(bufnr)
|
||||||
end
|
end
|
||||||
|
|
||||||
local lines, line_meta
|
local lines, line_meta
|
||||||
_done_cat_hidden_ids = {}
|
|
||||||
if current_view == 'priority' then
|
if current_view == 'priority' then
|
||||||
lines, line_meta = views.priority_view(tasks)
|
lines, line_meta = views.priority_view(tasks)
|
||||||
else
|
else
|
||||||
local done_cat_hidden
|
lines, line_meta = views.category_view(tasks)
|
||||||
lines, line_meta, done_cat_hidden = views.category_view(tasks)
|
|
||||||
_done_cat_hidden_ids = done_cat_hidden
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if #lines == 0 and #_filter_predicates == 0 then
|
if #lines == 0 and #_filter_predicates == 0 then
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,6 @@
|
||||||
---@class pending.CategoryViewConfig
|
---@class pending.CategoryViewConfig
|
||||||
---@field order? string[]
|
---@field order? string[]
|
||||||
---@field folding? boolean|pending.FoldingConfig
|
---@field folding? boolean|pending.FoldingConfig
|
||||||
---@field hide_done_categories? boolean
|
|
||||||
|
|
||||||
---@class pending.QueueViewConfig
|
---@class pending.QueueViewConfig
|
||||||
---@field sort? string[]
|
---@field sort? string[]
|
||||||
|
|
@ -132,7 +131,6 @@ local defaults = {
|
||||||
category = {
|
category = {
|
||||||
order = {},
|
order = {},
|
||||||
folding = true,
|
folding = true,
|
||||||
hide_done_categories = false,
|
|
||||||
},
|
},
|
||||||
queue = {
|
queue = {
|
||||||
sort = { 'status', 'priority', 'due', 'order', 'id' },
|
sort = { 'status', 'priority', 'due', 'order', 'id' },
|
||||||
|
|
|
||||||
|
|
@ -513,9 +513,6 @@ function M._on_write(bufnr)
|
||||||
if #stack > UNDO_MAX then
|
if #stack > UNDO_MAX then
|
||||||
table.remove(stack, 1)
|
table.remove(stack, 1)
|
||||||
end
|
end
|
||||||
for id in pairs(buffer.done_cat_hidden_ids()) do
|
|
||||||
hidden[id] = true
|
|
||||||
end
|
|
||||||
local new_refs = diff.apply(lines, s, hidden)
|
local new_refs = diff.apply(lines, s, hidden)
|
||||||
M._recompute_counts()
|
M._recompute_counts()
|
||||||
buffer.render(bufnr)
|
buffer.render(bufnr)
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,6 @@ end
|
||||||
---@param tasks pending.Task[]
|
---@param tasks pending.Task[]
|
||||||
---@return string[] lines
|
---@return string[] lines
|
||||||
---@return pending.LineMeta[] meta
|
---@return pending.LineMeta[] meta
|
||||||
---@return table<integer, true> done_cat_hidden_ids
|
|
||||||
function M.category_view(tasks)
|
function M.category_view(tasks)
|
||||||
local by_cat = {}
|
local by_cat = {}
|
||||||
local cat_order = {}
|
local cat_order = {}
|
||||||
|
|
@ -229,9 +228,6 @@ function M.category_view(tasks)
|
||||||
cat_order = ordered
|
cat_order = ordered
|
||||||
end
|
end
|
||||||
|
|
||||||
local hide_done = config.get().view.category.hide_done_categories
|
|
||||||
local done_cat_hidden = {} ---@type table<integer, true>
|
|
||||||
|
|
||||||
for _, cat in ipairs(cat_order) do
|
for _, cat in ipairs(cat_order) do
|
||||||
sort_tasks(by_cat[cat])
|
sort_tasks(by_cat[cat])
|
||||||
sort_tasks(done_by_cat[cat])
|
sort_tasks(done_by_cat[cat])
|
||||||
|
|
@ -239,21 +235,12 @@ function M.category_view(tasks)
|
||||||
|
|
||||||
local lines = {}
|
local lines = {}
|
||||||
local meta = {}
|
local meta = {}
|
||||||
local rendered = 0
|
|
||||||
|
|
||||||
for _, cat in ipairs(cat_order) do
|
for i, cat in ipairs(cat_order) do
|
||||||
if hide_done and #by_cat[cat] == 0 and #done_by_cat[cat] > 0 then
|
if i > 1 then
|
||||||
for _, t in ipairs(done_by_cat[cat]) do
|
|
||||||
done_cat_hidden[t.id] = true
|
|
||||||
end
|
|
||||||
goto next_cat
|
|
||||||
end
|
|
||||||
|
|
||||||
if rendered > 0 then
|
|
||||||
table.insert(lines, '')
|
table.insert(lines, '')
|
||||||
table.insert(meta, { type = 'blank' })
|
table.insert(meta, { type = 'blank' })
|
||||||
end
|
end
|
||||||
rendered = rendered + 1
|
|
||||||
table.insert(lines, '# ' .. cat)
|
table.insert(lines, '# ' .. cat)
|
||||||
table.insert(meta, { type = 'header', category = cat })
|
table.insert(meta, { type = 'header', category = cat })
|
||||||
|
|
||||||
|
|
@ -284,11 +271,9 @@ function M.category_view(tasks)
|
||||||
forge_spans = compute_forge_spans(task, prefix_len),
|
forge_spans = compute_forge_spans(task, prefix_len),
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
::next_cat::
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return lines, meta, done_cat_hidden
|
return lines, meta
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param tasks pending.Task[]
|
---@param tasks pending.Task[]
|
||||||
|
|
|
||||||
|
|
@ -280,85 +280,6 @@ describe('views', function()
|
||||||
assert.are.equal('# Alpha', headers[1])
|
assert.are.equal('# Alpha', headers[1])
|
||||||
assert.are.equal('# Beta', headers[2])
|
assert.are.equal('# Beta', headers[2])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('returns empty done_cat_hidden_ids when hide_done_categories is false', function()
|
|
||||||
local t1 = s:add({ description = 'Done task', category = 'Work' })
|
|
||||||
s:update(t1.id, { status = 'done' })
|
|
||||||
s:add({ description = 'Active', category = 'Personal' })
|
|
||||||
local _, _, done_hidden = views.category_view(s:active_tasks())
|
|
||||||
assert.are.same({}, done_hidden)
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('hides categories with only done tasks when hide_done_categories is true', function()
|
|
||||||
vim.g.pending = {
|
|
||||||
data_path = tmpdir .. '/tasks.json',
|
|
||||||
view = { category = { hide_done_categories = true } },
|
|
||||||
}
|
|
||||||
config.reset()
|
|
||||||
local t1 = s:add({ description = 'Done task', category = 'Work' })
|
|
||||||
s:update(t1.id, { status = 'done' })
|
|
||||||
s:add({ description = 'Active', category = 'Personal' })
|
|
||||||
local lines, meta, done_hidden = views.category_view(s:active_tasks())
|
|
||||||
local headers = {}
|
|
||||||
for i, m in ipairs(meta) do
|
|
||||||
if m.type == 'header' then
|
|
||||||
table.insert(headers, lines[i])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assert.are.equal(1, #headers)
|
|
||||||
assert.are.equal('# Personal', headers[1])
|
|
||||||
assert.are.same({ [t1.id] = true }, done_hidden)
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('shows categories with a mix of done and pending tasks', function()
|
|
||||||
vim.g.pending = {
|
|
||||||
data_path = tmpdir .. '/tasks.json',
|
|
||||||
view = { category = { hide_done_categories = true } },
|
|
||||||
}
|
|
||||||
config.reset()
|
|
||||||
local t1 = s:add({ description = 'Done task', category = 'Work' })
|
|
||||||
s:update(t1.id, { status = 'done' })
|
|
||||||
s:add({ description = 'Active task', category = 'Work' })
|
|
||||||
local lines, meta, done_hidden = views.category_view(s:active_tasks())
|
|
||||||
local headers = {}
|
|
||||||
for i, m in ipairs(meta) do
|
|
||||||
if m.type == 'header' then
|
|
||||||
table.insert(headers, lines[i])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assert.are.equal(1, #headers)
|
|
||||||
assert.are.equal('# Work', headers[1])
|
|
||||||
assert.are.same({}, done_hidden)
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('does not insert leading blank line when first category is hidden', function()
|
|
||||||
vim.g.pending = {
|
|
||||||
data_path = tmpdir .. '/tasks.json',
|
|
||||||
view = { category = { hide_done_categories = true } },
|
|
||||||
}
|
|
||||||
config.reset()
|
|
||||||
local t1 = s:add({ description = 'Done task', category = 'Alpha' })
|
|
||||||
s:update(t1.id, { status = 'done' })
|
|
||||||
s:add({ description = 'Active', category = 'Beta' })
|
|
||||||
local lines, meta = views.category_view(s:active_tasks())
|
|
||||||
assert.are.equal('header', meta[1].type)
|
|
||||||
assert.are.equal('# Beta', lines[1])
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('returns all done task ids from hidden categories', function()
|
|
||||||
vim.g.pending = {
|
|
||||||
data_path = tmpdir .. '/tasks.json',
|
|
||||||
view = { category = { hide_done_categories = true } },
|
|
||||||
}
|
|
||||||
config.reset()
|
|
||||||
local t1 = s:add({ description = 'Done A', category = 'Work' })
|
|
||||||
local t2 = s:add({ description = 'Done B', category = 'Work' })
|
|
||||||
s:update(t1.id, { status = 'done' })
|
|
||||||
s:update(t2.id, { status = 'done' })
|
|
||||||
s:add({ description = 'Active', category = 'Personal' })
|
|
||||||
local _, _, done_hidden = views.category_view(s:active_tasks())
|
|
||||||
assert.are.same({ [t1.id] = true, [t2.id] = true }, done_hidden)
|
|
||||||
end)
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('priority_view', function()
|
describe('priority_view', function()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue