Handy/src/components/settings/RecordingRetentionPeriod.tsx
CJ Pais f87051f464
Add Internationalization Support (#437)
* basic i18n

* tweak

* translate app

* add linting to make sure we have translations

* run linter on pr

* format
2025-12-12 11:16:54 +07:00

64 lines
2.2 KiB
TypeScript

import React from "react";
import { useTranslation } from "react-i18next";
import { Dropdown } from "../ui/Dropdown";
import { SettingContainer } from "../ui/SettingContainer";
import { useSettings } from "../../hooks/useSettings";
import { RecordingRetentionPeriod } from "@/bindings";
interface RecordingRetentionPeriodProps {
descriptionMode?: "inline" | "tooltip";
grouped?: boolean;
}
export const RecordingRetentionPeriodSelector: React.FC<RecordingRetentionPeriodProps> =
React.memo(({ descriptionMode = "tooltip", grouped = false }) => {
const { t } = useTranslation();
const { getSetting, updateSetting, isUpdating } = useSettings();
const selectedRetentionPeriod =
getSetting("recording_retention_period") || "never";
const historyLimit = getSetting("history_limit") || 5;
const handleRetentionPeriodSelect = async (period: string) => {
await updateSetting(
"recording_retention_period",
period as RecordingRetentionPeriod,
);
};
const retentionOptions = [
{ value: "never", label: t("settings.debug.recordingRetention.never") },
{
value: "preserve_limit",
label: t("settings.debug.recordingRetention.preserveLimit", {
count: Number(historyLimit),
}),
},
{ value: "days3", label: t("settings.debug.recordingRetention.days3") },
{ value: "weeks2", label: t("settings.debug.recordingRetention.weeks2") },
{
value: "months3",
label: t("settings.debug.recordingRetention.months3"),
},
];
return (
<SettingContainer
title={t("settings.debug.recordingRetention.title")}
description={t("settings.debug.recordingRetention.description")}
descriptionMode={descriptionMode}
grouped={grouped}
>
<Dropdown
options={retentionOptions}
selectedValue={selectedRetentionPeriod}
onSelect={handleRetentionPeriodSelect}
placeholder={t("settings.debug.recordingRetention.placeholder")}
disabled={isUpdating("recording_retention_period")}
/>
</SettingContainer>
);
});
RecordingRetentionPeriodSelector.displayName =
"RecordingRetentionPeriodSelector";