feat(app): session last updated time display in command pallete's search (#12376)
This commit is contained in:
@@ -15,6 +15,7 @@ import { useLayout } from "@/context/layout"
|
|||||||
import { useFile } from "@/context/file"
|
import { useFile } from "@/context/file"
|
||||||
import { useLanguage } from "@/context/language"
|
import { useLanguage } from "@/context/language"
|
||||||
import { decode64 } from "@/utils/base64"
|
import { decode64 } from "@/utils/base64"
|
||||||
|
import { getRelativeTime } from "@/utils/time"
|
||||||
|
|
||||||
type EntryType = "command" | "file" | "session"
|
type EntryType = "command" | "file" | "session"
|
||||||
|
|
||||||
@@ -30,6 +31,7 @@ type Entry = {
|
|||||||
directory?: string
|
directory?: string
|
||||||
sessionID?: string
|
sessionID?: string
|
||||||
archived?: number
|
archived?: number
|
||||||
|
updated?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
type DialogSelectFileMode = "all" | "files"
|
type DialogSelectFileMode = "all" | "files"
|
||||||
@@ -120,6 +122,7 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil
|
|||||||
title: string
|
title: string
|
||||||
description: string
|
description: string
|
||||||
archived?: number
|
archived?: number
|
||||||
|
updated?: number
|
||||||
}): Entry => ({
|
}): Entry => ({
|
||||||
id: `session:${input.directory}:${input.id}`,
|
id: `session:${input.directory}:${input.id}`,
|
||||||
type: "session",
|
type: "session",
|
||||||
@@ -129,6 +132,7 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil
|
|||||||
directory: input.directory,
|
directory: input.directory,
|
||||||
sessionID: input.id,
|
sessionID: input.id,
|
||||||
archived: input.archived,
|
archived: input.archived,
|
||||||
|
updated: input.updated,
|
||||||
})
|
})
|
||||||
|
|
||||||
const list = createMemo(() => allowed().map(commandItem))
|
const list = createMemo(() => allowed().map(commandItem))
|
||||||
@@ -214,6 +218,7 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil
|
|||||||
description,
|
description,
|
||||||
directory,
|
directory,
|
||||||
archived: s.time?.archived,
|
archived: s.time?.archived,
|
||||||
|
updated: s.time?.updated,
|
||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
.catch(() => [] as { id: string; title: string; description: string; directory: string; archived?: number }[])
|
.catch(() => [] as { id: string; title: string; description: string; directory: string; archived?: number }[])
|
||||||
@@ -384,6 +389,11 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil
|
|||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<Show when={item.updated}>
|
||||||
|
<span class="text-12-regular text-text-weak whitespace-nowrap ml-2">
|
||||||
|
{getRelativeTime(new Date(item.updated!).toISOString())}
|
||||||
|
</span>
|
||||||
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
</Match>
|
</Match>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
|||||||
14
packages/app/src/utils/time.ts
Normal file
14
packages/app/src/utils/time.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export function getRelativeTime(dateString: string): string {
|
||||||
|
const date = new Date(dateString)
|
||||||
|
const now = new Date()
|
||||||
|
const diffMs = now.getTime() - date.getTime()
|
||||||
|
const diffSeconds = Math.floor(diffMs / 1000)
|
||||||
|
const diffMinutes = Math.floor(diffSeconds / 60)
|
||||||
|
const diffHours = Math.floor(diffMinutes / 60)
|
||||||
|
const diffDays = Math.floor(diffHours / 24)
|
||||||
|
|
||||||
|
if (diffSeconds < 60) return "Just now"
|
||||||
|
if (diffMinutes < 60) return `${diffMinutes}m ago`
|
||||||
|
if (diffHours < 24) return `${diffHours}h ago`
|
||||||
|
return `${diffDays}d ago`
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user