diff --git a/server/interfaces/api/settingsInterfaces.ts b/server/interfaces/api/settingsInterfaces.ts index 3dfa619205..89dd16c59a 100644 --- a/server/interfaces/api/settingsInterfaces.ts +++ b/server/interfaces/api/settingsInterfaces.ts @@ -31,6 +31,7 @@ export interface PublicSettingsResponse { applicationUrl: string; hideAvailable: boolean; hideBlocklisted: boolean; + skipBlocklistModal: boolean; localLogin: boolean; mediaServerLogin: boolean; movie4kEnabled: boolean; diff --git a/server/lib/settings/index.ts b/server/lib/settings/index.ts index 010c43d81d..7585a29007 100644 --- a/server/lib/settings/index.ts +++ b/server/lib/settings/index.ts @@ -141,6 +141,7 @@ export interface MainSettings { }; hideAvailable: boolean; hideBlocklisted: boolean; + skipBlocklistModal: boolean; localLogin: boolean; mediaServerLogin: boolean; newPlexLogin: boolean; @@ -193,6 +194,7 @@ interface FullPublicSettings extends PublicSettings { applicationUrl: string; hideAvailable: boolean; hideBlocklisted: boolean; + skipBlocklistModal: boolean; localLogin: boolean; mediaServerLogin: boolean; movie4kEnabled: boolean; @@ -414,6 +416,7 @@ class Settings { }, hideAvailable: false, hideBlocklisted: false, + skipBlocklistModal: false, localLogin: true, mediaServerLogin: true, newPlexLogin: true, @@ -709,6 +712,7 @@ class Settings { applicationUrl: this.data.main.applicationUrl, hideAvailable: this.data.main.hideAvailable, hideBlocklisted: this.data.main.hideBlocklisted, + skipBlocklistModal: this.data.main.skipBlocklistModal, localLogin: this.data.main.localLogin, mediaServerLogin: this.data.main.mediaServerLogin, jellyfinExternalHost: this.data.jellyfin.externalHostname, diff --git a/src/components/CollectionDetails/index.tsx b/src/components/CollectionDetails/index.tsx index a8ee90a684..d799a5ec48 100644 --- a/src/components/CollectionDetails/index.tsx +++ b/src/components/CollectionDetails/index.tsx @@ -422,7 +422,11 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { buttonType="ghost" className="z-40 mr-2" buttonSize="md" - onClick={() => setShowBlocklistModal(true)} + onClick={() => + settings.currentSettings.skipBlocklistModal + ? onClickHideItemBtn() + : setShowBlocklistModal(true) + } disabled={isBlocklistUpdating} > diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx index 80aded586e..cba14e9ddd 100644 --- a/src/components/MovieDetails/index.tsx +++ b/src/components/MovieDetails/index.tsx @@ -579,7 +579,11 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => { buttonType={'ghost'} className="z-40 mr-2" buttonSize={'md'} - onClick={() => setShowBlocklistModal(true)} + onClick={() => + settings.currentSettings.skipBlocklistModal + ? onClickHideItemBtn() + : setShowBlocklistModal(true) + } > diff --git a/src/components/Settings/SettingsMain/index.tsx b/src/components/Settings/SettingsMain/index.tsx index 00703ddd37..9fd9a3bbd5 100644 --- a/src/components/Settings/SettingsMain/index.tsx +++ b/src/components/Settings/SettingsMain/index.tsx @@ -55,6 +55,9 @@ const messages = defineMessages('components.Settings.SettingsMain', { hideBlocklisted: 'Hide Blocklisted Items', hideBlocklistedTip: 'Hide blocklisted items from discover pages for all users with the "Manage Blocklist" permission', + skipBlocklistModal: 'Skip Blocklist Confirmation', + skipBlocklistModalTip: + 'Blocklist content immediately without showing the confirmation modal', toastApiKeySuccess: 'New API key generated successfully!', toastApiKeyFailure: 'Something went wrong while generating a new API key.', toastSettingsSuccess: 'Settings saved successfully!', @@ -171,6 +174,7 @@ const SettingsMain = () => { applicationUrl: data?.applicationUrl, hideAvailable: data?.hideAvailable, hideBlocklisted: data?.hideBlocklisted, + skipBlocklistModal: data?.skipBlocklistModal, locale: data?.locale ?? 'en', discoverRegion: data?.discoverRegion, originalLanguage: data?.originalLanguage, @@ -193,6 +197,7 @@ const SettingsMain = () => { applicationUrl: values.applicationUrl, hideAvailable: values.hideAvailable, hideBlocklisted: values.hideBlocklisted, + skipBlocklistModal: values.skipBlocklistModal, locale: values.locale, discoverRegion: values.discoverRegion, streamingRegion: values.streamingRegion, @@ -538,6 +543,32 @@ const SettingsMain = () => { /> +
+ +
+ { + setFieldValue( + 'skipBlocklistModal', + !values.skipBlocklistModal + ); + }} + /> +
+