Add 'ReportContent' actions/reducers/selectors
This commit is contained in:
parent
fe885ae6de
commit
bcbb1c8185
6 changed files with 119 additions and 0 deletions
9
flow-typed/reportContent.js
vendored
Normal file
9
flow-typed/reportContent.js
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
// @flow
|
||||
import * as ACTIONS from 'constants/action_types';
|
||||
|
||||
declare type ReportContentState = {
|
||||
isReporting: boolean,
|
||||
error: string,
|
||||
};
|
||||
|
||||
|
|
@ -319,3 +319,8 @@ export const REACTIONS_NEW_STARTED = 'REACTIONS_NEW_STARTED';
|
|||
export const REACTIONS_NEW_FAILED = 'REACTIONS_NEW_FAILED';
|
||||
export const REACTIONS_LIKE_COMPLETED = 'REACTIONS_LIKE_COMPLETED';
|
||||
export const REACTIONS_DISLIKE_COMPLETED = 'REACTIONS_DISLIKE_COMPLETED';
|
||||
|
||||
// Report Content
|
||||
export const REPORT_CONTENT_STARTED = 'REPORT_CONTENT_STARTED';
|
||||
export const REPORT_CONTENT_COMPLETED = 'REPORT_CONTENT_COMPLETED';
|
||||
export const REPORT_CONTENT_FAILED = 'REPORT_CONTENT_FAILED';
|
||||
|
|
|
@ -16,6 +16,7 @@ import coinSwapReducer from 'redux/reducers/coinSwap';
|
|||
import searchReducer from 'redux/reducers/search';
|
||||
import reactionsReducer from 'redux/reducers/reactions';
|
||||
import syncReducer from 'redux/reducers/sync';
|
||||
import reportContentReducer from 'redux/reducers/reportContent';
|
||||
|
||||
export default (history) =>
|
||||
combineReducers({
|
||||
|
@ -32,6 +33,7 @@ export default (history) =>
|
|||
notifications: notificationsReducer,
|
||||
publish: publishReducer,
|
||||
reactions: reactionsReducer,
|
||||
reportContent: reportContentReducer,
|
||||
rewards: rewardsReducer,
|
||||
search: searchReducer,
|
||||
settings: settingsReducer,
|
||||
|
|
61
ui/redux/actions/reportContent.js
Normal file
61
ui/redux/actions/reportContent.js
Normal file
|
@ -0,0 +1,61 @@
|
|||
// @flow
|
||||
import * as ACTIONS from 'constants/action_types';
|
||||
import { COPYRIGHT_ISSUES, OTHER_LEGAL_ISSUES } from 'constants/report_content';
|
||||
|
||||
type Dispatch = (action: any) => any;
|
||||
|
||||
export const doReportContent = (category: string, params: string) => (dispatch: Dispatch) => {
|
||||
dispatch({
|
||||
type: ACTIONS.REPORT_CONTENT_STARTED,
|
||||
});
|
||||
|
||||
let REPORT_URL;
|
||||
switch (category) {
|
||||
case COPYRIGHT_ISSUES:
|
||||
REPORT_URL = 'https://reports.lbry.com/copyright_issue/new';
|
||||
break;
|
||||
case OTHER_LEGAL_ISSUES:
|
||||
REPORT_URL = 'https://reports.lbry.com/other_legal_issue/new';
|
||||
break;
|
||||
default:
|
||||
REPORT_URL = 'https://reports.lbry.com/common/new';
|
||||
break;
|
||||
}
|
||||
|
||||
fetch(`${REPORT_URL}?${params}`, { method: 'POST' })
|
||||
.then((response) => {
|
||||
if (response) {
|
||||
response
|
||||
.json()
|
||||
.then((json) => {
|
||||
if (json.success) {
|
||||
dispatch({
|
||||
type: ACTIONS.REPORT_CONTENT_COMPLETED,
|
||||
});
|
||||
} else {
|
||||
dispatch({
|
||||
type: ACTIONS.REPORT_CONTENT_FAILED,
|
||||
data: json.error,
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
dispatch({
|
||||
type: ACTIONS.REPORT_CONTENT_FAILED,
|
||||
data: 'Server error: Invalid response',
|
||||
});
|
||||
});
|
||||
} else {
|
||||
dispatch({
|
||||
type: ACTIONS.REPORT_CONTENT_FAILED,
|
||||
data: 'Server error: No response',
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
dispatch({
|
||||
type: ACTIONS.REPORT_CONTENT_FAILED,
|
||||
data: err,
|
||||
});
|
||||
});
|
||||
};
|
29
ui/redux/reducers/reportContent.js
Normal file
29
ui/redux/reducers/reportContent.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
// @flow
|
||||
import * as ACTIONS from 'constants/action_types';
|
||||
import { handleActions } from 'util/redux-utils';
|
||||
|
||||
const defaultState: ReportContentState = {
|
||||
isReporting: false,
|
||||
error: '',
|
||||
};
|
||||
|
||||
export default handleActions(
|
||||
{
|
||||
[ACTIONS.REPORT_CONTENT_STARTED]: (state: ReportContentState): ReportContentState => ({
|
||||
...state,
|
||||
isReporting: true,
|
||||
error: '',
|
||||
}),
|
||||
[ACTIONS.REPORT_CONTENT_COMPLETED]: (state: ReportContentState): ReportContentState => ({
|
||||
...state,
|
||||
isReporting: false,
|
||||
error: '',
|
||||
}),
|
||||
[ACTIONS.REPORT_CONTENT_FAILED]: (state: ReportContentState, action): ReportContentState => ({
|
||||
...state,
|
||||
isReporting: false,
|
||||
error: action.data,
|
||||
}),
|
||||
},
|
||||
defaultState
|
||||
);
|
13
ui/redux/selectors/reportContent.js
Normal file
13
ui/redux/selectors/reportContent.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
// @flow
|
||||
import { createSelector } from 'reselect';
|
||||
|
||||
type State = { reportContent: ReportContentState };
|
||||
|
||||
export const selectState = (state: State): ReportContentState => state.reportContent;
|
||||
|
||||
export const selectIsReportingContent: (state: State) => boolean = createSelector(
|
||||
selectState,
|
||||
(state) => state.isReporting
|
||||
);
|
||||
|
||||
export const selectReportContentError: (state: State) => string = createSelector(selectState, (state) => state.error);
|
Loading…
Reference in a new issue