show translated errors for motion search limits

This commit is contained in:
Josh Hawkins
2026-10-18 12:14:10 -05:00
parent f850269620
commit 535650092e
2 changed files with 28 additions and 0 deletions
@@ -56,6 +56,9 @@
"noROI": "Please draw a region of interest",
"noTimeRange": "Please select a time range",
"invalidTimeRange": "End time must be after start time",
"timeRangeTooLong": "Time range must be {{hours}} hours or less",
"alreadyRunning": "You already have a motion search running. Wait for it to finish or cancel it.",
"tooManySearches": "Too many motion searches are running. Try again when one finishes.",
"searchFailed": "Search failed: {{message}}",
"polygonTooSmall": "Polygon must have at least 3 points",
"unknown": "Unknown error"
@@ -90,6 +90,7 @@ type MotionSearchViewProps = {
};
const DEFAULT_EXPORT_WINDOW_SECONDS = 60;
const MAX_SEARCH_RANGE_HOURS = 48;
const NO_REVIEW_EVENTS: ReviewSegment[] = [];
export default function MotionSearchView({
@@ -860,6 +861,16 @@ export default function MotionSearchView({
return;
}
if (
searchRange.before - searchRange.after >
MAX_SEARCH_RANGE_HOURS * 3600
) {
toast.error(
t("errors.timeRangeTooLong", { hours: MAX_SEARCH_RANGE_HOURS }),
);
return;
}
setIsSearching(true);
setSearchResults([]);
setHasSearched(true);
@@ -892,6 +903,20 @@ export default function MotionSearchView({
setIsSearching(false);
}
} catch (error) {
const status = axios.isAxiosError(error)
? error.response?.status
: undefined;
if (status === 409 || status === 429) {
toast.error(
t(
status === 409 ? "errors.alreadyRunning" : "errors.tooManySearches",
),
);
setIsSearching(false);
return;
}
let errorMessage = t("errors.unknown");
if (axios.isAxiosError<{ message?: string; detail?: string }>(error)) {