pl-fe: improve defaultSettings handling

Signed-off-by: mkljczk <git@mkljczk.pl>
This commit is contained in:
mkljczk
2025-03-08 16:24:26 +01:00
parent ae9cac0c64
commit e7ca259762
6 changed files with 17 additions and 17 deletions

View File

@ -55,7 +55,7 @@ const messages = defineMessages({
type ValueGetter<T1 = Element, T2 = any> = (e: React.ChangeEvent<T1>) => T2;
type StreamItemConfigPath = ['promoPanel', 'items'] | ['navlinks', 'homeFooter'] | ['cryptoAddresses'];
type ThemeChangeHandler = (theme: string) => void;
type ThemeChangeHandler = (theme: 'system' | 'light' | 'dark' | 'black') => void;
const PlFeConfigEditor: React.FC = () => {
const intl = useIntl();
@ -189,7 +189,7 @@ const PlFeConfigEditor: React.FC = () => {
<List>
<ListItem label={<FormattedMessage id='plfe_config.fields.theme_label' defaultMessage='Default theme' />}>
<ThemeSelector
value={plFe.defaultSettings?.themeMode}
value={plFe.defaultSettings?.themeMode || 'system'}
onChange={handleThemeChange}
/>
</ListItem>

View File

@ -13,7 +13,7 @@ const messages = defineMessages({
interface IThemeSelector {
value: string;
onChange: (value: string) => void;
onChange: (value: 'system' | 'light' | 'dark' | 'black') => void;
}
/** Pure theme selector. */
@ -36,7 +36,7 @@ const ThemeSelector: React.FC<IThemeSelector> = ({ value, onChange }) => {
}, [value]);
const handleChange: React.ChangeEventHandler<HTMLSelectElement> = e => {
onChange(e.target.value);
onChange(e.target.value as any);
};
return (

View File

@ -13,7 +13,7 @@ import Input from 'pl-fe/components/ui/input';
import { useAppDispatch } from 'pl-fe/hooks/use-app-dispatch';
import { useSettings } from 'pl-fe/hooks/use-settings';
import SettingToggle from '../notifications/components/setting-toggle';
import SettingToggle from '../settings/components/setting-toggle';
const messages = defineMessages({
urlPrivacy: { id: 'settings.url_privacy', defaultMessage: 'URL privacy' },

View File

@ -1,6 +1,7 @@
import trimStart from 'lodash/trimStart';
import * as v from 'valibot';
import { settingsSchema } from 'pl-fe/schemas/pl-fe/settings';
import { coerceObject, filteredArray } from 'pl-fe/schemas/utils';
const promoPanelItemSchema = coerceObject({
@ -54,7 +55,7 @@ const plFeConfigSchema = coerceObject({
v.record(v.string(), v.string()),
)), null),
copyright: v.fallback(v.string(), `${new Date().getFullYear()}. Copying is an act of love. Please copy and share.`),
defaultSettings: v.fallback(v.record(v.string(), v.any()), {}),
defaultSettings: v.fallback(v.partial(settingsSchema), {}),
gdpr: v.fallback(v.boolean(), false),
gdprUrl: v.fallback(v.string(), ''),
greentext: v.fallback(v.boolean(), false),

View File

@ -39,7 +39,7 @@ const settingsSchema = v.object({
showWrenchButton: v.fallback(v.boolean(), false),
urlPrivacy: coerceObject({
clearLinksInCompose: v.fallback(v.boolean(), true),
clearLinksInContent: v.fallback(v.boolean(), true),
clearLinksInContent: v.fallback(v.boolean(), false),
allowReferralMarketing: v.fallback(v.boolean(), false),
rulesUrl: v.fallback(v.string(), ''),
hashUrl: v.fallback(v.string(), ''),

View File

@ -15,7 +15,6 @@
import { URLPurify, type SerializedRules } from '@mkljczk/url-purify';
import KVStore from 'pl-fe/storage/kv-store';
import { store } from 'pl-fe/store';
// Adapted from ClearURLs Rules
// https://github.com/ClearURLs/Rules/blob/master/data.min.json
@ -91,16 +90,16 @@ const DEFAULT_RULESET: SerializedRules = {
const Purify = new URLPurify({
rulesFromMemory: DEFAULT_RULESET,
onFetchedRules: (hash, rules) => {
const me = store.getState().auth.me;
// onFetchedRules: (hash, rules) => {
// const me = store.getState().auth.me;
KVStore.setItem('url-purify-rules:last', me || '');
KVStore.setItem(`url-purify-rules:${me}`, {
hash,
rules,
fetchedAt: Date.now(),
});
},
// KVStore.setItem('url-purify-rules:last', me || '');
// KVStore.setItem(`url-purify-rules:${me}`, {
// hash,
// rules,
// fetchedAt: Date.now(),
// });
// },
});
KVStore.getItem('url-purify-rules:last', (url: string) => {