Files
CT/src/View/Components/fileBrowser.tsx
T

77 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-07-21 17:55:53 +02:00
import "./fileBrowser.css";
import * as React from "bloatless-react";
2024-07-21 18:56:56 +02:00
import StorageModel, {
PATH_COMPONENT_SEPARATOR,
} from "../../Model/storageModel";
import { DangerousActionButton } from "./dangerousActionButton";
2024-07-21 17:55:53 +02:00
import { DirectoryItemList } from "./directoryItemList";
import StorageViewModel from "../../ViewModel/storageViewModel";
2024-07-21 19:44:10 +02:00
import { translations } from "../translations";
2024-07-21 17:55:53 +02:00
export function FileBrowser(storageViewModel: StorageViewModel) {
const detailView = React.createProxyState(
[storageViewModel.selectedPath],
() => {
if (storageViewModel.selectedPath.value == PATH_COMPONENT_SEPARATOR)
return (
<span class="secondary">{translations.storage.noItemSelected}</span>
);
2024-07-21 17:55:53 +02:00
2024-07-21 19:44:10 +02:00
return (
<div class="flex-column gap">
<div class="tile flex-no">
<div>
<b>{translations.storage.path}</b>
<span
class="break-all"
subscribe:innerText={storageViewModel.selectedPath}
></span>
</div>
2024-07-21 19:44:10 +02:00
</div>
<div class="tile flex-no">
<div>
<b>{translations.storage.content}</b>
<code
subscribe:innerText={storageViewModel.selectedFileContent}
></code>
</div>
2024-07-21 19:44:10 +02:00
</div>
{DangerousActionButton(
translations.storage.deleteItem,
"delete_forever",
storageViewModel.deleteSelectedItem
)}
2024-07-21 19:44:10 +02:00
</div>
);
}
);
2024-07-21 19:44:10 +02:00
2024-07-21 18:56:56 +02:00
const view = (
2024-07-21 17:55:53 +02:00
<div class="file-browser">
<div>
<div class="scroll-area">{DirectoryItemList(storageViewModel)}</div>
2024-07-21 18:56:56 +02:00
<div class="detail-button-wrapper">
<button class="ghost" on:click={scrollToDetails}>
<span
class="ellipsis"
subscribe:innerText={storageViewModel.selectedFileName}
2024-07-21 18:56:56 +02:00
></span>
<span class="icon">arrow_forward</span>
</button>
</div>
</div>
2024-07-21 19:44:10 +02:00
<div class="scroll-area" children:set={detailView}></div>
2024-07-21 17:55:53 +02:00
</div>
);
2024-07-21 18:56:56 +02:00
function scrollToDetails() {
view.scrollLeft = view.scrollWidth;
}
return view;
2024-07-21 17:55:53 +02:00
}