Save "showNsfw" setting on server
This commit is contained in:
@@ -9,4 +9,5 @@
|
|||||||
export type MetadataBrowseSettings = {
|
export type MetadataBrowseSettings = {
|
||||||
hideLibraryEntries: boolean;
|
hideLibraryEntries: boolean;
|
||||||
extensionLanguages: string[];
|
extensionLanguages: string[];
|
||||||
|
showNsfw: boolean;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import { requestManager } from '@/lib/requests/RequestManager.ts';
|
|||||||
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
||||||
import { MutableListSetting } from '@/modules/core/components/settings/MutableListSetting.tsx';
|
import { MutableListSetting } from '@/modules/core/components/settings/MutableListSetting.tsx';
|
||||||
import { TextSetting } from '@/modules/core/components/settings/text/TextSetting.tsx';
|
import { TextSetting } from '@/modules/core/components/settings/text/TextSetting.tsx';
|
||||||
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
|
||||||
import {
|
import {
|
||||||
createUpdateMetadataServerSettings,
|
createUpdateMetadataServerSettings,
|
||||||
useMetadataServerSettings,
|
useMetadataServerSettings,
|
||||||
@@ -47,8 +46,6 @@ export const BrowseSettings = () => {
|
|||||||
setAction(null);
|
setAction(null);
|
||||||
}, [t]);
|
}, [t]);
|
||||||
|
|
||||||
const [showNsfw, setShowNsfw] = useLocalStorage<boolean>('showNsfw', true);
|
|
||||||
|
|
||||||
const { data, loading, error, refetch } = requestManager.useGetServerSettings({
|
const { data, loading, error, refetch } = requestManager.useGetServerSettings({
|
||||||
notifyOnNetworkStatusChange: true,
|
notifyOnNetworkStatusChange: true,
|
||||||
});
|
});
|
||||||
@@ -64,7 +61,7 @@ export const BrowseSettings = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const {
|
const {
|
||||||
settings: { hideLibraryEntries },
|
settings: { hideLibraryEntries, showNsfw },
|
||||||
} = useMetadataServerSettings();
|
} = useMetadataServerSettings();
|
||||||
const updateMetadataServerSettings = createUpdateMetadataServerSettings<keyof MetadataBrowseSettings>((e) =>
|
const updateMetadataServerSettings = createUpdateMetadataServerSettings<keyof MetadataBrowseSettings>((e) =>
|
||||||
makeToast(t('global.error.label.failed_to_save_changes'), 'error', getErrorMessage(e)),
|
makeToast(t('global.error.label.failed_to_save_changes'), 'error', getErrorMessage(e)),
|
||||||
@@ -101,7 +98,11 @@ export const BrowseSettings = () => {
|
|||||||
primary={t('settings.label.show_nsfw')}
|
primary={t('settings.label.show_nsfw')}
|
||||||
secondary={t('settings.label.show_nsfw_description')}
|
secondary={t('settings.label.show_nsfw_description')}
|
||||||
/>
|
/>
|
||||||
<Switch edge="end" checked={showNsfw} onChange={() => setShowNsfw(!showNsfw)} />
|
<Switch
|
||||||
|
edge="end"
|
||||||
|
checked={showNsfw}
|
||||||
|
onChange={() => updateMetadataServerSettings('showNsfw', !showNsfw)}
|
||||||
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<NumberSetting
|
<NumberSetting
|
||||||
settingTitle={t('settings.server.requests.sources.parallel.label.title')}
|
settingTitle={t('settings.server.requests.sources.parallel.label.title')}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { Link, useLocation, useNavigate } from 'react-router-dom';
|
import { Link, useLocation, useNavigate } from 'react-router-dom';
|
||||||
import { CustomTooltip } from '@/modules/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/modules/core/components/CustomTooltip.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
|
||||||
import { AppbarSearch } from '@/modules/core/components/AppbarSearch.tsx';
|
import { AppbarSearch } from '@/modules/core/components/AppbarSearch.tsx';
|
||||||
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
||||||
import { makeToast } from '@/modules/core/utils/Toast.ts';
|
import { makeToast } from '@/modules/core/utils/Toast.ts';
|
||||||
@@ -130,13 +129,12 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
|
|||||||
requestManager.useExtensionListFetch();
|
requestManager.useExtensionListFetch();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
settings: { extensionLanguages: shownLangs },
|
settings: { extensionLanguages: shownLangs, showNsfw },
|
||||||
} = useMetadataServerSettings();
|
} = useMetadataServerSettings();
|
||||||
const updateMetadataServerSettings = createUpdateMetadataServerSettings<
|
const updateMetadataServerSettings = createUpdateMetadataServerSettings<
|
||||||
keyof Pick<MetadataBrowseSettings, 'extensionLanguages'>
|
keyof Pick<MetadataBrowseSettings, 'extensionLanguages'>
|
||||||
>((e) => makeToast(t('global.error.label.failed_to_save_changes'), 'error', getErrorMessage(e)));
|
>((e) => makeToast(t('global.error.label.failed_to_save_changes'), 'error', getErrorMessage(e)));
|
||||||
|
|
||||||
const [showNsfw] = useLocalStorage<boolean>('showNsfw', true);
|
|
||||||
const [query] = useQueryParam('query', StringParam);
|
const [query] = useQueryParam('query', StringParam);
|
||||||
|
|
||||||
const [updatingExtensionIds, setUpdatingExtensionIds] = useState<string[]>([]);
|
const [updatingExtensionIds, setUpdatingExtensionIds] = useState<string[]>([]);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
|||||||
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
|
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
|
||||||
import { Sources } from '@/modules/source/services/Sources.ts';
|
import { Sources } from '@/modules/source/services/Sources.ts';
|
||||||
import { SourceDisplayNameInfo, SourceIdInfo } from '@/modules/source/Source.types.ts';
|
import { SourceDisplayNameInfo, SourceIdInfo } from '@/modules/source/Source.types.ts';
|
||||||
|
import { useMetadataServerSettings } from '@/modules/settings/services/ServerSettingsMetadata.ts';
|
||||||
|
|
||||||
type SourceLoadingState = { isLoading: boolean; hasResults: boolean; emptySearch: boolean };
|
type SourceLoadingState = { isLoading: boolean; hasResults: boolean; emptySearch: boolean };
|
||||||
type SourceToLoadingStateMap = Map<string, SourceLoadingState>;
|
type SourceToLoadingStateMap = Map<string, SourceLoadingState>;
|
||||||
@@ -187,7 +188,9 @@ export const SearchAll: React.FC = () => {
|
|||||||
const searchString = useDebounce(query, TRIGGER_SEARCH_THRESHOLD);
|
const searchString = useDebounce(query, TRIGGER_SEARCH_THRESHOLD);
|
||||||
|
|
||||||
const [shownLangs, setShownLangs] = useLocalStorage<string[]>('shownSourceLangs', sourceDefualtLangs());
|
const [shownLangs, setShownLangs] = useLocalStorage<string[]>('shownSourceLangs', sourceDefualtLangs());
|
||||||
const [showNsfw] = useLocalStorage<boolean>('showNsfw', true);
|
const {
|
||||||
|
settings: { showNsfw },
|
||||||
|
} = useMetadataServerSettings();
|
||||||
|
|
||||||
const { data, loading, error, refetch } = requestManager.useGetSourceList({ notifyOnNetworkStatusChange: true });
|
const { data, loading, error, refetch } = requestManager.useGetSourceList({ notifyOnNetworkStatusChange: true });
|
||||||
const sources = useMemo(() => data?.sources.nodes ?? [], [data?.sources.nodes]);
|
const sources = useMemo(() => data?.sources.nodes ?? [], [data?.sources.nodes]);
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ const APP_METADATA_OBJECT: Record<AppMetadataKeys, undefined> = {
|
|||||||
unread: undefined,
|
unread: undefined,
|
||||||
showChapterNumber: undefined,
|
showChapterNumber: undefined,
|
||||||
extensionLanguages: undefined,
|
extensionLanguages: undefined,
|
||||||
|
showNsfw: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const VALID_APP_METADATA_KEYS = Object.keys(APP_METADATA_OBJECT);
|
export const VALID_APP_METADATA_KEYS = Object.keys(APP_METADATA_OBJECT);
|
||||||
@@ -136,6 +137,7 @@ export const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [
|
|||||||
// browse
|
// browse
|
||||||
'hideLibraryEntries',
|
'hideLibraryEntries',
|
||||||
'extensionLanguages',
|
'extensionLanguages',
|
||||||
|
'showNsfw',
|
||||||
|
|
||||||
// history
|
// history
|
||||||
'hideHistory',
|
'hideHistory',
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = {
|
|||||||
// browse
|
// browse
|
||||||
hideLibraryEntries: false,
|
hideLibraryEntries: false,
|
||||||
extensionLanguages: extensionDefaultLangs(),
|
extensionLanguages: extensionDefaultLangs(),
|
||||||
|
showNsfw: true,
|
||||||
|
|
||||||
// history
|
// history
|
||||||
hideHistory: false,
|
hideHistory: false,
|
||||||
|
|||||||
@@ -26,13 +26,16 @@ import { AppRoutes } from '@/modules/core/AppRoute.constants.ts';
|
|||||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||||
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
|
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
|
||||||
import { Sources as SourceService } from '@/modules/source/services/Sources.ts';
|
import { Sources as SourceService } from '@/modules/source/services/Sources.ts';
|
||||||
|
import { useMetadataServerSettings } from '@/modules/settings/services/ServerSettingsMetadata.ts';
|
||||||
|
|
||||||
export function Sources() {
|
export function Sources() {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { setAction } = useNavBarContext();
|
const { setAction } = useNavBarContext();
|
||||||
|
|
||||||
const [shownLangs, setShownLangs] = useLocalStorage<string[]>('shownSourceLangs', sourceDefualtLangs());
|
const [shownLangs, setShownLangs] = useLocalStorage<string[]>('shownSourceLangs', sourceDefualtLangs());
|
||||||
const [showNsfw] = useLocalStorage<boolean>('showNsfw', true);
|
const {
|
||||||
|
settings: { showNsfw },
|
||||||
|
} = useMetadataServerSettings();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data,
|
data,
|
||||||
|
|||||||
Reference in New Issue
Block a user