mirror of
https://github.com/open-webui/open-webui.git
synced 2026-11-15 09:31:21 +00:00
refac
This commit is contained in:
parent
3802f3c0e6
commit
8c308e4e88
6 changed files with 45 additions and 8 deletions
|
|
@ -36,6 +36,7 @@ export type FileEntry = {
|
|||
type: 'file' | 'directory';
|
||||
size?: number;
|
||||
modified?: number;
|
||||
created?: number | null;
|
||||
writable?: boolean;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -747,6 +747,7 @@
|
|||
"Database": "",
|
||||
"Datalab Marker API": "",
|
||||
"Date is required": "",
|
||||
"Date Added": "",
|
||||
"Date Modified": "",
|
||||
"Date range": "",
|
||||
"Day": "",
|
||||
|
|
|
|||
|
|
@ -756,6 +756,7 @@
|
|||
"Database": "",
|
||||
"Datalab Marker API": "",
|
||||
"Date is required": "",
|
||||
"Date Added": "",
|
||||
"Date Modified": "",
|
||||
"Date range": "",
|
||||
"Day": "",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue