webminidisc/src/redux/upload-dialog-feature.ts

60 lines
1.8 KiB
TypeScript

import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { enableBatching } from 'redux-batched-actions';
export interface LoadingDialogState {
visible: boolean;
writtenProgress: number;
encryptedProgress: number;
totalProgress: number;
trackTotal: number;
trackConverting: number;
trackCurrent: number;
titleCurrent: string;
titleConverting: string;
}
const initialState: LoadingDialogState = {
visible: false,
// Current Track Upload
writtenProgress: 0,
encryptedProgress: 0,
totalProgress: 1,
// Tracks done
trackTotal: 1,
trackConverting: 0,
trackCurrent: 0,
titleCurrent: '',
titleConverting: '',
};
export const slice = createSlice({
name: 'uploadDialog',
initialState,
reducers: {
setVisible: (state, action: PayloadAction<boolean>) => {
state.visible = action.payload;
},
setWriteProgress: (state, action: PayloadAction<{ written: number; encrypted: number; total: number }>) => {
state.encryptedProgress = action.payload.encrypted;
state.writtenProgress = action.payload.written;
state.totalProgress = action.payload.total;
},
setTrackProgress: (
state,
action: PayloadAction<{ total: number; current: number; converting: number; titleCurrent: string; titleConverting: string }>
) => {
state.trackTotal = action.payload.total;
state.trackCurrent = action.payload.current;
state.trackConverting = action.payload.converting;
state.titleCurrent = action.payload.titleCurrent;
state.titleConverting = action.payload.titleConverting;
},
},
});
export const { reducer, actions } = slice;
export default enableBatching(reducer);