diff --git a/src/components/Error/ErrorSnackbar.tsx b/src/components/Error/ErrorSnackbar.tsx index d67a7f6..332f3dd 100644 --- a/src/components/Error/ErrorSnackbar.tsx +++ b/src/components/Error/ErrorSnackbar.tsx @@ -20,6 +20,36 @@ export function ErrorSnackbar({ dispatch(type === "calendar" ? calendarClearError() : userClearError()); }; + const getErrorMessage = () => { + if (!error) return t("error.unknown"); + + // Check if error message is a translation key with params + // Format: TRANSLATION:key|param1=value1|param2=value2 + if (error.startsWith("TRANSLATION:")) { + const parts = error.substring(12).split("|"); + const translationKey = parts[0]; + const params: Record = {}; + + for (let i = 1; i < parts.length; i++) { + const equalIndex = parts[i].indexOf("="); + if (equalIndex === -1) continue; + const key = parts[i].substring(0, equalIndex); + const value = parts[i].substring(equalIndex + 1); + if (key && value) { + try { + params[key] = decodeURIComponent(value); + } catch { + params[key] = value; + } + } + } + + return t(translationKey, params); + } + + return error; + }; + return ( } > - {error || t("error.unknown")} + {getErrorMessage()} ); diff --git a/src/features/Calendars/CalendarSlice.ts b/src/features/Calendars/CalendarSlice.ts index 6af7177..fc9c75e 100644 --- a/src/features/Calendars/CalendarSlice.ts +++ b/src/features/Calendars/CalendarSlice.ts @@ -170,7 +170,16 @@ export const getTempCalendarsListAsync = createAsyncThunk< tempUser.openpaasId ?? "", "sharedPublic=true&" )) as Record; - const rawCalendars = calendars._embedded["dav:calendar"]; + + const rawCalendars = calendars._embedded?.["dav:calendar"]; + if (!rawCalendars || rawCalendars.length === 0) { + const userName = tempUser.displayName || tempUser.email || "User"; + // Format: TRANSLATION:key|param1=value1 + const encodedName = encodeURIComponent(userName); + throw new Error( + `TRANSLATION:calendar.userDoesNotHavePublicCalendars|name=${encodedName}` + ); + } for (const cal of rawCalendars) { const name = cal["dav:name"]; diff --git a/src/locales/en.json b/src/locales/en.json index c3caa2a..138be09 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -18,6 +18,7 @@ "browseOtherCalendars": "Browse other calendars", "noPublicCalendarsFor": "No publicly available calendars for %{name}", "noMoreCalendarsFor": "No more calendars for %{name}", + "userDoesNotHavePublicCalendars": "%{name} does not have public calendars", "delete": { "title": "Remove %{name}?", "personalWarning": "You will lose all events in this calendar.", diff --git a/src/locales/fr.json b/src/locales/fr.json index 6ac2ead..83140a0 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -18,6 +18,7 @@ "browseOtherCalendars": "Parcourir d'autres calendriers", "noPublicCalendarsFor": "Aucun calendrier public disponible pour %{name}", "noMoreCalendarsFor": "Plus de calendriers disponibles pour %{name}", + "userDoesNotHavePublicCalendars": "%{name} n'a pas de calendriers publics", "delete": { "title": "Supprimer %{name} ?", "personalWarning": "Vous allez perdre tous les événements de ce calendrier.", diff --git a/src/locales/ru.json b/src/locales/ru.json index a3fcdd2..ab5826f 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -18,6 +18,7 @@ "browseOtherCalendars": "Просмотреть другие календари", "noPublicCalendarsFor": "Нет общедоступных календарей для %{name}", "noMoreCalendarsFor": "Других календарей для %{name} нет", + "userDoesNotHavePublicCalendars": "%{name} не имеет общедоступных календарей", "delete": { "title": "Удалить %{name}?", "personalWarning": "Вы потеряете все события в этом календаре.", diff --git a/src/locales/vi.json b/src/locales/vi.json index 9f8021c..850e10b 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -18,6 +18,7 @@ "browseOtherCalendars": "Xem các lịch khác", "noPublicCalendarsFor": "Không có lịch công khai cho %{name}", "noMoreCalendarsFor": "Không còn lịch nào cho %{name}", + "userDoesNotHavePublicCalendars": "%{name} không có lịch công khai", "delete": { "title": "Xóa %{name}?", "personalWarning": "Bạn sẽ mất tất cả sự kiện trong lịch này.",