Files
ColdBreeze-chat-web/src/common/component/AutoDeleteMessages.tsx
T
2022-12-27 17:14:29 +08:00

67 lines
2.4 KiB
TypeScript

import { useState, useEffect } from 'react';
import { toast } from 'react-hot-toast';
import { useTranslation } from "react-i18next";
import { useUpdateAutoDeleteMsgMutation } from "../../app/services/user";
import { useAppSelector } from '../../app/store';
import SaveTip from "./SaveTip";
import StyledRadio from "./styled/Radio";
type Props = {
id: number,
type?: "user" | "channel",
// expires_in?: number
}
const AutoDeleteMessages = ({ id, type = "channel" }: Props) => {
const setting = useAppSelector(store => type == "channel" ?
store.footprint.autoDeleteMsgChannels.find(item => item.gid == id)
:
store.footprint.autoDeleteMsgUsers.find(item => item.uid == id));
const [updateSetting, { isSuccess }] = useUpdateAutoDeleteMsgMutation();
const [value, setValue] = useState<number>(setting?.expires_in ?? 0);
const { t } = useTranslation("setting", { keyPrefix: "auto_delete_msg" });
const options = [
{ title: t("off"), value: 0 },
{ title: t("30_seconds"), value: 30 },
{ title: t("10_min"), value: 10 * 60 },
{ title: t("1_hour"), value: 60 * 60 },
{ title: t("1_day"), value: 24 * 60 * 60 },
{ title: t("1_week"), value: 7 * 24 * 60 * 60 },
];
const handleSave = () => {
const dto = type == "user" ? { users: [{ uid: id, expires_in: value }] } : { groups: [{ gid: id, expires_in: value }] };
updateSetting(dto);
};
const handleReset = () => {
setValue(setting?.expires_in ?? 0);
};
const handleChange = (val: number) => {
setValue(val);
};
useEffect(() => {
if (isSuccess) {
toast.success("Update Successfully!");
}
}, [isSuccess]);
const originalVal = setting?.expires_in ?? 0;
return (
<section className="max-w-[512px] h-full relative">
<div className="text-sm">
<h2 >{t("title")}</h2>
<p className="text-gray-500">{t("desc")}</p>
</div>
<div className="mt-4">
<StyledRadio
options={options.map(({ title }) => title)}
values={options.map(({ value }) => value)}
value={value || 0}
onChange={handleChange}
/>
</div>
{originalVal !== value && <SaveTip saveHandler={handleSave} resetHandler={handleReset} />}
</section>
);
};
export default AutoDeleteMessages;