63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
|
// @flow
|
||
|
import * as ACTIONS from 'constants/action_types';
|
||
|
|
||
|
/*
|
||
|
test mock:
|
||
|
currentUploads: {
|
||
|
'test#upload': {
|
||
|
progress: 50,
|
||
|
params: {
|
||
|
name: 'steve',
|
||
|
thumbnail_url: 'https://dev2.spee.ch/4/KMNtoSZ009fawGz59VG8PrID.jpeg',
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
*/
|
||
|
|
||
|
export type Params = {
|
||
|
channel?: string,
|
||
|
name: string,
|
||
|
thumbnail_url: ?string,
|
||
|
title: ?string,
|
||
|
};
|
||
|
|
||
|
export type UploadItem = {
|
||
|
progess: string,
|
||
|
params: Params,
|
||
|
xhr?: any,
|
||
|
};
|
||
|
|
||
|
export type TvState = {
|
||
|
currentUploads: { [key: string]: UploadItem },
|
||
|
};
|
||
|
|
||
|
const reducers = {};
|
||
|
|
||
|
const defaultState: TvState = {
|
||
|
currentUploads: {},
|
||
|
};
|
||
|
|
||
|
reducers[ACTIONS.UPDATE_UPLOAD_PROGRESS] = (state: TvState, action) => {
|
||
|
const { progress, params, xhr } = action.data;
|
||
|
const key = params.channel ? `${params.name}#${params.channel}` : `${params.name}#anonymous`;
|
||
|
let currentUploads;
|
||
|
if (!progress) {
|
||
|
currentUploads = Object.assign({}, state.currentUploads);
|
||
|
Object.keys(currentUploads).forEach(k => {
|
||
|
if (k === key) {
|
||
|
delete currentUploads[key];
|
||
|
}
|
||
|
});
|
||
|
} else {
|
||
|
currentUploads = Object.assign({}, state.currentUploads);
|
||
|
currentUploads[key] = { progress, params, xhr };
|
||
|
}
|
||
|
return { ...state, currentUploads };
|
||
|
};
|
||
|
|
||
|
export function webReducer(state: TvState = defaultState, action: any) {
|
||
|
const handler = reducers[action.type];
|
||
|
if (handler) return handler(state, action);
|
||
|
return state;
|
||
|
}
|