fix: cleaner and better converter select logic

only shows converters compatible with .from and .to now as well
This commit is contained in:
Maya 2026-03-10 13:31:06 +03:00
parent da580353ca
commit 55b67ec046
No known key found for this signature in database
1 changed files with 18 additions and 27 deletions

View File

@ -17,30 +17,20 @@
let { file, onclose }: Props = $props(); let { file, onclose }: Props = $props();
const getCurrentConverter = ( const getAvailableConverters = (vertFile: VertFile) => {
vertFile: VertFile,
converterOverride?: string,
) => {
const converterName =
converterOverride || vertFile.conversionSettings.converter;
const availableConverters = vertFile.isZip()
? vertFile.converters
: vertFile.findConverters();
if (converterName) {
const selectedConverter =
availableConverters.find((c) => c.name === converterName) ||
vertFile.converters.find((c) => c.name === converterName);
if (selectedConverter) return selectedConverter;
}
return vertFile.isZip() return vertFile.isZip()
? vertFile.converters[0] ? vertFile.converters
: vertFile.findConverters()[0]; : vertFile.findConverters([vertFile.from, vertFile.to]);
};
const getValidConverter = (vertFile: VertFile, converterName?: string) => {
const available = getAvailableConverters(vertFile);
const name = converterName || vertFile.conversionSettings.converter;
return available.find((c) => c.name === name) || available[0];
}; };
let settings = $derived<ConversionSettings>({ let settings = $derived<ConversionSettings>({
converter: file ? getCurrentConverter(file)?.name : undefined, converter: file ? getValidConverter(file)?.name : undefined,
}); });
const handleSettingChange = (key: string, value: any) => { const handleSettingChange = (key: string, value: any) => {
@ -50,7 +40,7 @@
const applySettings = async (converterName: string) => { const applySettings = async (converterName: string) => {
if (!file) return; if (!file) return;
const converter = getCurrentConverter(file, converterName); const converter = getValidConverter(file, converterName);
if (!converter) { if (!converter) {
log( log(
["settings", "modal"], ["settings", "modal"],
@ -93,14 +83,15 @@
> >
<div class="flex flex-col gap-8 max-h-[calc(100vh-225px)] overflow-y-auto"> <div class="flex flex-col gap-8 max-h-[calc(100vh-225px)] overflow-y-auto">
{#if file} {#if file}
{@const currentConverter = getCurrentConverter(file)} {@const availableConverters = getAvailableConverters(file)}
{@const availableConverters = file.isZip() {@const validConverter = getValidConverter(
? file.converters file,
: file.findConverters()} settings.converter,
)}
<p class="text-base"> <p class="text-base">
{@html sanitize( {@html sanitize(
m["convert.settings.description"]({ m["convert.settings.description"]({
converter: currentConverter?.name || "unknown", converter: validConverter?.name || "unknown",
filename: file.name, filename: file.name,
}), }),
)} )}
@ -115,7 +106,7 @@
value: converter.name, value: converter.name,
label: converter.name, label: converter.name,
}))} }))}
selected={settings.converter || currentConverter?.name} selected={validConverter?.name}
settingsStyle settingsStyle
onselect={(value) => { onselect={(value) => {
settings = { converter: value }; // TODO: dont think i need to add the converter here settings = { converter: value }; // TODO: dont think i need to add the converter here