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
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:
1 parent
fa02e8dee6
commit
7860609201
13 files changed
+143
-74
No files matched your search
+2
-14
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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")
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in new issue
Block a user