From d3152d5d0f70b78c3ae322c12e528afb61674751 Mon Sep 17 00:00:00 2001 From: Joshua Winters-Brown Date: Tue, 21 Jul 2026 12:42:48 -0400 Subject: [PATCH 1/3] feat(@settingsinterfaces.tsx): addes the skipBlocklistModal to settings interace addes skipBlocklistModal to relevant areas --- server/interfaces/api/settingsInterfaces.ts | 1 + server/lib/settings/index.ts | 4 ++++ src/context/SettingsContext.tsx | 1 + src/pages/_app.tsx | 1 + 4 files changed, 7 insertions(+) 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/context/SettingsContext.tsx b/src/context/SettingsContext.tsx index f2ed116756..c37c7320b2 100644 --- a/src/context/SettingsContext.tsx +++ b/src/context/SettingsContext.tsx @@ -14,6 +14,7 @@ const defaultSettings = { applicationUrl: '', hideAvailable: false, hideBlocklisted: false, + skipBlocklistModal: false, localLogin: true, mediaServerLogin: true, movie4kEnabled: false, diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 833ecad66b..accde000b2 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -243,6 +243,7 @@ CoreApp.getInitialProps = async (initialProps) => { applicationUrl: '', hideAvailable: false, hideBlocklisted: false, + skipBlocklistModal: false, movie4kEnabled: false, series4kEnabled: false, localLogin: true, From 7540439b4f437ff352e1d9cf48c925d4acef916f Mon Sep 17 00:00:00 2001 From: Joshua Winters-Brown Date: Tue, 21 Jul 2026 12:45:27 -0400 Subject: [PATCH 2/3] feat(@moviedetails/index.tsx @titlecard/index.tsx): accommodates for interface value skipBlocklistM Accommodates behavior for interface value skipBlocklistModal essentially grabs value from settings interface and if its true, it just auto adds to block list. if its false, it sets the block list modal to pop up --- src/components/CollectionDetails/index.tsx | 6 +++- src/components/MovieDetails/index.tsx | 6 +++- .../Settings/SettingsMain/index.tsx | 31 +++++++++++++++++++ src/components/TitleCard/index.tsx | 8 ++++- src/components/TvDetails/index.tsx | 6 +++- 5 files changed, 53 insertions(+), 4 deletions(-) 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 + ); + }} + /> +
+