Merge pull request #571 from Fallenbagel/fix-local-watchlist-page-item-removal

fix: ensure watchlist updates are immediately reflected
This commit is contained in:
Fallenbagel
2023-11-19 16:47:45 +05:00
committed by GitHub
5 changed files with 17 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ type ListViewProps = {
isLoading?: boolean; isLoading?: boolean;
isReachingEnd?: boolean; isReachingEnd?: boolean;
onScrollBottom: () => void; onScrollBottom: () => void;
mutateParent?: () => void;
}; };
const ListView = ({ const ListView = ({
@@ -28,6 +29,7 @@ const ListView = ({
onScrollBottom, onScrollBottom,
isReachingEnd, isReachingEnd,
plexItems, plexItems,
mutateParent,
}: ListViewProps) => { }: ListViewProps) => {
const intl = useIntl(); const intl = useIntl();
useVerticalScroll(onScrollBottom, !isLoading && !isEmpty && !isReachingEnd); useVerticalScroll(onScrollBottom, !isLoading && !isEmpty && !isReachingEnd);
@@ -48,6 +50,7 @@ const ListView = ({
type={title.mediaType} type={title.mediaType}
isAddedToWatchlist={true} isAddedToWatchlist={true}
canExpand canExpand
mutateParent={mutateParent}
/> />
</li> </li>
); );

View File

@@ -30,6 +30,7 @@ const DiscoverWatchlist = () => {
titles, titles,
fetchMore, fetchMore,
error, error,
mutate,
} = useDiscover<WatchlistItem>( } = useDiscover<WatchlistItem>(
`/api/v1/${ `/api/v1/${
router.pathname.startsWith('/profile') router.pathname.startsWith('/profile')
@@ -76,6 +77,7 @@ const DiscoverWatchlist = () => {
} }
isReachingEnd={isReachingEnd} isReachingEnd={isReachingEnd}
onScrollBottom={fetchMore} onScrollBottom={fetchMore}
mutateParent={mutate}
/> />
</> </>
); );

View File

@@ -12,6 +12,7 @@ export interface TmdbTitleCardProps {
type: 'movie' | 'tv'; type: 'movie' | 'tv';
canExpand?: boolean; canExpand?: boolean;
isAddedToWatchlist?: boolean; isAddedToWatchlist?: boolean;
mutateParent?: () => void;
} }
const isMovie = (movie: MovieDetails | TvDetails): movie is MovieDetails => { const isMovie = (movie: MovieDetails | TvDetails): movie is MovieDetails => {
@@ -25,6 +26,7 @@ const TmdbTitleCard = ({
type, type,
canExpand, canExpand,
isAddedToWatchlist = false, isAddedToWatchlist = false,
mutateParent,
}: TmdbTitleCardProps) => { }: TmdbTitleCardProps) => {
const { hasPermission } = useUser(); const { hasPermission } = useUser();
@@ -71,6 +73,7 @@ const TmdbTitleCard = ({
year={title.releaseDate} year={title.releaseDate}
mediaType={'movie'} mediaType={'movie'}
canExpand={canExpand} canExpand={canExpand}
mutateParent={mutateParent}
/> />
) : ( ) : (
<TitleCard <TitleCard
@@ -87,6 +90,7 @@ const TmdbTitleCard = ({
year={title.firstAirDate} year={title.firstAirDate}
mediaType={'tv'} mediaType={'tv'}
canExpand={canExpand} canExpand={canExpand}
mutateParent={mutateParent}
/> />
); );
}; };

View File

@@ -38,6 +38,7 @@ interface TitleCardProps {
canExpand?: boolean; canExpand?: boolean;
inProgress?: boolean; inProgress?: boolean;
isAddedToWatchlist?: number | boolean; isAddedToWatchlist?: number | boolean;
mutateParent?: () => void;
} }
const messages = defineMessages({ const messages = defineMessages({
@@ -61,6 +62,7 @@ const TitleCard = ({
isAddedToWatchlist = false, isAddedToWatchlist = false,
inProgress = false, inProgress = false,
canExpand = false, canExpand = false,
mutateParent,
}: TitleCardProps) => { }: TitleCardProps) => {
const isTouch = useIsTouch(); const isTouch = useIsTouch();
const intl = useIntl(); const intl = useIntl();
@@ -148,6 +150,9 @@ const TitleCard = ({
} finally { } finally {
setIsUpdating(false); setIsUpdating(false);
mutate('/api/v1/discover/watchlist'); mutate('/api/v1/discover/watchlist');
if (mutateParent) {
mutateParent();
}
setToggleWatchlist((prevState) => !prevState); setToggleWatchlist((prevState) => !prevState);
} }
}; };

View File

@@ -25,6 +25,7 @@ interface DiscoverResult<T, S> {
error: unknown; error: unknown;
titles: T[]; titles: T[];
firstResultData?: BaseSearchResult<T> & S; firstResultData?: BaseSearchResult<T> & S;
mutate?: () => void;
} }
const extraEncodes: [RegExp, string][] = [ const extraEncodes: [RegExp, string][] = [
@@ -54,7 +55,7 @@ const useDiscover = <
{ hideAvailable = true } = {} { hideAvailable = true } = {}
): DiscoverResult<T, S> => { ): DiscoverResult<T, S> => {
const settings = useSettings(); const settings = useSettings();
const { data, error, size, setSize, isValidating } = useSWRInfinite< const { data, error, size, setSize, isValidating, mutate } = useSWRInfinite<
BaseSearchResult<T> & S BaseSearchResult<T> & S
>( >(
(pageIndex: number, previousPageData) => { (pageIndex: number, previousPageData) => {
@@ -119,6 +120,7 @@ const useDiscover = <
error, error,
titles, titles,
firstResultData: data?.[0], firstResultData: data?.[0],
mutate,
}; };
}; };