|
@@ -4,12 +4,52 @@ export const LIST_FETCH_REQUEST = 'LIST_FETCH_REQUEST';
|
|
|
export const LIST_FETCH_SUCCESS = 'LIST_FETCH_SUCCESS';
|
|
|
export const LIST_FETCH_FAIL = 'LIST_FETCH_FAIL';
|
|
|
|
|
|
+export const LISTS_FETCH_REQUEST = 'LISTS_FETCH_REQUEST';
|
|
|
+export const LISTS_FETCH_SUCCESS = 'LISTS_FETCH_SUCCESS';
|
|
|
+export const LISTS_FETCH_FAIL = 'LISTS_FETCH_FAIL';
|
|
|
+
|
|
|
+export const LIST_EDITOR_TITLE_CHANGE = 'LIST_EDITOR_TITLE_CHANGE';
|
|
|
+export const LIST_EDITOR_RESET = 'LIST_EDITOR_RESET';
|
|
|
+export const LIST_EDITOR_SETUP = 'LIST_EDITOR_SETUP';
|
|
|
+
|
|
|
+export const LIST_CREATE_REQUEST = 'LIST_CREATE_REQUEST';
|
|
|
+export const LIST_CREATE_SUCCESS = 'LIST_CREATE_SUCCESS';
|
|
|
+export const LIST_CREATE_FAIL = 'LIST_CREATE_FAIL';
|
|
|
+
|
|
|
+export const LIST_UPDATE_REQUEST = 'LIST_UPDATE_REQUEST';
|
|
|
+export const LIST_UPDATE_SUCCESS = 'LIST_UPDATE_SUCCESS';
|
|
|
+export const LIST_UPDATE_FAIL = 'LIST_UPDATE_FAIL';
|
|
|
+
|
|
|
+export const LIST_DELETE_REQUEST = 'LIST_DELETE_REQUEST';
|
|
|
+export const LIST_DELETE_SUCCESS = 'LIST_DELETE_SUCCESS';
|
|
|
+export const LIST_DELETE_FAIL = 'LIST_DELETE_FAIL';
|
|
|
+
|
|
|
+export const LIST_ACCOUNTS_FETCH_REQUEST = 'LIST_ACCOUNTS_FETCH_REQUEST';
|
|
|
+export const LIST_ACCOUNTS_FETCH_SUCCESS = 'LIST_ACCOUNTS_FETCH_SUCCESS';
|
|
|
+export const LIST_ACCOUNTS_FETCH_FAIL = 'LIST_ACCOUNTS_FETCH_FAIL';
|
|
|
+
|
|
|
+export const LIST_EDITOR_SUGGESTIONS_CHANGE = 'LIST_EDITOR_SUGGESTIONS_CHANGE';
|
|
|
+export const LIST_EDITOR_SUGGESTIONS_READY = 'LIST_EDITOR_SUGGESTIONS_READY';
|
|
|
+export const LIST_EDITOR_SUGGESTIONS_CLEAR = 'LIST_EDITOR_SUGGESTIONS_CLEAR';
|
|
|
+
|
|
|
+export const LIST_EDITOR_ADD_REQUEST = 'LIST_EDITOR_ADD_REQUEST';
|
|
|
+export const LIST_EDITOR_ADD_SUCCESS = 'LIST_EDITOR_ADD_SUCCESS';
|
|
|
+export const LIST_EDITOR_ADD_FAIL = 'LIST_EDITOR_ADD_FAIL';
|
|
|
+
|
|
|
+export const LIST_EDITOR_REMOVE_REQUEST = 'LIST_EDITOR_REMOVE_REQUEST';
|
|
|
+export const LIST_EDITOR_REMOVE_SUCCESS = 'LIST_EDITOR_REMOVE_SUCCESS';
|
|
|
+export const LIST_EDITOR_REMOVE_FAIL = 'LIST_EDITOR_REMOVE_FAIL';
|
|
|
+
|
|
|
export const fetchList = id => (dispatch, getState) => {
|
|
|
+ if (getState().getIn(['lists', id])) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
dispatch(fetchListRequest(id));
|
|
|
|
|
|
api(getState).get(`/api/v1/lists/${id}`)
|
|
|
.then(({ data }) => dispatch(fetchListSuccess(data)))
|
|
|
- .catch(err => dispatch(fetchListFail(err)));
|
|
|
+ .catch(err => dispatch(fetchListFail(id, err)));
|
|
|
};
|
|
|
|
|
|
export const fetchListRequest = id => ({
|
|
@@ -22,7 +62,252 @@ export const fetchListSuccess = list => ({
|
|
|
list,
|
|
|
});
|
|
|
|
|
|
-export const fetchListFail = error => ({
|
|
|
+export const fetchListFail = (id, error) => ({
|
|
|
type: LIST_FETCH_FAIL,
|
|
|
+ id,
|
|
|
+ error,
|
|
|
+});
|
|
|
+
|
|
|
+export const fetchLists = () => (dispatch, getState) => {
|
|
|
+ dispatch(fetchListsRequest());
|
|
|
+
|
|
|
+ api(getState).get('/api/v1/lists')
|
|
|
+ .then(({ data }) => dispatch(fetchListsSuccess(data)))
|
|
|
+ .catch(err => dispatch(fetchListsFail(err)));
|
|
|
+};
|
|
|
+
|
|
|
+export const fetchListsRequest = () => ({
|
|
|
+ type: LISTS_FETCH_REQUEST,
|
|
|
+});
|
|
|
+
|
|
|
+export const fetchListsSuccess = lists => ({
|
|
|
+ type: LISTS_FETCH_SUCCESS,
|
|
|
+ lists,
|
|
|
+});
|
|
|
+
|
|
|
+export const fetchListsFail = error => ({
|
|
|
+ type: LISTS_FETCH_FAIL,
|
|
|
+ error,
|
|
|
+});
|
|
|
+
|
|
|
+export const submitListEditor = shouldReset => (dispatch, getState) => {
|
|
|
+ const listId = getState().getIn(['listEditor', 'listId']);
|
|
|
+ const title = getState().getIn(['listEditor', 'title']);
|
|
|
+
|
|
|
+ if (listId === null) {
|
|
|
+ dispatch(createList(title, shouldReset));
|
|
|
+ } else {
|
|
|
+ dispatch(updateList(listId, title, shouldReset));
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+export const setupListEditor = listId => (dispatch, getState) => {
|
|
|
+ dispatch({
|
|
|
+ type: LIST_EDITOR_SETUP,
|
|
|
+ list: getState().getIn(['lists', listId]),
|
|
|
+ });
|
|
|
+
|
|
|
+ dispatch(fetchListAccounts(listId));
|
|
|
+};
|
|
|
+
|
|
|
+export const changeListEditorTitle = value => ({
|
|
|
+ type: LIST_EDITOR_TITLE_CHANGE,
|
|
|
+ value,
|
|
|
+});
|
|
|
+
|
|
|
+export const createList = (title, shouldReset) => (dispatch, getState) => {
|
|
|
+ dispatch(createListRequest());
|
|
|
+
|
|
|
+ api(getState).post('/api/v1/lists', { title }).then(({ data }) => {
|
|
|
+ dispatch(createListSuccess(data));
|
|
|
+
|
|
|
+ if (shouldReset) {
|
|
|
+ dispatch(resetListEditor());
|
|
|
+ }
|
|
|
+ }).catch(err => dispatch(createListFail(err)));
|
|
|
+};
|
|
|
+
|
|
|
+export const createListRequest = () => ({
|
|
|
+ type: LIST_CREATE_REQUEST,
|
|
|
+});
|
|
|
+
|
|
|
+export const createListSuccess = list => ({
|
|
|
+ type: LIST_CREATE_SUCCESS,
|
|
|
+ list,
|
|
|
+});
|
|
|
+
|
|
|
+export const createListFail = error => ({
|
|
|
+ type: LIST_CREATE_FAIL,
|
|
|
+ error,
|
|
|
+});
|
|
|
+
|
|
|
+export const updateList = (id, title, shouldReset) => (dispatch, getState) => {
|
|
|
+ dispatch(updateListRequest(id));
|
|
|
+
|
|
|
+ api(getState).put(`/api/v1/lists/${id}`, { title }).then(({ data }) => {
|
|
|
+ dispatch(updateListSuccess(data));
|
|
|
+
|
|
|
+ if (shouldReset) {
|
|
|
+ dispatch(resetListEditor());
|
|
|
+ }
|
|
|
+ }).catch(err => dispatch(updateListFail(id, err)));
|
|
|
+};
|
|
|
+
|
|
|
+export const updateListRequest = id => ({
|
|
|
+ type: LIST_UPDATE_REQUEST,
|
|
|
+ id,
|
|
|
+});
|
|
|
+
|
|
|
+export const updateListSuccess = list => ({
|
|
|
+ type: LIST_UPDATE_SUCCESS,
|
|
|
+ list,
|
|
|
+});
|
|
|
+
|
|
|
+export const updateListFail = (id, error) => ({
|
|
|
+ type: LIST_UPDATE_FAIL,
|
|
|
+ id,
|
|
|
+ error,
|
|
|
+});
|
|
|
+
|
|
|
+export const resetListEditor = () => ({
|
|
|
+ type: LIST_EDITOR_RESET,
|
|
|
+});
|
|
|
+
|
|
|
+export const deleteList = id => (dispatch, getState) => {
|
|
|
+ dispatch(deleteListRequest(id));
|
|
|
+
|
|
|
+ api(getState).delete(`/api/v1/lists/${id}`)
|
|
|
+ .then(() => dispatch(deleteListSuccess(id)))
|
|
|
+ .catch(err => dispatch(deleteListFail(id, err)));
|
|
|
+};
|
|
|
+
|
|
|
+export const deleteListRequest = id => ({
|
|
|
+ type: LIST_DELETE_REQUEST,
|
|
|
+ id,
|
|
|
+});
|
|
|
+
|
|
|
+export const deleteListSuccess = id => ({
|
|
|
+ type: LIST_DELETE_SUCCESS,
|
|
|
+ id,
|
|
|
+});
|
|
|
+
|
|
|
+export const deleteListFail = (id, error) => ({
|
|
|
+ type: LIST_DELETE_FAIL,
|
|
|
+ id,
|
|
|
+ error,
|
|
|
+});
|
|
|
+
|
|
|
+export const fetchListAccounts = listId => (dispatch, getState) => {
|
|
|
+ dispatch(fetchListAccountsRequest(listId));
|
|
|
+
|
|
|
+ api(getState).get(`/api/v1/lists/${listId}/accounts`, { params: { limit: 0 } })
|
|
|
+ .then(({ data }) => dispatch(fetchListAccountsSuccess(listId, data)))
|
|
|
+ .catch(err => dispatch(fetchListAccountsFail(listId, err)));
|
|
|
+};
|
|
|
+
|
|
|
+export const fetchListAccountsRequest = id => ({
|
|
|
+ type: LIST_ACCOUNTS_FETCH_REQUEST,
|
|
|
+ id,
|
|
|
+});
|
|
|
+
|
|
|
+export const fetchListAccountsSuccess = (id, accounts, next) => ({
|
|
|
+ type: LIST_ACCOUNTS_FETCH_SUCCESS,
|
|
|
+ id,
|
|
|
+ accounts,
|
|
|
+ next,
|
|
|
+});
|
|
|
+
|
|
|
+export const fetchListAccountsFail = (id, error) => ({
|
|
|
+ type: LIST_ACCOUNTS_FETCH_FAIL,
|
|
|
+ id,
|
|
|
+ error,
|
|
|
+});
|
|
|
+
|
|
|
+export const fetchListSuggestions = q => (dispatch, getState) => {
|
|
|
+ const params = {
|
|
|
+ q,
|
|
|
+ resolve: false,
|
|
|
+ limit: 4,
|
|
|
+ following: true,
|
|
|
+ };
|
|
|
+
|
|
|
+ api(getState).get('/api/v1/accounts/search', { params })
|
|
|
+ .then(({ data }) => dispatch(fetchListSuggestionsReady(q, data)));
|
|
|
+};
|
|
|
+
|
|
|
+export const fetchListSuggestionsReady = (query, accounts) => ({
|
|
|
+ type: LIST_EDITOR_SUGGESTIONS_READY,
|
|
|
+ query,
|
|
|
+ accounts,
|
|
|
+});
|
|
|
+
|
|
|
+export const clearListSuggestions = () => ({
|
|
|
+ type: LIST_EDITOR_SUGGESTIONS_CLEAR,
|
|
|
+});
|
|
|
+
|
|
|
+export const changeListSuggestions = value => ({
|
|
|
+ type: LIST_EDITOR_SUGGESTIONS_CHANGE,
|
|
|
+ value,
|
|
|
+});
|
|
|
+
|
|
|
+export const addToListEditor = accountId => (dispatch, getState) => {
|
|
|
+ dispatch(addToList(getState().getIn(['listEditor', 'listId']), accountId));
|
|
|
+};
|
|
|
+
|
|
|
+export const addToList = (listId, accountId) => (dispatch, getState) => {
|
|
|
+ dispatch(addToListRequest(listId, accountId));
|
|
|
+
|
|
|
+ api(getState).post(`/api/v1/lists/${listId}/accounts`, { account_ids: [accountId] })
|
|
|
+ .then(() => dispatch(addToListSuccess(listId, accountId)))
|
|
|
+ .catch(err => dispatch(addToListFail(listId, accountId, err)));
|
|
|
+};
|
|
|
+
|
|
|
+export const addToListRequest = (listId, accountId) => ({
|
|
|
+ type: LIST_EDITOR_ADD_REQUEST,
|
|
|
+ listId,
|
|
|
+ accountId,
|
|
|
+});
|
|
|
+
|
|
|
+export const addToListSuccess = (listId, accountId) => ({
|
|
|
+ type: LIST_EDITOR_ADD_SUCCESS,
|
|
|
+ listId,
|
|
|
+ accountId,
|
|
|
+});
|
|
|
+
|
|
|
+export const addToListFail = (listId, accountId, error) => ({
|
|
|
+ type: LIST_EDITOR_ADD_FAIL,
|
|
|
+ listId,
|
|
|
+ accountId,
|
|
|
+ error,
|
|
|
+});
|
|
|
+
|
|
|
+export const removeFromListEditor = accountId => (dispatch, getState) => {
|
|
|
+ dispatch(removeFromList(getState().getIn(['listEditor', 'listId']), accountId));
|
|
|
+};
|
|
|
+
|
|
|
+export const removeFromList = (listId, accountId) => (dispatch, getState) => {
|
|
|
+ dispatch(removeFromListRequest(listId, accountId));
|
|
|
+
|
|
|
+ api(getState).delete(`/api/v1/lists/${listId}/accounts`, { params: { account_ids: [accountId] } })
|
|
|
+ .then(() => dispatch(removeFromListSuccess(listId, accountId)))
|
|
|
+ .catch(err => dispatch(removeFromListFail(listId, accountId, err)));
|
|
|
+};
|
|
|
+
|
|
|
+export const removeFromListRequest = (listId, accountId) => ({
|
|
|
+ type: LIST_EDITOR_REMOVE_REQUEST,
|
|
|
+ listId,
|
|
|
+ accountId,
|
|
|
+});
|
|
|
+
|
|
|
+export const removeFromListSuccess = (listId, accountId) => ({
|
|
|
+ type: LIST_EDITOR_REMOVE_SUCCESS,
|
|
|
+ listId,
|
|
|
+ accountId,
|
|
|
+});
|
|
|
+
|
|
|
+export const removeFromListFail = (listId, accountId, error) => ({
|
|
|
+ type: LIST_EDITOR_REMOVE_FAIL,
|
|
|
+ listId,
|
|
|
+ accountId,
|
|
|
error,
|
|
|
});
|