2023-09-24 12:33:12 +00:00
|
|
|
import { unixNowMs } from "@snort/shared";
|
|
|
|
import { useState } from "react";
|
2023-10-17 13:02:59 +00:00
|
|
|
import { FormattedMessage } from "react-intl";
|
2023-09-24 12:33:12 +00:00
|
|
|
|
2024-01-04 17:01:18 +00:00
|
|
|
import useLogin from "@/Hooks/useLogin";
|
|
|
|
import { appendDedupe } from "@/Utils";
|
|
|
|
import { SnortAppData, updateAppData } from "@/Utils/Login";
|
|
|
|
|
2023-11-28 18:19:11 +00:00
|
|
|
export default function ModerationSettingsPage() {
|
2023-09-24 12:36:51 +00:00
|
|
|
const login = useLogin();
|
|
|
|
const [muteWord, setMuteWord] = useState("");
|
2023-11-28 18:19:11 +00:00
|
|
|
const appData = login.appData.item;
|
2023-09-24 12:33:12 +00:00
|
|
|
|
2023-09-24 12:36:51 +00:00
|
|
|
function addMutedWord() {
|
2023-11-13 16:51:29 +00:00
|
|
|
updateAppData(login.id, ad => ({
|
2023-09-24 12:36:51 +00:00
|
|
|
item: {
|
2023-11-13 16:51:29 +00:00
|
|
|
...ad,
|
2023-11-28 18:19:11 +00:00
|
|
|
mutedWords: appendDedupe(appData.mutedWords, [muteWord]),
|
2023-09-24 12:36:51 +00:00
|
|
|
},
|
2023-11-13 16:51:29 +00:00
|
|
|
timestamp: unixNowMs(),
|
|
|
|
}));
|
2023-09-24 12:36:51 +00:00
|
|
|
setMuteWord("");
|
|
|
|
}
|
2023-10-17 13:02:59 +00:00
|
|
|
|
2023-11-28 18:19:11 +00:00
|
|
|
const handleToggle = (setting: keyof SnortAppData) => {
|
|
|
|
updateAppData(login.id, ad => ({
|
|
|
|
item: {
|
|
|
|
...ad,
|
|
|
|
[setting]: !appData[setting],
|
|
|
|
},
|
|
|
|
timestamp: unixNowMs(),
|
|
|
|
}));
|
|
|
|
};
|
|
|
|
|
2023-10-17 13:02:59 +00:00
|
|
|
function removeMutedWord(word: string) {
|
2023-11-13 16:51:29 +00:00
|
|
|
updateAppData(login.id, ad => ({
|
|
|
|
item: {
|
|
|
|
...ad,
|
2023-11-28 18:19:11 +00:00
|
|
|
mutedWords: appData.mutedWords.filter(a => a !== word),
|
2023-10-17 13:02:59 +00:00
|
|
|
},
|
2023-11-13 16:51:29 +00:00
|
|
|
timestamp: unixNowMs(),
|
|
|
|
}));
|
2023-10-17 13:02:59 +00:00
|
|
|
setMuteWord("");
|
|
|
|
}
|
|
|
|
|
2023-09-24 12:36:51 +00:00
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<h2>
|
2023-11-28 18:19:11 +00:00
|
|
|
<FormattedMessage defaultMessage="Moderation" id="wofVHy" />
|
2023-09-24 12:36:51 +00:00
|
|
|
</h2>
|
2023-11-28 18:19:11 +00:00
|
|
|
|
|
|
|
<div className="py-4 flex flex-col gap-2">
|
|
|
|
<div className="flex items-center mb-2">
|
|
|
|
<input
|
|
|
|
type="checkbox"
|
|
|
|
checked={appData.showContentWarningPosts}
|
|
|
|
onChange={() => handleToggle("showContentWarningPosts")}
|
|
|
|
className="mr-2"
|
|
|
|
id="showContentWarningPosts"
|
|
|
|
/>
|
|
|
|
<label htmlFor="showContentWarningPosts">
|
|
|
|
<FormattedMessage defaultMessage="Show posts that have a content warning tag" id="fQN+tq" />
|
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3>
|
|
|
|
<FormattedMessage defaultMessage="Muted Words" id="AN0Z7Q" />
|
|
|
|
</h3>
|
2023-10-17 13:02:59 +00:00
|
|
|
<div className="flex flex-col g12">
|
2023-09-24 12:36:51 +00:00
|
|
|
<div className="flex g8">
|
|
|
|
<input
|
|
|
|
type="text"
|
|
|
|
placeholder="eg. crypto"
|
|
|
|
className="w-max"
|
|
|
|
value={muteWord}
|
2023-10-17 13:02:59 +00:00
|
|
|
onChange={e => setMuteWord(e.target.value.toLowerCase())}
|
2023-09-24 12:36:51 +00:00
|
|
|
/>
|
|
|
|
<button type="button" onClick={addMutedWord}>
|
2023-11-20 11:35:51 +00:00
|
|
|
<FormattedMessage defaultMessage="Add" id="2/2yg+" />
|
2023-09-24 12:36:51 +00:00
|
|
|
</button>
|
2023-09-24 12:33:12 +00:00
|
|
|
</div>
|
2023-11-28 18:19:11 +00:00
|
|
|
{appData.mutedWords.map(v => (
|
2024-01-04 09:54:58 +00:00
|
|
|
<div key={v} className="p br b flex items-center justify-between">
|
2023-09-24 12:36:51 +00:00
|
|
|
<div>{v}</div>
|
2023-10-17 13:02:59 +00:00
|
|
|
<button type="button" onClick={() => removeMutedWord(v)}>
|
2023-11-20 11:35:51 +00:00
|
|
|
<FormattedMessage defaultMessage="Delete" id="K3r6DQ" />
|
2023-09-24 12:36:51 +00:00
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
))}
|
|
|
|
</div>
|
2023-09-24 12:33:12 +00:00
|
|
|
</>
|
2023-09-24 12:36:51 +00:00
|
|
|
);
|
|
|
|
}
|