From 828939ff68374386cdfcb72185fcc837ff7d2674 Mon Sep 17 00:00:00 2001 From: Nuwan Date: Tue, 13 Aug 2024 00:11:26 +0530 Subject: [PATCH] fix my jam track filtering --- .../src/components/jamtracks/JKMyJamTracks.js | 49 ++++++++++--------- jam-ui/src/store/features/myJamTracksSlice.js | 23 +++++---- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/jam-ui/src/components/jamtracks/JKMyJamTracks.js b/jam-ui/src/components/jamtracks/JKMyJamTracks.js index e6f484ed0..d54617ba8 100644 --- a/jam-ui/src/components/jamtracks/JKMyJamTracks.js +++ b/jam-ui/src/components/jamtracks/JKMyJamTracks.js @@ -6,7 +6,7 @@ import { useResponsive } from '@farfetch/react-context-responsive'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import useOnScreen from '../../hooks/useOnScreen'; import { Link } from 'react-router-dom'; -import { fetchMyJamTracks } from '../../store/features/myJamTracksSlice'; +import { fetchMyJamTracks, filterJamTracks } from '../../store/features/myJamTracksSlice'; import { useDispatch, useSelector } from 'react-redux'; const JKMyJamTracks = () => { @@ -29,14 +29,19 @@ const JKMyJamTracks = () => { setInputValue(val); }; + useEffect(() => { + dispatch(fetchMyJamTracks()); + }, []); + useEffect(() => { const getMyJamTracks = setTimeout(async () => { - await fetchJamTracks({ page: 1, search: inputValue}); + await fetchJamTracks({ page: 1, search: inputValue }); + //dispatch(filterJamTracks(inputValue)); }, 1000); return () => clearTimeout(getMyJamTracks); }, [inputValue]); - const fetchJamTracks = async (params) => { + const fetchJamTracks = async params => { const { page } = params; try { dispatch(fetchMyJamTracks(params)); @@ -50,7 +55,7 @@ const JKMyJamTracks = () => { useEffect(() => { if (isIntersecting) { if (nextPage && loadingStatus !== 'loading' && nextPage !== 1) { - const params = { page: nextPage }; + const params = { page: nextPage, search: inputValue }; fetchJamTracks(params); } } @@ -90,25 +95,23 @@ const JKMyJamTracks = () => {
- { loadingStatus === 'loading' ? ( -
Loading...
- ) : loadingStatus === 'failed' ? ( -
Error loading jam tracks
- ) : loadingStatus === 'succeeded' ? ( - - {jamTracks && jamTracks.map((jamTrack, index) => ( -
(jamTracks.length - 1 === index ? setLastJamTrackRef(ref) : null)}> - - {jamTrack.name} - {jamTrack.original_artist && ` by ${jamTrack.original_artist}`} - -
- - ))} -
- ) : null } - - + {loadingStatus === 'loading' ? ( +
Loading...
+ ) : loadingStatus === 'failed' ? ( +
Error loading jam tracks
+ ) : loadingStatus === 'succeeded' ? ( + + {jamTracks && + jamTracks.map((jamTrack, index) => ( +
(jamTracks.length - 1 === index ? setLastJamTrackRef(ref) : null)}> + + {jamTrack.name} + {jamTrack.original_artist && ` by ${jamTrack.original_artist}`} + +
+ ))} +
+ ) : null}
diff --git a/jam-ui/src/store/features/myJamTracksSlice.js b/jam-ui/src/store/features/myJamTracksSlice.js index 6e3481e82..24b44bae2 100644 --- a/jam-ui/src/store/features/myJamTracksSlice.js +++ b/jam-ui/src/store/features/myJamTracksSlice.js @@ -32,6 +32,9 @@ export const myJamTracksSlice = createSlice({ deleteJamTrack: (state, action) => { const { id } = action.payload; state.jamTracks = state.jamTracks.filter(jamTrack => jamTrack.id !== id); + }, + filterJamTracks: (state, action) => { + state.jamTracks = state.jamTracks.filter(jamTrack => jamTrack.name.toLowerCase().includes(action.payload.toLowerCase())); } }, extraReducers: builder => { @@ -40,16 +43,16 @@ export const myJamTracksSlice = createSlice({ state.status = 'loading'; }) .addCase(fetchMyJamTracks.fulfilled, (state, action) => { - state.status = 'succeeded'; - state.jamTracks = action.payload.jamtracks; - state.next = action.payload.next; - //--- amend the state to include only unique jamTracks - // const records = new Set([...state.jamTracks, ...action.payload.jamtracks]); - // const unique = []; - // records.map(x => (unique.filter(a => a.id === x.id).length > 0 ? null : unique.push(x))); - // state.jamTracks = unique; - // state.next = action.payload.next; // state.status = 'succeeded'; + // state.jamTracks = action.payload.jamtracks; + // state.next = action.payload.next; + //--- amend the state to include only unique jamTracks + const records = new Set([...state.jamTracks, ...action.payload.jamtracks]); + const unique = []; + records.map(x => (unique.filter(a => a.id === x.id).length > 0 ? null : unique.push(x))); + state.jamTracks = unique; + state.next = action.payload.next; + state.status = 'succeeded'; //--- }) .addCase(fetchMyJamTracks.rejected, (state, action) => { @@ -59,5 +62,5 @@ export const myJamTracksSlice = createSlice({ } }); -export const { addJamTrack, deleteJamTrack } = myJamTracksSlice.actions; +export const { addJamTrack, deleteJamTrack, filterJamTracks } = myJamTracksSlice.actions; export default myJamTracksSlice.reducer;