import { createSlice, createAsyncThunk } from '@reduxjs/toolkit' import type { Track } from '../../types' import { getAlbumTracks } from '../../furumiApi' export const fetchAlbumTracks = createAsyncThunk( 'albumTracks/fetch', async (albumSlug: string, { rejectWithValue }) => { const data = await getAlbumTracks(albumSlug) if (data === null) return rejectWithValue('Failed to fetch album tracks') return { albumSlug, tracks: data } }, ) interface AlbumTracksState { byAlbum: Record loading: boolean error: string | null } const initialState: AlbumTracksState = { byAlbum: {}, loading: false, error: null, } const albumTracksSlice = createSlice({ name: 'albumTracks', initialState, reducers: { clearAlbumTracks(state) { state.byAlbum = {} state.error = null }, }, extraReducers: (builder) => { builder .addCase(fetchAlbumTracks.pending, (state) => { state.loading = true state.error = null }) .addCase(fetchAlbumTracks.fulfilled, (state, action) => { state.loading = false state.byAlbum[action.payload.albumSlug] = action.payload.tracks state.error = null }) .addCase(fetchAlbumTracks.rejected, (state, action) => { state.loading = false state.error = action.payload as string ?? 'Unknown error' }) }, }) export const { clearAlbumTracks } = albumTracksSlice.actions export default albumTracksSlice.reducer