diff --git a/control/frontend/src/routes/FileView.svelte b/control/frontend/src/routes/FileView.svelte index 6665f48..b67d0a9 100755 --- a/control/frontend/src/routes/FileView.svelte +++ b/control/frontend/src/routes/FileView.svelte @@ -11,7 +11,12 @@ ZoomIn, ZoomOut } from 'lucide-svelte'; - import { change_height, current_height, next_height_step_size } from '$lib/ts/stores/ui_behavior'; + import { + change_height, + current_height, + get_selectable_color_classes, + next_height_step_size + } from '$lib/ts/stores/ui_behavior'; import Button from '$lib/components/Button.svelte'; import PathBar from './PathBar.svelte'; import { select, selected_display_ids, selected_file_ids } from '$lib/ts/stores/select'; @@ -50,6 +55,16 @@ const s = $selected_file_ids; selected_files = liveQuery(() => get_selected_files(s)); }); + let all_files_selected: boolean = $state(false); + $effect(() => { + const fe = $current_folder_elements; + const sfe_id = $selected_file_ids; + if (fe && sfe_id && fe.length !== 0) { + all_files_selected = + fe.length === sfe_id.length && + !fe.find((inode) => !sfe_id.includes(get_file_primary_key(inode))); + } + }); let current_folder_elements: Observable | undefined = $state(); $effect(() => { const path = $current_file_path, @@ -147,6 +162,18 @@ }; }; + async function toggle_all_selected_files(current_files: Inode[]) { + let action: 'select' | 'deselect'; + if (all_files_selected === false) { + action = 'select'; + } else { + action = 'deselect'; + } + for (const file of current_files) { + await select(selected_file_ids, get_file_primary_key(file), action); + } + } + async function sync_selected_files( current_selected_file_ids: string[], selected_display_ids: string[], @@ -291,29 +318,46 @@ Dateien Anzeigen und Verwalten -
- - + {all_files_selected ? 'Alle Abwählen' : 'Alle Auswählen'} + +
+ + +
@@ -389,34 +433,36 @@
- -
- -
- {#if $selected_online_display_ids.length === 0} - - Es sind keine Bildschirme ausgewählt. + +
+ +
+ {#if $selected_online_display_ids.length === 0} + + Es sind keine Bildschirme ausgewählt. + + {:else} + {#each $current_folder_elements ?? [] as folder_element (get_file_primary_key(folder_element))} +
+ +
+ {/each} + {#if ($current_folder_elements ?? []).length === 0} + + Es existieren keine Dateien auf {$selected_display_ids.length === 1 + ? 'dem ausgewähltem Bildchirm' + : 'den ausgewählten Bildschirmen'} im aktuellen Ordner. Klicke auf um Datei(en) hochzuladen. - {:else} - {#each $current_folder_elements ?? [] as folder_element (get_file_primary_key(folder_element))} -
- -
- {/each} - {#if ($current_folder_elements ?? []).length === 0} - - Es existieren keine Dateien auf {$selected_display_ids.length === 1 - ? 'dem ausgewähltem Bildchirm' - : 'den ausgewählten Bildschirmen'} im aktuellen Ordner. Klicke auf um Datei(en) hochzuladen. - - {/if} {/if} -
+ {/if}
+