fix: resolve reminder indexes from show view
Some checks failed
CI / build (push) Has been cancelled
Some checks failed
CI / build (push) Has been cancelled
This commit is contained in:
parent
de80b37c45
commit
883ae25791
@ -1,6 +1,7 @@
|
||||
# Changelog
|
||||
|
||||
## Unreleased
|
||||
- Resolve numeric edit/complete/delete indexes against the default `show` view instead of unrelated completed reminders.
|
||||
- Add a release helper for Homebrew tap updates; thanks @dinakars777.
|
||||
|
||||
## 0.2.0 - 2026-05-04
|
||||
|
||||
@ -5,18 +5,20 @@ public enum IDResolver {
|
||||
|
||||
public static func resolve(
|
||||
_ inputs: [String],
|
||||
from reminders: [ReminderItem]
|
||||
from reminders: [ReminderItem],
|
||||
numericFrom numericReminders: [ReminderItem]? = nil
|
||||
) throws -> [ReminderItem] {
|
||||
let sorted = ReminderFiltering.sort(reminders)
|
||||
let numericSorted = ReminderFiltering.sort(numericReminders ?? reminders)
|
||||
var resolved: [ReminderItem] = []
|
||||
for input in inputs {
|
||||
let trimmed = input.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
if let index = Int(trimmed) {
|
||||
let idx = index - 1
|
||||
guard idx >= 0 && idx < sorted.count else {
|
||||
guard idx >= 0 && idx < numericSorted.count else {
|
||||
throw RemindCoreError.invalidIdentifier(trimmed)
|
||||
}
|
||||
resolved.append(sorted[idx])
|
||||
resolved.append(numericSorted[idx])
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@ -42,6 +42,11 @@ enum CommandHelpers {
|
||||
}
|
||||
}
|
||||
|
||||
static func resolveShowIdentifiers(_ inputs: [String], from reminders: [ReminderItem]) throws -> [ReminderItem] {
|
||||
let defaultShowReminders = ReminderFiltering.apply(reminders, filter: .today)
|
||||
return try IDResolver.resolve(inputs, from: reminders, numericFrom: defaultShowReminders)
|
||||
}
|
||||
|
||||
private static func parseCustomRecurrence(_ normalized: String, original: String) throws -> RecurrenceRule {
|
||||
let parts = normalized.split(separator: " ")
|
||||
guard parts.count == 3, parts[0] == "every", let interval = Int(parts[1]), interval > 0 else {
|
||||
|
||||
@ -32,7 +32,7 @@ enum CompleteCommand {
|
||||
let store = RemindersStore()
|
||||
try await store.requestAccess()
|
||||
let reminders = try await store.reminders(in: nil)
|
||||
let resolved = try IDResolver.resolve(inputs, from: reminders)
|
||||
let resolved = try CommandHelpers.resolveShowIdentifiers(inputs, from: reminders)
|
||||
|
||||
if values.flag("dryRun") {
|
||||
OutputRenderer.printReminders(resolved, format: runtime.outputFormat)
|
||||
|
||||
@ -33,7 +33,7 @@ enum DeleteCommand {
|
||||
let store = RemindersStore()
|
||||
try await store.requestAccess()
|
||||
let reminders = try await store.reminders(in: nil)
|
||||
let resolved = try IDResolver.resolve(inputs, from: reminders)
|
||||
let resolved = try CommandHelpers.resolveShowIdentifiers(inputs, from: reminders)
|
||||
|
||||
if values.flag("dryRun") {
|
||||
OutputRenderer.printReminders(resolved, format: runtime.outputFormat)
|
||||
|
||||
@ -57,7 +57,7 @@ enum EditCommand {
|
||||
let store = RemindersStore()
|
||||
try await store.requestAccess()
|
||||
let reminders = try await store.reminders(in: nil)
|
||||
let resolved = try IDResolver.resolve([input], from: reminders)
|
||||
let resolved = try CommandHelpers.resolveShowIdentifiers([input], from: reminders)
|
||||
guard let reminder = resolved.first else {
|
||||
throw RemindCoreError.reminderNotFound(input)
|
||||
}
|
||||
|
||||
@ -38,6 +38,13 @@ struct IDResolverTests {
|
||||
#expect(resolved.first?.title == "First")
|
||||
}
|
||||
|
||||
@Test("Resolve numeric indexes from filtered show output")
|
||||
func resolveIndexFromFilteredShowOutput() throws {
|
||||
let all = sampleReminders()
|
||||
let resolved = try IDResolver.resolve(["1"], from: all, numericFrom: [all[1]])
|
||||
#expect(resolved.first?.title == "Second")
|
||||
}
|
||||
|
||||
@Test("Resolve by prefix")
|
||||
func resolvePrefix() throws {
|
||||
let resolved = try IDResolver.resolve(["abcd"], from: sampleReminders())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user