fix(quick add magic): don't parse labels, assignees or lists as date expressions if they are called that
Resolves https://community.vikunja.io/t/setting-today-label-using-quick-add-magic/969
This commit is contained in:
parent
d9ca798aad
commit
02448700b3
@ -566,6 +566,13 @@ describe('Parse Task Text', () => {
|
||||
expect(result.labels).toHaveLength(1)
|
||||
expect(result.labels[0]).toBe('label with space')
|
||||
})
|
||||
it('should not parse labels called date expressions as dates', () => {
|
||||
const result = parseTaskText('Lorem Ipsum *today')
|
||||
|
||||
expect(result.text).toBe('Lorem Ipsum')
|
||||
expect(result.labels).toHaveLength(1)
|
||||
expect(result.labels[0]).toBe('today')
|
||||
})
|
||||
})
|
||||
|
||||
describe('List', () => {
|
||||
@ -593,6 +600,12 @@ describe('Parse Task Text', () => {
|
||||
expect(result.text).toBe('Lorem Ipsum +list2 +list3')
|
||||
expect(result.list).toBe('list1')
|
||||
})
|
||||
it('should parse a list that\'s called like a date as list', () => {
|
||||
const result = parseTaskText(`Lorem Ipsum +today`)
|
||||
|
||||
expect(result.text).toBe('Lorem Ipsum')
|
||||
expect(result.list).toBe('today')
|
||||
})
|
||||
})
|
||||
|
||||
describe('Priority', () => {
|
||||
@ -657,6 +670,13 @@ describe('Parse Task Text', () => {
|
||||
expect(result.assignees).toHaveLength(1)
|
||||
expect(result.assignees[0]).toBe('user with long name')
|
||||
})
|
||||
it('should parse an assignee who is called like a date as assignee', () => {
|
||||
const result = parseTaskText(`Lorem Ipsum @today`)
|
||||
|
||||
expect(result.text).toBe('Lorem Ipsum')
|
||||
expect(result.assignees).toHaveLength(1)
|
||||
expect(result.assignees[0]).toBe('today')
|
||||
})
|
||||
})
|
||||
|
||||
describe('Recurring Dates', () => {
|
||||
|
@ -72,15 +72,19 @@ export const parseTaskText = (text: string, prefixesMode: PrefixMode = PrefixMod
|
||||
}
|
||||
|
||||
result.labels = getItemsFromPrefix(text, prefixes.label)
|
||||
result.text = cleanupItemText(result.text, result.labels, prefixes.label)
|
||||
|
||||
const lists: string[] = getItemsFromPrefix(text, prefixes.list)
|
||||
const lists: string[] = getItemsFromPrefix(result.text, prefixes.list)
|
||||
result.list = lists.length > 0 ? lists[0] : null
|
||||
result.text = result.list !== null ? cleanupItemText(result.text, [result.list], prefixes.list) : result.text
|
||||
|
||||
result.priority = getPriority(text, prefixes.priority)
|
||||
result.priority = getPriority(result.text, prefixes.priority)
|
||||
result.text = result.priority !== null ? cleanupItemText(result.text, [String(result.priority)], prefixes.priority) : result.text
|
||||
|
||||
result.assignees = getItemsFromPrefix(text, prefixes.assignee)
|
||||
result.assignees = getItemsFromPrefix(result.text, prefixes.assignee)
|
||||
result.text = cleanupItemText(result.text, result.assignees, prefixes.assignee)
|
||||
|
||||
const {textWithoutMatched, repeats} = getRepeats(text)
|
||||
const {textWithoutMatched, repeats} = getRepeats(result.text)
|
||||
result.text = textWithoutMatched
|
||||
result.repeats = repeats
|
||||
|
||||
@ -117,7 +121,10 @@ const getItemsFromPrefix = (text: string, prefix: string): string[] => {
|
||||
// Only until the next space
|
||||
itemText = p.split(' ')[0]
|
||||
}
|
||||
items.push(itemText)
|
||||
|
||||
if(itemText !== '') {
|
||||
items.push(itemText)
|
||||
}
|
||||
})
|
||||
|
||||
return Array.from(new Set(items))
|
||||
|
Loading…
x
Reference in New Issue
Block a user