mirror of
https://codeberg.org/PLG-Development/PLG-MuDiCS
synced 2026-07-06 00:47:09 +00:00
fix(frontend): more reactive db problems
Co-Authored-By: E44 <129310925+programmer-44@users.noreply.github.com>
This commit is contained in:
@@ -19,7 +19,7 @@
|
|||||||
import { fade } from 'svelte/transition';
|
import { fade } from 'svelte/transition';
|
||||||
import type { MenuOption } from '$lib/ts/types';
|
import type { MenuOption } from '$lib/ts/types';
|
||||||
import { selected_display_ids } from '$lib/ts/stores/select';
|
import { selected_display_ids } from '$lib/ts/stores/select';
|
||||||
import { liveQuery } from 'dexie';
|
import { liveQuery, type Observable } from 'dexie';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
display_group_id,
|
display_group_id,
|
||||||
@@ -31,17 +31,16 @@
|
|||||||
close_pinned_display: () => void;
|
close_pinned_display: () => void;
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let all_selected = liveQuery(() =>
|
let all_selected: Observable<boolean> | undefined = $state();
|
||||||
all_displays_of_group_selected(display_group_id, $selected_display_ids)
|
$effect(() => {
|
||||||
);
|
const sdi = $selected_display_ids;
|
||||||
|
all_selected = liveQuery(() => all_displays_of_group_selected(display_group_id, sdi));
|
||||||
|
});
|
||||||
let display_ids_in_group = liveQuery(() => get_display_ids_in_group(display_group_id));
|
let display_ids_in_group = liveQuery(() => get_display_ids_in_group(display_group_id));
|
||||||
let hovering_selectable = $state(false);
|
let hovering_selectable = $state(false);
|
||||||
|
|
||||||
async function select_all_of_this_group() {
|
async function select_all_of_this_group() {
|
||||||
const new_value = !(await all_displays_of_group_selected(
|
const new_value = !($all_selected || false);
|
||||||
display_group_id,
|
|
||||||
$selected_display_ids
|
|
||||||
));
|
|
||||||
await select_all_of_group(display_group_id, new_value);
|
await select_all_of_group(display_group_id, new_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,13 +39,18 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let displays_scroll_box: HTMLElement;
|
let displays_scroll_box: HTMLElement;
|
||||||
let pinned_display: Observable<Display | null> = liveQuery(() =>
|
let pinned_display: Observable<Display | null> | undefined = $state();
|
||||||
get_display_by_id($pinned_display_id || '')
|
$effect(() => {
|
||||||
);
|
const pdi = $pinned_display_id;
|
||||||
|
pinned_display = liveQuery(() => get_display_by_id(pdi || ''));
|
||||||
|
});
|
||||||
let display_groups = liveQuery(() => get_display_groups());
|
let display_groups = liveQuery(() => get_display_groups());
|
||||||
let all_groups_selected = liveQuery(() =>
|
let all_groups_selected: Observable<boolean> | undefined = $state();
|
||||||
all_selected($display_groups || [], $selected_display_ids)
|
$effect(() => {
|
||||||
);
|
const d = $display_groups;
|
||||||
|
const sdi = $selected_display_ids;
|
||||||
|
all_groups_selected = liveQuery(() => all_selected(d || [], sdi));
|
||||||
|
});
|
||||||
|
|
||||||
let last_pinned_pane_size: number = 45;
|
let last_pinned_pane_size: number = 45;
|
||||||
let pinned_pane_size: number = $state(last_pinned_pane_size);
|
let pinned_pane_size: number = $state(last_pinned_pane_size);
|
||||||
@@ -75,11 +80,8 @@
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
async function select_all(
|
async function select_all(current_displays: DisplayGroup[]) {
|
||||||
current_displays: DisplayGroup[],
|
const new_value = !all_groups_selected;
|
||||||
current_selected_display_ids: string[]
|
|
||||||
) {
|
|
||||||
const new_value = !(await all_selected(current_displays, current_selected_display_ids));
|
|
||||||
for (const display_group of current_displays) {
|
for (const display_group of current_displays) {
|
||||||
await select_all_of_group(display_group.id, new_value);
|
await select_all_of_group(display_group.id, new_value);
|
||||||
}
|
}
|
||||||
@@ -211,7 +213,7 @@
|
|||||||
text: true
|
text: true
|
||||||
}
|
}
|
||||||
)}"
|
)}"
|
||||||
onclick={async () => await select_all($display_groups || [], $selected_display_ids)}
|
onclick={async () => await select_all($display_groups || [])}
|
||||||
>
|
>
|
||||||
<span>{$all_groups_selected || false ? 'Alle abwählen' : 'Alle auswählen'}</span>
|
<span>{$all_groups_selected || false ? 'Alle abwählen' : 'Alle auswählen'}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -38,16 +38,17 @@
|
|||||||
let current_valid: boolean = $state(false);
|
let current_valid: boolean = $state(false);
|
||||||
|
|
||||||
let display_names_where_path_does_not_exist: string[] = $state([]);
|
let display_names_where_path_does_not_exist: string[] = $state([]);
|
||||||
let selected_files = liveQuery(() => get_selected_files($selected_display_ids));
|
let selected_files: Observable<Inode[]> | undefined = $state();
|
||||||
|
|
||||||
let current_folder_elements: Observable<Inode[]> | undefined = $state();
|
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
const path = $current_file_path, display_ids = $selected_display_ids;
|
const s = $selected_file_ids;
|
||||||
|
selected_files = liveQuery(() => get_selected_files(s));
|
||||||
|
});
|
||||||
|
let current_folder_elements: Observable<Inode[]> | undefined = $state();
|
||||||
|
$effect(() => {
|
||||||
|
const path = $current_file_path,
|
||||||
|
display_ids = $selected_display_ids;
|
||||||
current_folder_elements = liveQuery(() => get_current_folder_elements(path, display_ids));
|
current_folder_elements = liveQuery(() => get_current_folder_elements(path, display_ids));
|
||||||
})
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let popup_content: PopupContent = $state({
|
let popup_content: PopupContent = $state({
|
||||||
open: false,
|
open: false,
|
||||||
@@ -163,11 +164,7 @@
|
|||||||
if (trimmed_input.length === 0 || trimmed_input.length > 50)
|
if (trimmed_input.length === 0 || trimmed_input.length > 50)
|
||||||
return [false, 'Ungültige Länge'];
|
return [false, 'Ungültige Länge'];
|
||||||
if (!is_valid_name(trimmed_input)) return [false, 'Name enthält ungültige Zeichen'];
|
if (!is_valid_name(trimmed_input)) return [false, 'Name enthält ungültige Zeichen'];
|
||||||
if (
|
if (($current_folder_elements ?? []).some((e) => e.name === trimmed_input))
|
||||||
(await get_current_folder_elements($current_file_path, $selected_display_ids)).some(
|
|
||||||
(e) => e.name === trimmed_input
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return [false, 'Name bereits verwendet'];
|
return [false, 'Name bereits verwendet'];
|
||||||
return [true, 'Gültiger Name'];
|
return [true, 'Gültiger Name'];
|
||||||
}}
|
}}
|
||||||
@@ -194,8 +191,8 @@
|
|||||||
return [false, 'Ungültige Länge'];
|
return [false, 'Ungültige Länge'];
|
||||||
if (!is_valid_name(trimmed_input)) return [false, 'Name enthält ungültige Zeichen'];
|
if (!is_valid_name(trimmed_input)) return [false, 'Name enthält ungültige Zeichen'];
|
||||||
if (
|
if (
|
||||||
(await get_current_folder_elements($current_file_path, $selected_display_ids)).some(
|
($current_folder_elements ?? []).some(
|
||||||
async (e) => e.name === trimmed_input && get_file_primary_key(e) !== $selected_file_ids[0]
|
(e) => e.name === trimmed_input && get_file_primary_key(e) !== $selected_file_ids[0]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return [false, 'Name bereits verwendet'];
|
return [false, 'Name bereits verwendet'];
|
||||||
|
|||||||
@@ -24,13 +24,17 @@
|
|||||||
import { open_file } from '$lib/ts/api_handler';
|
import { open_file } from '$lib/ts/api_handler';
|
||||||
import { run_on_all_selected_displays } from '$lib/ts/stores/displays';
|
import { run_on_all_selected_displays } from '$lib/ts/stores/displays';
|
||||||
import { get_thumbnail_url } from '$lib/ts/stores/thumbnails';
|
import { get_thumbnail_url } from '$lib/ts/stores/thumbnails';
|
||||||
import { liveQuery } from 'dexie';
|
import { liveQuery, type Observable } from 'dexie';
|
||||||
|
|
||||||
let { file, not_interactable = false }: { file: Inode; not_interactable?: boolean } = $props();
|
let { file, not_interactable = false }: { file: Inode; not_interactable?: boolean } = $props();
|
||||||
|
|
||||||
let missing_colliding_displays_ids = liveQuery(() =>
|
let missing_colliding_displays_ids:
|
||||||
get_missing_colliding_display_ids(file, $selected_display_ids)
|
| Observable<{ missing: string[]; colliding: string[] }>
|
||||||
);
|
| undefined = $state();
|
||||||
|
$effect(() => {
|
||||||
|
const s = $selected_file_ids;
|
||||||
|
missing_colliding_displays_ids = liveQuery(() => get_missing_colliding_display_ids(file, s));
|
||||||
|
});
|
||||||
let thumbnail_url = liveQuery(() => get_thumbnail_url(file));
|
let thumbnail_url = liveQuery(() => get_thumbnail_url(file));
|
||||||
|
|
||||||
const is_folder = file.type === 'inode/directory';
|
const is_folder = file.type === 'inode/directory';
|
||||||
|
|||||||
Reference in New Issue
Block a user