feat: emoji picker in create dialogs; due date and priority right under a deepened task; no flicker on kanban drop
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m29s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
sandrodachandClaude Opus 5.5 committed 2026-11-01 14:20:34 +01:00
1 parent fa02e8dee6
commit 7860609201
13 files changed
+143 -74

No files matched your search

+2 -14
View File
@@ -25,19 +25,7 @@ const (
mailFooterAccount = "Diese E-Mail betrifft dein MindSift-Konto und kommt deshalb unabhängig von deinen Benachrichtigungen."
)
// priorityLabel / priorityTone: how a task's priority reads and is coloured in mails
func priorityLabel(p string) string {
switch p {
case "urgent":
return "Dringend"
case "high":
return "Wichtig"
case "low":
return "Niedrig"
}
return "Normal"
}
// priorityTone: how a task's priority is coloured in mails (domain.PriorityLabel gives the text)
func priorityTone(p string) string {
switch p {
case "urgent":
@@ -52,7 +40,7 @@ func priorityTone(p string) string {
func (s *Server) dueAlarmMail(a storage.DueTaskAlarm, due string) mailContent {
meta := "Fällig: " + due
if a.Priority != "" && a.Priority != "normal" {
meta += " · " + priorityLabel(a.Priority)
meta += " · " + domain.PriorityLabel(a.Priority)
}
c := mailContent{
Preheader: "Fällig: " + a.Title,
+13
View File
@@ -75,3 +75,16 @@ func HumanDue(raw string) string {
}
return t.Format("02.01.2006")
}
// PriorityLabel: how a task's priority reads in mails and notes.
func PriorityLabel(p string) string {
switch p {
case "urgent":
return "Dringend"
case "high":
return "Wichtig"
case "low":
return "Niedrig"
}
return "Normal"
}
+4
View File
@@ -37,6 +37,10 @@ func TestDeepenTaskIntoNoteKeepsTheTask(t *testing.T) {
if err != nil || doc == nil || len(doc.Blocks) == 0 || doc.Blocks[0].ID != deepened.BlockID || doc.Blocks[0].Type != "todo" {
t.Fatalf("first block should be the linked checkbox: %+v %v", doc, err)
}
// Due date and priority come right under the checkbox, before the description
if len(doc.Blocks) < 3 || doc.Blocks[1].Content != "Priorität: Wichtig" || doc.Blocks[2].Content != "Restic oder Borg?" {
t.Fatalf("priority line should follow the checkbox, then the description: %+v", doc.Blocks)
}
// Completing the task ticks the checkbox in the note
if store.SyncDocBlockAndTask(anna.ID, th.ID, true) != deepened.DocID {
t.Fatal("completing the task should tick its block")
+16 -15
View File
@@ -335,6 +335,22 @@ func (s *Store) UpdateThoughtTriage(userID, thoughtID, action, convertTo, target
})
// 17a. Die anderen Details aus der Aufgabe sollen natürlich ebenfalls übernommen werden (Notizen, Subtasks, Fälligkeit/Priorität).
// Due date and priority right under the checkbox, above the description and the subtasks
var metaItems []string
if thought.DueDate != "" {
metaItems = append(metaItems, "Fällig: "+domain.HumanDue(thought.DueDate))
}
if thought.Priority != "" && thought.Priority != "normal" {
metaItems = append(metaItems, "Priorität: "+domain.PriorityLabel(thought.Priority))
}
if len(metaItems) > 0 {
blocks = append(blocks, domain.DocumentBlock{
ID: domain.NewID("blk"),
Type: "bullet",
Content: strings.Join(metaItems, " • "),
Level: 1,
})
}
if strings.TrimSpace(thought.Notes) != "" {
blocks = append(blocks, domain.DocumentBlock{
ID: domain.NewID("blk"),
@@ -359,21 +375,6 @@ func (s *Store) UpdateThoughtTriage(userID, thoughtID, action, convertTo, target
}
}
}
var metaItems []string
if thought.DueDate != "" {
metaItems = append(metaItems, "Fällig: "+domain.HumanDue(thought.DueDate))
}
if thought.Priority != "" && thought.Priority != "normal" {
metaItems = append(metaItems, "Priorität: "+thought.Priority)
}
if len(metaItems) > 0 {
blocks = append(blocks, domain.DocumentBlock{
ID: domain.NewID("blk"),
Type: "bullet",
Content: strings.Join(metaItems, " • "),
Level: 1,
})
}
if len(blocks) == 1 {
blocks = append(blocks, domain.DocumentBlock{
ID: domain.NewID("blk"),