{#each directories as dir (dir.id)}
onNavigateDirectory(id)} onRename={(id, name) => onRenameDirectory(id, name)} onDelete={(id) => onDeleteDirectory(id)} onFileDrop={(fileId, directoryId) => onMoveFileToDirectory(fileId, directoryId)} onDirDrop={(dirId, targetId) => onMoveDirectoryToDirectory(dirId, targetId)} /> {/each} {#each files as file (file?.id ?? file?.itemId ?? file?.tempId)}
{ const fileId = file?.id ?? file?.tempId; if (fileId) { e.dataTransfer?.setData( "application/x-kb-file-move", JSON.stringify({ fileId }), ); } }} >
{#if file?.status !== "uploading"}
{ let fileId = file?.id ?? file?.tempId; onClick(fileId); }} >
{:else}
{/if}
{ onClick(file?.id ?? file?.tempId); }} on:dblclick={() => { if (knowledge?.write_access) startRename(file); }} >
{#if editingFileId === (file?.id ?? file?.tempId)}
{ if (e.key === "Enter") submitRename(); if (e.key === "Escape") cancelRename(); }} on:blur={submitRename} on:click={(e) => e.stopPropagation()} autofocus /> {:else}
{file?.name ?? file?.meta?.name} {#if file?.meta?.size}
{formatFileSize( file?.meta?.size, )}
{/if}
{/if}
{#if file?.updated_at}
{dayjs(file.updated_at * 1000).fromNow()}
{/if} {#if file?.user}
{$i18n.t("By {{name}}", { name: capitalizeFirstLetter( file?.user?.name ?? file?.user?.email ?? $i18n.t("Deleted User"), ), })}
{/if}
{#if knowledge?.write_access}
{ startRename(file); }} >
{$i18n.t("Rename")}
{ let fileId = file?.id ?? file?.tempId; window.open( `${REXPRO_BASE_URL}/api/v1/files/${fileId}/content`, "_blank", ); }} >
{$i18n.t("Download")}
{ onDelete(file?.id ?? file?.tempId); }} >
{$i18n.t("Delete")}
{/if}
{/each}