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
+ );
+ }}
+ />
+
+