From f8ed893f79720d15661c6b8796405b442c7b6d1d Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Sat, 27 Jul 2024 19:40:16 +0200 Subject: [PATCH] allow selection of files to transfer --- dist/index.js | 23 ++++++++++++--- src/View/Modals/fileTransferModal.tsx | 29 ++++++++++++++++--- src/ViewModel/Global/fileTransferViewModel.ts | 1 + 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/dist/index.js b/dist/index.js index 043e0136..b14480f1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4440,6 +4440,9 @@ // src/View/Modals/fileTransferModal.tsx function FileTransferModal(fileTransferViewModel2) { + const OptionConverter = (fileOption) => { + return FileOption(fileOption, fileTransferViewModel2); + }; return /* @__PURE__ */ createElement( "div", { @@ -4452,7 +4455,7 @@ class: "flex-column gap content-margin-bottom", "children:append": [ fileTransferViewModel2.generalFileOptions, - FileOption + OptionConverter ] } ), /* @__PURE__ */ createElement("h3", null, translations.fileTransferModal.chatsHeadline), /* @__PURE__ */ createElement( @@ -4461,7 +4464,7 @@ class: "flex-column gap", "children:append": [ fileTransferViewModel2.chatFileOptions, - FileOption + OptionConverter ] } )), /* @__PURE__ */ createElement("div", { class: "flex-row width-100" }, /* @__PURE__ */ createElement( @@ -4482,8 +4485,19 @@ ))) ); } - function FileOption(fileOption) { - 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)))); + function FileOption(fileOption, fileTransferViewModel2) { + 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 @@ -4566,6 +4580,7 @@ isShowingTransferModal = new State(false); generalFileOptions = new ListState(); chatFileOptions = new ListState(); + selectedPaths = new ListState(); // methods getOptions = () => { this.generalFileOptions.clear(); diff --git a/src/View/Modals/fileTransferModal.tsx b/src/View/Modals/fileTransferModal.tsx index 5aec8b36..61d69ca2 100644 --- a/src/View/Modals/fileTransferModal.tsx +++ b/src/View/Modals/fileTransferModal.tsx @@ -10,6 +10,12 @@ import { translations } from "../translations"; export function FileTransferModal( fileTransferViewModel: FileTransferViewModel ) { + const OptionConverter: React.StateItemConverter = ( + fileOption: FileTransferOption + ) => { + return FileOption(fileOption, fileTransferViewModel); + }; + return ( @@ -38,7 +44,7 @@ export function FileTransferModal( class="flex-column gap" children:append={[ fileTransferViewModel.chatFileOptions, - FileOption, + OptionConverter, ]} > @@ -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 ( -