allow selection of files to transfer

This commit is contained in:
marlon-erler
2024-07-27 19:40:16 +02:00
parent a3d6e448ed
commit f8ed893f79
3 changed files with 45 additions and 8 deletions
+19 -4
View File
@@ -4440,6 +4440,9 @@
// src/View/Modals/fileTransferModal.tsx // src/View/Modals/fileTransferModal.tsx
function FileTransferModal(fileTransferViewModel2) { function FileTransferModal(fileTransferViewModel2) {
const OptionConverter = (fileOption) => {
return FileOption(fileOption, fileTransferViewModel2);
};
return /* @__PURE__ */ createElement( return /* @__PURE__ */ createElement(
"div", "div",
{ {
@@ -4452,7 +4455,7 @@
class: "flex-column gap content-margin-bottom", class: "flex-column gap content-margin-bottom",
"children:append": [ "children:append": [
fileTransferViewModel2.generalFileOptions, fileTransferViewModel2.generalFileOptions,
FileOption OptionConverter
] ]
} }
), /* @__PURE__ */ createElement("h3", null, translations.fileTransferModal.chatsHeadline), /* @__PURE__ */ createElement( ), /* @__PURE__ */ createElement("h3", null, translations.fileTransferModal.chatsHeadline), /* @__PURE__ */ createElement(
@@ -4461,7 +4464,7 @@
class: "flex-column gap", class: "flex-column gap",
"children:append": [ "children:append": [
fileTransferViewModel2.chatFileOptions, fileTransferViewModel2.chatFileOptions,
FileOption OptionConverter
] ]
} }
)), /* @__PURE__ */ createElement("div", { class: "flex-row width-100" }, /* @__PURE__ */ createElement( )), /* @__PURE__ */ createElement("div", { class: "flex-row width-100" }, /* @__PURE__ */ createElement(
@@ -4482,8 +4485,19 @@
))) )))
); );
} }
function FileOption(fileOption) { function FileOption(fileOption, fileTransferViewModel2) {
return /* @__PURE__ */ createElement("button", { class: "tile" }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", { class: "ellipsis" }, fileOption.label), /* @__PURE__ */ createElement("span", { class: "secondary ellipsis" }, StorageModel.pathComponentsToString(...fileOption.path)))); const isSelected = new State(false);
isSelected.subscribeSilent((isSelected2) => {
if (isSelected2 == true) {
fileTransferViewModel2.selectedPaths.add(fileOption.path);
} else {
fileTransferViewModel2.selectedPaths.remove(fileOption.path);
}
});
function toggle() {
isSelected.value = !isSelected.value;
}
return /* @__PURE__ */ createElement("button", { class: "tile", "toggle:selected": isSelected, "on:click": toggle }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", { class: "ellipsis" }, fileOption.label), /* @__PURE__ */ createElement("span", { class: "secondary ellipsis" }, StorageModel.pathComponentsToString(...fileOption.path))));
} }
// src/Model/Global/fileTransferModel.ts // src/Model/Global/fileTransferModel.ts
@@ -4566,6 +4580,7 @@
isShowingTransferModal = new State(false); isShowingTransferModal = new State(false);
generalFileOptions = new ListState(); generalFileOptions = new ListState();
chatFileOptions = new ListState(); chatFileOptions = new ListState();
selectedPaths = new ListState();
// methods // methods
getOptions = () => { getOptions = () => {
this.generalFileOptions.clear(); this.generalFileOptions.clear();
+25 -4
View File
@@ -10,6 +10,12 @@ import { translations } from "../translations";
export function FileTransferModal( export function FileTransferModal(
fileTransferViewModel: FileTransferViewModel fileTransferViewModel: FileTransferViewModel
) { ) {
const OptionConverter: React.StateItemConverter<FileTransferOption> = (
fileOption: FileTransferOption
) => {
return FileOption(fileOption, fileTransferViewModel);
};
return ( return (
<div <div
class="modal" class="modal"
@@ -29,7 +35,7 @@ export function FileTransferModal(
class="flex-column gap content-margin-bottom" class="flex-column gap content-margin-bottom"
children:append={[ children:append={[
fileTransferViewModel.generalFileOptions, fileTransferViewModel.generalFileOptions,
FileOption, OptionConverter,
]} ]}
></div> ></div>
@@ -38,7 +44,7 @@ export function FileTransferModal(
class="flex-column gap" class="flex-column gap"
children:append={[ children:append={[
fileTransferViewModel.chatFileOptions, fileTransferViewModel.chatFileOptions,
FileOption, OptionConverter,
]} ]}
></div> ></div>
</main> </main>
@@ -62,9 +68,24 @@ export function FileTransferModal(
); );
} }
function FileOption(fileOption: FileTransferOption) { function FileOption(
fileOption: FileTransferOption,
fileTransferViewModel: FileTransferViewModel
) {
const isSelected = new React.State(false);
isSelected.subscribeSilent((isSelected) => {
if (isSelected == true) {
fileTransferViewModel.selectedPaths.add(fileOption.path);
} else {
fileTransferViewModel.selectedPaths.remove(fileOption.path);
}
});
function toggle() {
isSelected.value = !isSelected.value;
}
return ( return (
<button class="tile"> <button class="tile" toggle:selected={isSelected} on:click={toggle}>
<div> <div>
<b class="ellipsis">{fileOption.label}</b> <b class="ellipsis">{fileOption.label}</b>
<span class="secondary ellipsis"> <span class="secondary ellipsis">
@@ -19,6 +19,7 @@ export default class FileTransferViewModel {
generalFileOptions: React.ListState<FileTransferOption> = generalFileOptions: React.ListState<FileTransferOption> =
new React.ListState(); new React.ListState();
chatFileOptions: React.ListState<FileTransferOption> = new React.ListState(); chatFileOptions: React.ListState<FileTransferOption> = new React.ListState();
selectedPaths: React.ListState<string[]> = new React.ListState();
// methods // methods
getOptions = (): void => { getOptions = (): void => {