276 lines
6.4 KiB
JavaScript
276 lines
6.4 KiB
JavaScript
import api, { getLinks } from '../api'
|
|
import { me } from '../initial_state'
|
|
|
|
//
|
|
|
|
export const ALBUMS_FETCH_REQUEST = 'ALBUMS_FETCH_REQUEST'
|
|
export const ALBUMS_FETCH_SUCCESS = 'ALBUMS_FETCH_SUCCESS'
|
|
export const ALBUMS_FETCH_FAIL = 'ALBUMS_FETCH_FAIL'
|
|
|
|
export const ALBUMS_EXPAND_REQUEST = 'ALBUMS_EXPAND_REQUEST'
|
|
export const ALBUMS_EXPAND_SUCCESS = 'ALBUMS_EXPAND_SUCCESS'
|
|
export const ALBUMS_EXPAND_FAIL = 'ALBUMS_EXPAND_FAIL'
|
|
|
|
//
|
|
|
|
export const ALBUM_CREATE_REQUEST = 'ALBUM_CREATE_REQUEST'
|
|
export const ALBUM_CREATE_SUCCESS = 'ALBUM_CREATE_SUCCESS'
|
|
export const ALBUM_CREATE_FAIL = 'ALBUM_CREATE_FAIL'
|
|
|
|
export const ALBUM_REMOVE_REQUEST = 'ALBUM_REMOVE_REQUEST'
|
|
export const ALBUM_REMOVE_SUCCESS = 'ALBUM_REMOVE_SUCCESS'
|
|
export const ALBUM_REMOVE_FAIL = 'ALBUM_REMOVE_FAIL'
|
|
|
|
export const ALBUM_EDIT_REQUEST = 'ALBUM_EDIT_REQUEST'
|
|
export const ALBUM_EDIT_SUCCESS = 'ALBUM_EDIT_SUCCESS'
|
|
export const ALBUM_EDIT_FAIL = 'ALBUM_EDIT_FAIL'
|
|
|
|
//
|
|
|
|
export const ALBUM_UPDATE_MEDIA_REQUEST = 'ALBUM_UPDATE_MEDIA_REQUEST'
|
|
export const ALBUM_UPDATE_MEDIA_SUCCESS = 'ALBUM_UPDATE_MEDIA_SUCCESS'
|
|
export const ALBUM_UPDATE_MEDIA_FAIL = 'ALBUM_UPDATE_MEDIA_FAIL'
|
|
|
|
export const SET_ALBUM_COVER_REQUEST = 'SET_ALBUM_COVER_REQUEST'
|
|
export const SET_ALBUM_COVER_SUCCESS = 'SET_ALBUM_COVER_SUCCESS'
|
|
export const SET_ALBUM_COVER_FAIL = 'SET_ALBUM_COVER_FAIL'
|
|
|
|
/**
|
|
*
|
|
*/
|
|
export const fetchAlbums = (accountId) => (dispatch, getState) => {
|
|
if (!accountId) return
|
|
|
|
if (getState().getIn(['album_lists', accountId, 'isLoading'])) {
|
|
return
|
|
}
|
|
|
|
dispatch(fetchAlbumsRequest(accountId))
|
|
|
|
api(getState).get(`/api/v1/album_lists/${accountId}`).then((response) => {
|
|
const next = getLinks(response).refs.find(link => link.rel === 'next')
|
|
dispatch(fetchAlbumsSuccess(response.data, accountId, next ? next.uri : null))
|
|
}).catch((error) => {
|
|
dispatch(fetchAlbumsFail(accountId, error))
|
|
})
|
|
}
|
|
|
|
const fetchAlbumsRequest = (accountId) => ({
|
|
type: ALBUMS_FETCH_REQUEST,
|
|
accountId,
|
|
})
|
|
|
|
const fetchAlbumsSuccess = (albums, accountId, next) => ({
|
|
type: ALBUMS_FETCH_SUCCESS,
|
|
albums,
|
|
accountId,
|
|
next,
|
|
})
|
|
|
|
const fetchAlbumsFail = (accountId, error) => ({
|
|
type: ALBUMS_FETCH_FAIL,
|
|
showToast: true,
|
|
accountId,
|
|
error,
|
|
})
|
|
|
|
/**
|
|
*
|
|
*/
|
|
export const expandAlbums = (accountId) => (dispatch, getState) => {
|
|
if (!me) return
|
|
|
|
const url = getState().getIn(['album_lists', accountId, 'next'], null)
|
|
|
|
if (url === null || getState().getIn(['album_lists', accountId, 'isLoading'])) {
|
|
return
|
|
}
|
|
|
|
dispatch(expandAlbumsRequest(accountId))
|
|
|
|
api(getState).get(url).then((response) => {
|
|
const next = getLinks(response).refs.find(link => link.rel === 'next')
|
|
dispatch(expandAlbumsSuccess(response.data, accountId, next ? next.uri : null))
|
|
}).catch((error) => {
|
|
dispatch(expandAlbumsFail(accountId, error))
|
|
})
|
|
}
|
|
|
|
const expandAlbumsRequest = (accountId) => ({
|
|
type: ALBUMS_EXPAND_REQUEST,
|
|
accountId,
|
|
})
|
|
|
|
const expandAlbumsSuccess = (statuses, accountId, next) => ({
|
|
type: ALBUMS_EXPAND_SUCCESS,
|
|
accountId,
|
|
statuses,
|
|
next,
|
|
})
|
|
|
|
const expandAlbumsFail = (accountId, error) => ({
|
|
type: ALBUMS_EXPAND_FAIL,
|
|
showToast: true,
|
|
accountId,
|
|
error,
|
|
})
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
export const createAlbum = (title, description) => (dispatch, getState) => {
|
|
if (!me || !title) return
|
|
|
|
dispatch(createAlbumRequest())
|
|
|
|
api(getState).post('/api/v1/albums', {
|
|
title,
|
|
description,
|
|
}).then((response) => {
|
|
dispatch(createAlbumSuccess(response.data))
|
|
}).catch((error) => {
|
|
dispatch(createAlbumFail(error))
|
|
})
|
|
}
|
|
|
|
const createAlbumRequest = () => ({
|
|
type: ALBUM_CREATE_REQUEST,
|
|
})
|
|
|
|
const createAlbumSuccess = (bookmarkCollection) => ({
|
|
type: ALBUM_CREATE_SUCCESS,
|
|
bookmarkCollection,
|
|
})
|
|
|
|
const createAlbumFail = (error) => ({
|
|
type: ALBUM_CREATE_FAIL,
|
|
showToast: true,
|
|
error,
|
|
})
|
|
|
|
/**
|
|
*
|
|
*/
|
|
export const editAlbum = (albumId, title, description, visibility) => (dispatch, getState) => {
|
|
if (!me || !albumId || !title) return
|
|
|
|
dispatch(editAlbumRequest(albumId))
|
|
|
|
api(getState).put(`/api/v1/albums/${albumId}`, {
|
|
title,
|
|
description,
|
|
visibility,
|
|
}).then((response) => {
|
|
dispatch(editAlbumSuccess(response.data))
|
|
}).catch((error) => {
|
|
dispatch(editAlbumFail(error))
|
|
})
|
|
}
|
|
|
|
const editAlbumRequest = (albumId) => ({
|
|
type: ALBUM_EDIT_REQUEST,
|
|
albumId,
|
|
})
|
|
|
|
const editAlbumSuccess = (album) => ({
|
|
type: ALBUM_EDIT_SUCCESS,
|
|
album,
|
|
})
|
|
|
|
const editAlbumFail = (error) => ({
|
|
type: ALBUM_EDIT_FAIL,
|
|
showToast: true,
|
|
error,
|
|
})
|
|
|
|
/**
|
|
*
|
|
*/
|
|
export const removeAlbum = (albumId) => (dispatch, getState) => {
|
|
if (!me || !albumId) return
|
|
|
|
dispatch(removeAlbumRequest(albumId))
|
|
|
|
api(getState).delete(`/api/v1/albums/${albumId}`).then((response) => {
|
|
dispatch(removeAlbumSuccess(response.data))
|
|
}).catch((error) => {
|
|
dispatch(removeAlbumFail(error))
|
|
})
|
|
}
|
|
|
|
const removeAlbumRequest = (albumId) => ({
|
|
type: ALBUM_REMOVE_REQUEST,
|
|
albumId,
|
|
})
|
|
|
|
const removeAlbumSuccess = () => ({
|
|
type: ALBUM_REMOVE_SUCCESS,
|
|
})
|
|
|
|
const removeAlbumFail = (error) => ({
|
|
type: ALBUM_REMOVE_FAIL,
|
|
showToast: true,
|
|
error,
|
|
})
|
|
|
|
/**
|
|
*
|
|
*/
|
|
export const updateMediaAttachmentAlbum = (albumId, mediaAttachmentId) => (dispatch, getState) => {
|
|
if (!me || !albumId || !mediaAttachmentId) return
|
|
|
|
dispatch(updateMediaAttachmentAlbumRequest())
|
|
|
|
api(getState).post(`/api/v1/albums/${albumId}/update_status`, { statusId }).then((response) => {
|
|
dispatch(updateMediaAttachmentAlbumSuccess(response.data))
|
|
}).catch((error) => {
|
|
dispatch(updateMediaAlbumFail(error))
|
|
})
|
|
}
|
|
|
|
const updateMediaAttachmentAlbumRequest = () => ({
|
|
type: ALBUM_UPDATE_MEDIA_REQUEST,
|
|
})
|
|
|
|
const updateMediaAttachmentAlbumSuccess = (album) => ({
|
|
type: ALBUM_UPDATE_MEDIA_SUCCESS,
|
|
album,
|
|
})
|
|
|
|
const updateMediaAlbumFail = (error) => ({
|
|
type: ALBUM_UPDATE_MEDIA_FAIL,
|
|
showToast: true,
|
|
error,
|
|
})
|
|
|
|
/**
|
|
*
|
|
*/
|
|
export const setAlbumCover = (albumId, mediaAttachmentId) => (dispatch, getState) => {
|
|
if (!me || !albumId || !mediaAttachmentId) return
|
|
|
|
dispatch(setAlbumCoverRequest())
|
|
|
|
api(getState).post(`/api/v1/albums/${albumId}/set_cover`, { mediaAttachmentId }).then((response) => {
|
|
dispatch(setAlbumCoverSuccess(response.data))
|
|
}).catch((error) => {
|
|
dispatch(setAlbumCoverFail(error))
|
|
})
|
|
}
|
|
|
|
const setAlbumCoverRequest = () => ({
|
|
type: SET_ALBUM_COVER_REQUEST,
|
|
})
|
|
|
|
const setAlbumCoverSuccess = (album) => ({
|
|
type: SET_ALBUM_COVER_SUCCESS,
|
|
album,
|
|
})
|
|
|
|
const setAlbumCoverFail = (error) => ({
|
|
type: SET_ALBUM_COVER_FAIL,
|
|
showToast: true,
|
|
error,
|
|
})
|