// Copyright (c) 2020-2021 Drew Lemmy
// This file is part of KristWeb 2 under GPL-3.0.
// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt
import { useState } from "react";
import { Input, InputNumber, Button } from "antd";
import { useTranslation } from "react-i18next";
import { SettingName, setIntegerSetting, useIntegerSetting, validateIntegerSetting } from "@utils/settings";
import { SettingDescription } from "./SettingDescription";
interface Props {
setting: SettingName<number>;
title?: string;
titleKey?: string;
description?: string;
descriptionKey?: string;
}
export function SettingInteger({
setting,
title, titleKey,
description, descriptionKey
}: Props): JSX.Element {
const settingValue = useIntegerSetting(setting);
const [value, setValue] = useState<string | number>(settingValue);
const { t } = useTranslation();
const numVal = value ? Number(value) : undefined;
const isValid = numVal !== undefined
&& !isNaN(numVal)
&& validateIntegerSetting(setting, numVal);
function onSave() {
if (!isValid) return;
setIntegerSetting(setting, numVal!);
}
return <div className="menu-item-setting menu-item-setting-integer">
<Input.Group compact>
{/* Number input */}
<InputNumber
value={value}
onChange={setValue}
onPressEnter={onSave}
/>
{/* Save button */}
<Button
type="primary"
disabled={settingValue === Number(value) || !isValid}
onClick={onSave}
>
{t("settings.settingIntegerSave")}
</Button>
</Input.Group>
{titleKey ? t(titleKey) : title}
<SettingDescription description={description} descriptionKey={descriptionKey} />
</div>;
}