@@ -81,15 +82,10 @@ export function Moderation() {
.filter(a => a.length > 1),
);
if (words.length > 0) {
- updateAppData(id, ad => {
- return {
- item: {
- ...ad,
- mutedWords: appendDedupe(ad.mutedWords, words),
- },
- timestamp: unixNowMs(),
- };
- });
+ updateAppData(id, system, ad => ({
+ ...ad,
+ mutedWords: appendDedupe(ad.mutedWords, words),
+ }));
}
navigate("/");
}}>
diff --git a/packages/app/src/Pages/settings/Moderation.tsx b/packages/app/src/Pages/settings/Moderation.tsx
index b1c2578e..29f1f018 100644
--- a/packages/app/src/Pages/settings/Moderation.tsx
+++ b/packages/app/src/Pages/settings/Moderation.tsx
@@ -1,7 +1,7 @@
-import { unixNowMs } from "@snort/shared";
import { useState } from "react";
import { FormattedMessage } from "react-intl";
+import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import { appendDedupe } from "@/Utils";
import { SnortAppData, updateAppData } from "@/Utils/Login";
@@ -9,36 +9,28 @@ import { SnortAppData, updateAppData } from "@/Utils/Login";
export default function ModerationSettingsPage() {
const login = useLogin();
const [muteWord, setMuteWord] = useState("");
- const appData = login.appData.item;
+ const appData = login.appData.json;
+ const { system } = useEventPublisher();
function addMutedWord() {
- updateAppData(login.id, ad => ({
- item: {
- ...ad,
- mutedWords: appendDedupe(appData.mutedWords, [muteWord]),
- },
- timestamp: unixNowMs(),
+ updateAppData(login.id, system, ad => ({
+ ...ad,
+ mutedWords: appendDedupe(appData.mutedWords, [muteWord]),
}));
setMuteWord("");
}
const handleToggle = (setting: keyof SnortAppData) => {
- updateAppData(login.id, ad => ({
- item: {
- ...ad,
- [setting]: !appData[setting],
- },
- timestamp: unixNowMs(),
+ updateAppData(login.id, system, ad => ({
+ ...ad,
+ [setting]: !appData[setting],
}));
};
function removeMutedWord(word: string) {
- updateAppData(login.id, ad => ({
- item: {
- ...ad,
- mutedWords: appData.mutedWords.filter(a => a !== word),
- },
- timestamp: unixNowMs(),
+ updateAppData(login.id, system, ad => ({
+ ...ad,
+ mutedWords: appData.mutedWords.filter(a => a !== word),
}));
setMuteWord("");
}
diff --git a/packages/app/src/Pages/settings/Preferences.tsx b/packages/app/src/Pages/settings/Preferences.tsx
index d8c5530a..db271325 100644
--- a/packages/app/src/Pages/settings/Preferences.tsx
+++ b/packages/app/src/Pages/settings/Preferences.tsx
@@ -1,36 +1,52 @@
+/* eslint-disable max-lines */
import "./Preferences.css";
+import { useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
+import AsyncButton from "@/Components/Button/AsyncButton";
import { AllLanguageCodes } from "@/Components/IntlProvider/IntlProviderUtils";
-import { useLocale } from "@/Components/IntlProvider/useLocale";
-import useLogin from "@/Hooks/useLogin";
+import usePreferences from "@/Hooks/usePreferences";
import { unwrap } from "@/Utils";
import { DefaultImgProxy } from "@/Utils/Const";
-import { updatePreferences, UserPreferences } from "@/Utils/Login";
+import { UserPreferences } from "@/Utils/Login";
import messages from "./messages";
const PreferencesPage = () => {
const { formatMessage } = useIntl();
- const { id, pref } = useLogin(s => ({ id: s.id, pref: s.appData.item.preferences }));
- const { lang } = useLocale();
+ const { preferences, update: updatePerf } = usePreferences();
+ const [pref, setPref] = useState
(preferences);
+ const [error, setError] = useState("");
+
+ async function update(obj: UserPreferences) {
+ try {
+ setError("");
+ await updatePerf(obj);
+ } catch (e) {
+ console.error(e);
+ setError(formatMessage({ defaultMessage: "Failed to update, please try again", id: "OoZgbB" }));
+ }
+ }
return (
-
+
-
+
update(pref)}>
+
+
+ {error &&
{error}}
@@ -129,7 +145,7 @@ const PreferencesPage = () => {
className="w-max"
value={pref.autoLoadMedia}
onChange={e =>
- updatePreferences(id, {
+ setPref({
...pref,
autoLoadMedia: e.target.value,
} as UserPreferences)
@@ -160,7 +176,7 @@ const PreferencesPage = () => {
updatePreferences(id, { ...pref, checkSigs: e.target.checked })}
+ onChange={e => setPref({ ...pref, checkSigs: e.target.checked })}
/>
@@ -177,7 +193,7 @@ const PreferencesPage = () => {