diff --git a/src/components/admin/studio/studio-client.tsx b/src/components/admin/studio/studio-client.tsx index 32d23fe60e..ebb2c21a5c 100644 --- a/src/components/admin/studio/studio-client.tsx +++ b/src/components/admin/studio/studio-client.tsx @@ -230,6 +230,36 @@ export function StudioClient({ } }; + const buildDutchLanguage = async () => { + setBuildingLanguages(true); + try { + const res = await adminFetch( + "/api/admin/import/furni?action=build-languages", + ); + const data = (await res.json()) as { + languages?: Array<{ lang: string; ok: boolean }>; + error?: string; + }; + if (res.ok) { + const langs = data.languages ?? []; + const nl = langs.find((l) => l.lang === "nl"); + const okCount = nl?.ok ? 1 : 0; + toast.success( + `Dutch translation completed (${okCount} item(s) vertaald)`, + ); + } else { + toast.error(data.error ?? "Dutch translation failed"); + } + } catch (err) { + toast.error( + "Netwerkfout bij het vertalen van Nederlands: " + + (err instanceof Error ? err.message : String(err)), + ); + } finally { + setBuildingLanguages(false); + } + }; + const toggleLang = (lang: string) => setTranslateLangs((prev) => prev.includes(lang) ? prev.filter((l) => l !== lang) : [...prev, lang], @@ -818,9 +848,20 @@ export function StudioClient({ } } catch (err) { if ((err as Error).name === "AbortError") { - toast.info("Batch import cancelled"); + toast.info("Batch import geannuleerd door gebruiker"); + } else if ((err as Error).name === "TimeoutError") { + toast.error( + "Import tijdelijkstop gedurende te lange tijd – probeer het opnieuw of verlaag de concurrentie", + ); + } else if (err instanceof TypeError && err.message?.includes("fetch")) { + toast.error( + "Netwerkfout tijdens upload – controleer je internetverbinding en probeer opnieuw", + ); } else { - toast.error("Connection lost during batch import"); + toast.error( + "Onverwende fout tijdens import: " + + (err instanceof Error ? err.message : String(err)), + ); } } finally { batchAbortRef.current = null;