lbrytv reducer: uploads
This commit is contained in:
parent
b4063b7684
commit
c8b39b5d10
5 changed files with 90 additions and 0 deletions
|
@ -127,3 +127,6 @@ export const SYNC_APPLY_STARTED = 'SYNC_APPLY_STARTED';
|
||||||
export const SYNC_APPLY_COMPLETED = 'SYNC_APPLY_COMPLETED';
|
export const SYNC_APPLY_COMPLETED = 'SYNC_APPLY_COMPLETED';
|
||||||
export const SYNC_APPLY_FAILED = 'SYNC_APPLY_FAILED';
|
export const SYNC_APPLY_FAILED = 'SYNC_APPLY_FAILED';
|
||||||
export const SYNC_RESET = 'SYNC_RESET';
|
export const SYNC_RESET = 'SYNC_RESET';
|
||||||
|
|
||||||
|
// Lbry.tv
|
||||||
|
export const UPDATE_UPLOAD_PROGRESS = 'UPDATE_UPLOAD_PROGRESS';
|
||||||
|
|
|
@ -75,6 +75,7 @@ export {
|
||||||
doResetSync,
|
doResetSync,
|
||||||
doSyncEncryptAndDecrypt,
|
doSyncEncryptAndDecrypt,
|
||||||
} from 'redux/actions/sync';
|
} from 'redux/actions/sync';
|
||||||
|
export { doUpdateUploadProgress } from 'redux/actions/lbrytv';
|
||||||
|
|
||||||
// reducers
|
// reducers
|
||||||
export { authReducer } from 'redux/reducers/auth';
|
export { authReducer } from 'redux/reducers/auth';
|
||||||
|
@ -87,6 +88,7 @@ export { filteredReducer } from 'redux/reducers/filtered';
|
||||||
export { homepageReducer } from 'redux/reducers/homepage';
|
export { homepageReducer } from 'redux/reducers/homepage';
|
||||||
export { statsReducer } from 'redux/reducers/stats';
|
export { statsReducer } from 'redux/reducers/stats';
|
||||||
export { syncReducer } from 'redux/reducers/sync';
|
export { syncReducer } from 'redux/reducers/sync';
|
||||||
|
export { lbrytvReducer } from 'redux/reducers/lbrytv';
|
||||||
|
|
||||||
// selectors
|
// selectors
|
||||||
export { selectAuthToken, selectIsAuthenticating } from 'redux/selectors/auth';
|
export { selectAuthToken, selectIsAuthenticating } from 'redux/selectors/auth';
|
||||||
|
@ -188,3 +190,4 @@ export {
|
||||||
selectHashChanged,
|
selectHashChanged,
|
||||||
selectSyncApplyErrorMessage,
|
selectSyncApplyErrorMessage,
|
||||||
} from 'redux/selectors/sync';
|
} from 'redux/selectors/sync';
|
||||||
|
export { selectCurrentUploads, selectUploadCount } from 'redux/selectors/lbrytv';
|
||||||
|
|
12
src/redux/actions/lbrytv.js
Normal file
12
src/redux/actions/lbrytv.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// @flow
|
||||||
|
import * as ACTIONS from 'constants/action_types';
|
||||||
|
|
||||||
|
export const doUpdateUploadProgress = (
|
||||||
|
progress: string,
|
||||||
|
params: { [key: string]: any },
|
||||||
|
xhr: any
|
||||||
|
) => (dispatch: Dispatch) =>
|
||||||
|
dispatch({
|
||||||
|
type: ACTIONS.UPDATE_UPLOAD_PROGRESS,
|
||||||
|
data: { progress, params, xhr },
|
||||||
|
});
|
62
src/redux/reducers/lbrytv.js
Normal file
62
src/redux/reducers/lbrytv.js
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
// @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 lbrytvReducer(state = defaultState, action) {
|
||||||
|
const handler = reducers[action.type];
|
||||||
|
if (handler) return handler(state, action);
|
||||||
|
return state;
|
||||||
|
}
|
10
src/redux/selectors/lbrytv.js
Normal file
10
src/redux/selectors/lbrytv.js
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import { createSelector } from 'reselect';
|
||||||
|
|
||||||
|
const selectState = state => state.lbrytv || {};
|
||||||
|
|
||||||
|
export const selectCurrentUploads = createSelector(selectState, state => state.currentUploads);
|
||||||
|
|
||||||
|
export const selectUploadCount = createSelector(
|
||||||
|
selectCurrentUploads,
|
||||||
|
currentUploads => currentUploads && Object.keys(currentUploads).length
|
||||||
|
);
|
Loading…
Add table
Reference in a new issue