diff --git a/src/public/js/actions/actionCreators.js b/src/public/js/actions/actionCreators.js
index 32354e6..c630e2a 100644
--- a/src/public/js/actions/actionCreators.js
+++ b/src/public/js/actions/actionCreators.js
@@ -61,7 +61,9 @@ export function updateUser(config) {
return request(
'USER_UPDATE',
configureAxios().post('/users/edit', config),
- "User updated",
+ [
+ addAlertOk("User updated"),
+ ],
)
}
@@ -90,6 +92,13 @@ export function selectMovie(imdbId) {
}
}
+export function deleteMovieFromStore(imdbId) {
+ return {
+ type: 'DELETE_MOVIE',
+ imdbId
+ }
+}
+
export function searchMovies(search) {
return request(
'SEARCH_MOVIES',
@@ -104,6 +113,17 @@ export function getMovieDetails(imdbId) {
)
}
+export function deleteMovie(imdbId) {
+ return request(
+ 'MOVIE_DELETE',
+ configureAxios().delete(`/movies/${imdbId}`),
+ [
+ addAlertOk("Movie deleted"),
+ deleteMovieFromStore(imdbId),
+ ],
+ )
+}
+
export function fetchMovies(url) {
return request(
'MOVIE_LIST_FETCH',
@@ -153,6 +173,8 @@ export function addTorrent(url) {
configureAxios().post('/torrents', {
url: url,
}),
- "Torrent added",
+ [
+ addAlertOk("Torrent added"),
+ ],
)
}
diff --git a/src/public/js/components/movies/actions.js b/src/public/js/components/movies/actions.js
index 3af81d9..e78e634 100644
--- a/src/public/js/components/movies/actions.js
+++ b/src/public/js/components/movies/actions.js
@@ -10,6 +10,13 @@ export default function ActionsButton(props) {
movieId={props.movieId}
getDetails={props.getDetails}
/>
+ {(props.isUserAdmin && props.hasMovie) &&
+
+ }
);
}
@@ -43,3 +50,23 @@ class RefreshButton extends React.Component {
);
}
}
+
+class DeleteButton extends React.Component {
+ constructor(props) {
+ super(props);
+ this.handleClick = this.handleClick.bind(this);
+ }
+ handleClick(e) {
+ e.preventDefault();
+ this.props.deleteMovie(this.props.movieId);
+ }
+ render() {
+ return (
+
+ );
+ }
+}
diff --git a/src/public/js/components/movies/list.js b/src/public/js/components/movies/list.js
index 1834b7f..37866b7 100644
--- a/src/public/js/components/movies/list.js
+++ b/src/public/js/components/movies/list.js
@@ -8,9 +8,10 @@ import Loader from '../loader/loader'
function MovieButtons(props) {
const imdb_link = `http://www.imdb.com/title/${props.movie.imdb_id}`;
+ const hasMovie = (props.movie.polochon_url !== "")
return (
- {props.movie.polochon_url !== "" &&
+ {hasMovie &&
Download
@@ -27,6 +28,9 @@ function MovieButtons(props) {
fetching={props.fetching}
movieId={props.movie.imdb_id}
getDetails={props.getMovieDetails}
+ deleteMovie={props.deleteMovie}
+ isUserAdmin={props.isUserAdmin}
+ hasMovie={hasMovie}
/>
@@ -91,6 +95,8 @@ export default class MovieList extends React.Component {
fetching={this.props.movieStore.fetchingDetails}
getMovieDetails={this.props.getMovieDetails}
addTorrent={this.props.addTorrent}
+ deleteMovie={this.props.deleteMovie}
+ isUserAdmin={this.props.userStore.isAdmin}
/>
}
diff --git a/src/public/js/reducers/movies.js b/src/public/js/reducers/movies.js
index a05da07..83f9bd1 100644
--- a/src/public/js/reducers/movies.js
+++ b/src/public/js/reducers/movies.js
@@ -46,6 +46,11 @@ export default function movieStore(state = defaultState, action) {
movies: movies,
fetchingDetails: false,
})
+ case 'DELETE_MOVIE':
+ return Object.assign({}, state, {
+ movies: state.movies.filter((e) => (e.imdb_id !== action.imdbId)),
+ fetchingDetails: false,
+ })
case 'SELECT_MOVIE':
// Don't select the movie if we're fetching another movie's details
if (state.fetchingDetails) {
diff --git a/src/public/js/requests.js b/src/public/js/requests.js
index cf64b98..25424c8 100644
--- a/src/public/js/requests.js
+++ b/src/public/js/requests.js
@@ -16,7 +16,7 @@ export function configureAxios(headers = {}) {
// This function takes en event prefix to dispatch evens during the life of the
// request, it also take a promise (axios request)
-export function request(eventPrefix, promise, successMessage = null) {
+export function request(eventPrefix, promise, callbackEvents = null) {
// Events
const pending = `${eventPrefix}_PENDING`;
const fulfilled = `${eventPrefix}_FULFILLED`;
@@ -40,13 +40,10 @@ export function request(eventPrefix, promise, successMessage = null) {
type: fulfilled,
payload: response.data,
})
- if (successMessage) {
- dispatch({
- type: 'ADD_ALERT_OK',
- payload: {
- message: successMessage,
- },
- })
+ if (callbackEvents) {
+ for (let event of callbackEvents) {
+ dispatch(event);
+ }
}
})
.catch(error => {