From: Daniel Karbach Date: Fri, 23 May 2025 09:33:53 +0000 (+0200) Subject: better event filter inversion X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=8e22dc28e01d1a8acc54dece89265bc4a4e27363;p=alttp.git better event filter inversion --- diff --git a/app/Http/Controllers/EpisodeController.php b/app/Http/Controllers/EpisodeController.php index 22ca6dc..bfbb8a4 100644 --- a/app/Http/Controllers/EpisodeController.php +++ b/app/Http/Controllers/EpisodeController.php @@ -195,6 +195,7 @@ class EpisodeController extends Controller 'before' => 'nullable|date', 'event' => 'nullable|array', 'event.*' => 'numeric', + 'eventInvert' => 'boolean', 'limit' => 'numeric', 'offset' => 'numeric', 'reverse' => 'boolean', @@ -218,7 +219,11 @@ class EpisodeController extends Controller $episodes = $episodes->where('episodes.start', '<=', $validatedData['before']); } if (!empty($validatedData['event'])) { - $episodes = $episodes->whereIn('episodes.event_id', $validatedData['event']); + if (isset($validatedData['eventInvert']) && $validatedData['eventInvert']) { + $episodes = $episodes->whereNotIn('episodes.event_id', $validatedData['event']); + } else { + $episodes = $episodes->whereIn('episodes.event_id', $validatedData['event']); + } } if ($request->user() && $request->user()->isPrivileged()) { $episodes = $episodes->with(['crew', 'crew.user']); diff --git a/resources/js/helpers/Episode.js b/resources/js/helpers/Episode.js index 696d39a..dd7c0d8 100644 --- a/resources/js/helpers/Episode.js +++ b/resources/js/helpers/Episode.js @@ -59,9 +59,15 @@ export const isActive = episode => { }; export const isEventSelected = (filter, event) => { - return (filter.event || []).includes(event.id); + const found = (filter.event || []).includes(event.id); + return filter.eventInvert ? !found : found; }; +export const invertEventFilter = (filter) => ({ + ...filter, + eventInvert: filter.eventInvert ? 0 : 1, +}); + export const toggleEventFilter = (events, filter, event) => { const eventFilter = filter.event || []; if (eventFilter.includes(event.id)) { diff --git a/resources/js/pages/Schedule.js b/resources/js/pages/Schedule.js index 5007739..2b6a623 100644 --- a/resources/js/pages/Schedule.js +++ b/resources/js/pages/Schedule.js @@ -13,7 +13,7 @@ import ApplyDialog from '../components/episodes/ApplyDialog'; import Filter from '../components/episodes/Filter'; import List from '../components/episodes/List'; import RestreamDialog from '../components/episodes/RestreamDialog'; -import { toggleEventFilter } from '../helpers/Episode'; +import { invertEventFilter, toggleEventFilter } from '../helpers/Episode'; import { useUser } from '../hooks/user'; export const Component = () => { @@ -78,10 +78,8 @@ export const Component = () => { }, []); const invertFilter = React.useCallback(() => { - updateFilter(events.reduce((newFilter, event) => { - return toggleEventFilter(events, newFilter, event); - }, filter)); - }, [events, filter]); + updateFilter(invertEventFilter(filter)); + }, [filter, updateFilter]); const fetchEpisodes = React.useCallback((controller, ahead, behind, filter) => { axios.get(`/api/episodes`, {