This commit is contained in:
Timothy Jaeryang Baek 2026-10-31 05:58:55 +09:00
parent 3802f3c0e6
commit 8c308e4e88
6 changed files with 45 additions and 8 deletions

View file

@ -36,6 +36,7 @@ export type FileEntry = {
type: 'file' | 'directory';
size?: number;
modified?: number;
created?: number | null;
writable?: boolean;
};

View file

@ -325,7 +325,7 @@
let error: string | null = null;
// ── Browser view state ──────────────────────────────────────────────
type SortMode = 'name' | 'size' | 'date';
type SortMode = 'name' | 'size' | 'date' | 'created';
type BrowserRow = FileEntry & {
fullPath: string;
parentPath: string;
@ -391,6 +391,13 @@
return [...items].sort((a, b) => {
// Directories always first
if (a.type !== b.type) return a.type === 'directory' ? -1 : 1;
if (mode === 'created') {
// Older servers and some filesystems do not expose creation time.
if (a.created == null && b.created != null) return 1;
if (a.created != null && b.created == null) return -1;
const cmp = (a.created ?? 0) - (b.created ?? 0) || a.name.localeCompare(b.name);
return asc ? cmp : -cmp;
}
if (mode === 'date') {
if (a.modified !== undefined && b.modified !== undefined) {
return asc ? a.modified - b.modified : b.modified - a.modified;
@ -2047,6 +2054,7 @@
{canGoForward}
{sortBy}
{sortAsc}
showDateAdded
{showHidden}
viewMode={isSearching ? null : viewMode}
onViewModeChange={changeViewMode}
@ -2632,7 +2640,8 @@
onSelect={handleSelect}
onLongPress={enterSelectionMode}
onToggleExpand={toggleExpand}
showDate={sortBy === 'date'}
showDate={sortBy === 'date' || sortBy === 'created'}
dateField={sortBy === 'created' ? 'created' : 'modified'}
{showHidden}
parentWritable={currentWritable}
/>

View file

@ -58,9 +58,11 @@
export let onLongPress: () => void = () => {};
export let onToggleExpand: (path: string) => void = () => {};
export let showDate: boolean = false;
export let dateField: 'modified' | 'created' = 'modified';
export let showHidden: boolean = false;
export let parentWritable = true;
$: entryDate = entry[dateField];
$: entryPath =
fullPath ??
(entry.type === 'directory' ? `${currentPath}${entry.name}/` : `${currentPath}${entry.name}`);
@ -511,16 +513,16 @@
{/if}
</span>
{:else if entry.type === 'file' && entry.size !== undefined && !renaming}
{#if showDate && entry.modified}
{#if showDate && entryDate != null}
<span class="text-[0.625rem] text-gray-400 shrink-0"
>{formatRelativeTime(entry.modified)}</span
>{formatRelativeTime(entryDate)}</span
>
{/if}
<span class="text-xs text-gray-400 shrink-0">{formatFileSize(entry.size)}</span>
{:else if entry.type === 'directory' && !renaming}
{#if showDate && entry.modified}
{#if showDate && entryDate != null}
<span class="text-[0.625rem] text-gray-400 shrink-0"
>{formatRelativeTime(entry.modified)}</span
>{formatRelativeTime(entryDate)}</span
>
{/if}
{#if terminalUrl}

View file

@ -29,9 +29,10 @@
export let onToggleHidden: () => void = () => {};
// Sort controls
export let sortBy: 'name' | 'size' | 'date' = 'name';
export let sortBy: 'name' | 'size' | 'date' | 'created' = 'name';
export let sortAsc: boolean = true;
export let onSort: (mode: 'name' | 'size' | 'date') => void = () => {};
export let showDateAdded = false;
export let onSort: (mode: 'name' | 'size' | 'date' | 'created') => void = () => {};
// Back / forward navigation
export let canGoBack = false;
@ -230,6 +231,28 @@
/>
{/if}
</button>
{#if showDateAdded}
<button
type="button"
class="select-none flex h-7 w-full items-center gap-2 rounded-lg px-2 text-xs hover:bg-gray-50/40 dark:hover:bg-white/4 transition"
on:click={() => {
onSort('created');
sortMenuOpen = false;
}}
>
<span class="flex-1 text-left">{$i18n.t('Date Added')}</span>
{#if sortBy === 'created'}
<Icon
name="chevron-up"
size={12}
strokeWidth={1.5}
class="text-gray-500 dark:text-gray-400 transition-transform {sortAsc
? ''
: 'rotate-180'}"
/>
{/if}
</button>
{/if}
</DropdownMenu>
</div>
</Dropdown>

View file

@ -747,6 +747,7 @@
"Database": "",
"Datalab Marker API": "",
"Date is required": "",
"Date Added": "",
"Date Modified": "",
"Date range": "",
"Day": "",

View file

@ -756,6 +756,7 @@
"Database": "",
"Datalab Marker API": "",
"Date is required": "",
"Date Added": "",
"Date Modified": "",
"Date range": "",
"Day": "",