This repository has been archived on 2022-09-16. You can view files and clone it, but cannot push or open issues/pull-requests.
tlaternet-templates/src/music/store/music/reducers.ts

54 lines
1.7 KiB
TypeScript
Raw Normal View History

import { createReducer } from "redux-act";
import update from "immutability-helper";
import {
2021-04-07 23:23:21 +01:00
Title,
MusicState,
setTitle,
toggleMute,
togglePlay,
setSource,
} from "./types";
const defaultTitle: Title = {
2021-04-07 23:23:21 +01:00
name: "Untitled",
artist: "Unknown Artist",
album: "Unknown Album",
length: 0,
};
const initialState: MusicState = {
2021-04-07 23:23:21 +01:00
muted: false,
playing: false,
title: defaultTitle,
playTime: 0,
};
export const musicStateReducer = createReducer<MusicState>(
2021-04-07 23:23:21 +01:00
{
2022-08-03 01:48:06 +01:00
// @ts-expect-error - These appear to be working, even if functions
2022-08-01 22:07:15 +01:00
// are technically prohibited, and were recommended upstream
2021-04-07 23:23:21 +01:00
[setTitle]: (state: MusicState, title: Title): MusicState => {
return update(state, {
title: { $set: title },
});
},
2022-08-03 01:48:06 +01:00
// @ts-expect-error - These appear to be working, even if functions
2022-08-01 22:07:15 +01:00
// are technically prohibited, and were recommended upstream
2021-04-07 23:23:21 +01:00
[togglePlay]: (state: MusicState): MusicState => {
return update(state, { $toggle: ["playing"] });
},
2022-08-03 01:48:06 +01:00
// @ts-expect-error - These appear to be working, even if functions
2022-08-01 22:07:15 +01:00
// are technically prohibited, and were recommended upstream
2021-04-07 23:23:21 +01:00
[toggleMute]: (state: MusicState): MusicState => {
return update(state, { $toggle: ["muted"] });
},
2022-08-03 01:48:06 +01:00
// @ts-expect-error - These appear to be working, even if functions
2022-08-01 22:07:15 +01:00
// are technically prohibited, and were recommended upstream
2021-04-07 23:23:21 +01:00
[setSource]: (state: MusicState, source: string): MusicState => {
return update(state, { source: { $set: source } });
},
},
2021-04-07 23:23:21 +01:00
initialState
);