diff --git a/app/soapbox/actions/favourites.js b/app/soapbox/actions/favourites.js deleted file mode 100644 index c4bce15e9..000000000 --- a/app/soapbox/actions/favourites.js +++ /dev/null @@ -1,201 +0,0 @@ -import { isLoggedIn } from 'soapbox/utils/auth'; - -import api, { getLinks } from '../api'; - -import { importFetchedStatuses } from './importer'; - -export const FAVOURITED_STATUSES_FETCH_REQUEST = 'FAVOURITED_STATUSES_FETCH_REQUEST'; -export const FAVOURITED_STATUSES_FETCH_SUCCESS = 'FAVOURITED_STATUSES_FETCH_SUCCESS'; -export const FAVOURITED_STATUSES_FETCH_FAIL = 'FAVOURITED_STATUSES_FETCH_FAIL'; - -export const FAVOURITED_STATUSES_EXPAND_REQUEST = 'FAVOURITED_STATUSES_EXPAND_REQUEST'; -export const FAVOURITED_STATUSES_EXPAND_SUCCESS = 'FAVOURITED_STATUSES_EXPAND_SUCCESS'; -export const FAVOURITED_STATUSES_EXPAND_FAIL = 'FAVOURITED_STATUSES_EXPAND_FAIL'; - -export const ACCOUNT_FAVOURITED_STATUSES_FETCH_REQUEST = 'ACCOUNT_FAVOURITED_STATUSES_FETCH_REQUEST'; -export const ACCOUNT_FAVOURITED_STATUSES_FETCH_SUCCESS = 'ACCOUNT_FAVOURITED_STATUSES_FETCH_SUCCESS'; -export const ACCOUNT_FAVOURITED_STATUSES_FETCH_FAIL = 'ACCOUNT_FAVOURITED_STATUSES_FETCH_FAIL'; - -export const ACCOUNT_FAVOURITED_STATUSES_EXPAND_REQUEST = 'ACCOUNT_FAVOURITED_STATUSES_EXPAND_REQUEST'; -export const ACCOUNT_FAVOURITED_STATUSES_EXPAND_SUCCESS = 'ACCOUNT_FAVOURITED_STATUSES_EXPAND_SUCCESS'; -export const ACCOUNT_FAVOURITED_STATUSES_EXPAND_FAIL = 'ACCOUNT_FAVOURITED_STATUSES_EXPAND_FAIL'; - -export function fetchFavouritedStatuses() { - return (dispatch, getState) => { - if (!isLoggedIn(getState)) return; - - if (getState().getIn(['status_lists', 'favourites', 'isLoading'])) { - return; - } - - dispatch(fetchFavouritedStatusesRequest()); - - api(getState).get('/api/v1/favourites').then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedStatuses(response.data)); - dispatch(fetchFavouritedStatusesSuccess(response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(fetchFavouritedStatusesFail(error)); - }); - }; -} - -export function fetchFavouritedStatusesRequest() { - return { - type: FAVOURITED_STATUSES_FETCH_REQUEST, - skipLoading: true, - }; -} - -export function fetchFavouritedStatusesSuccess(statuses, next) { - return { - type: FAVOURITED_STATUSES_FETCH_SUCCESS, - statuses, - next, - skipLoading: true, - }; -} - -export function fetchFavouritedStatusesFail(error) { - return { - type: FAVOURITED_STATUSES_FETCH_FAIL, - error, - skipLoading: true, - }; -} - -export function expandFavouritedStatuses() { - return (dispatch, getState) => { - if (!isLoggedIn(getState)) return; - - const url = getState().getIn(['status_lists', 'favourites', 'next'], null); - - if (url === null || getState().getIn(['status_lists', 'favourites', 'isLoading'])) { - return; - } - - dispatch(expandFavouritedStatusesRequest()); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedStatuses(response.data)); - dispatch(expandFavouritedStatusesSuccess(response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(expandFavouritedStatusesFail(error)); - }); - }; -} - -export function expandFavouritedStatusesRequest() { - return { - type: FAVOURITED_STATUSES_EXPAND_REQUEST, - }; -} - -export function expandFavouritedStatusesSuccess(statuses, next) { - return { - type: FAVOURITED_STATUSES_EXPAND_SUCCESS, - statuses, - next, - }; -} - -export function expandFavouritedStatusesFail(error) { - return { - type: FAVOURITED_STATUSES_EXPAND_FAIL, - error, - }; -} - -export function fetchAccountFavouritedStatuses(accountId) { - return (dispatch, getState) => { - if (!isLoggedIn(getState)) return; - - if (getState().getIn(['status_lists', `favourites:${accountId}`, 'isLoading'])) { - return; - } - - dispatch(fetchAccountFavouritedStatusesRequest(accountId)); - - api(getState).get(`/api/v1/pleroma/accounts/${accountId}/favourites`).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedStatuses(response.data)); - dispatch(fetchAccountFavouritedStatusesSuccess(accountId, response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(fetchAccountFavouritedStatusesFail(accountId, error)); - }); - }; -} - -export function fetchAccountFavouritedStatusesRequest(accountId) { - return { - type: ACCOUNT_FAVOURITED_STATUSES_FETCH_REQUEST, - accountId, - skipLoading: true, - }; -} - -export function fetchAccountFavouritedStatusesSuccess(accountId, statuses, next) { - return { - type: ACCOUNT_FAVOURITED_STATUSES_FETCH_SUCCESS, - accountId, - statuses, - next, - skipLoading: true, - }; -} - -export function fetchAccountFavouritedStatusesFail(accountId, error) { - return { - type: ACCOUNT_FAVOURITED_STATUSES_FETCH_FAIL, - accountId, - error, - skipLoading: true, - }; -} - -export function expandAccountFavouritedStatuses(accountId) { - return (dispatch, getState) => { - if (!isLoggedIn(getState)) return; - - const url = getState().getIn(['status_lists', `favourites:${accountId}`, 'next'], null); - - if (url === null || getState().getIn(['status_lists', `favourites:${accountId}`, 'isLoading'])) { - return; - } - - dispatch(expandAccountFavouritedStatusesRequest(accountId)); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedStatuses(response.data)); - dispatch(expandAccountFavouritedStatusesSuccess(accountId, response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(expandAccountFavouritedStatusesFail(accountId, error)); - }); - }; -} - -export function expandAccountFavouritedStatusesRequest(accountId) { - return { - type: ACCOUNT_FAVOURITED_STATUSES_EXPAND_REQUEST, - accountId, - }; -} - -export function expandAccountFavouritedStatusesSuccess(accountId, statuses, next) { - return { - type: ACCOUNT_FAVOURITED_STATUSES_EXPAND_SUCCESS, - accountId, - statuses, - next, - }; -} - -export function expandAccountFavouritedStatusesFail(accountId, error) { - return { - type: ACCOUNT_FAVOURITED_STATUSES_EXPAND_FAIL, - accountId, - error, - }; -} diff --git a/app/soapbox/actions/favourites.ts b/app/soapbox/actions/favourites.ts new file mode 100644 index 000000000..da627ef73 --- /dev/null +++ b/app/soapbox/actions/favourites.ts @@ -0,0 +1,208 @@ +import { isLoggedIn } from 'soapbox/utils/auth'; + +import api, { getLinks } from '../api'; + +import { importFetchedStatuses } from './importer'; + +import type { AxiosError } from 'axios'; +import type { AppDispatch, RootState } from 'soapbox/store'; +import type { APIEntity } from 'soapbox/types/entities'; + +const FAVOURITED_STATUSES_FETCH_REQUEST = 'FAVOURITED_STATUSES_FETCH_REQUEST'; +const FAVOURITED_STATUSES_FETCH_SUCCESS = 'FAVOURITED_STATUSES_FETCH_SUCCESS'; +const FAVOURITED_STATUSES_FETCH_FAIL = 'FAVOURITED_STATUSES_FETCH_FAIL'; + +const FAVOURITED_STATUSES_EXPAND_REQUEST = 'FAVOURITED_STATUSES_EXPAND_REQUEST'; +const FAVOURITED_STATUSES_EXPAND_SUCCESS = 'FAVOURITED_STATUSES_EXPAND_SUCCESS'; +const FAVOURITED_STATUSES_EXPAND_FAIL = 'FAVOURITED_STATUSES_EXPAND_FAIL'; + +const ACCOUNT_FAVOURITED_STATUSES_FETCH_REQUEST = 'ACCOUNT_FAVOURITED_STATUSES_FETCH_REQUEST'; +const ACCOUNT_FAVOURITED_STATUSES_FETCH_SUCCESS = 'ACCOUNT_FAVOURITED_STATUSES_FETCH_SUCCESS'; +const ACCOUNT_FAVOURITED_STATUSES_FETCH_FAIL = 'ACCOUNT_FAVOURITED_STATUSES_FETCH_FAIL'; + +const ACCOUNT_FAVOURITED_STATUSES_EXPAND_REQUEST = 'ACCOUNT_FAVOURITED_STATUSES_EXPAND_REQUEST'; +const ACCOUNT_FAVOURITED_STATUSES_EXPAND_SUCCESS = 'ACCOUNT_FAVOURITED_STATUSES_EXPAND_SUCCESS'; +const ACCOUNT_FAVOURITED_STATUSES_EXPAND_FAIL = 'ACCOUNT_FAVOURITED_STATUSES_EXPAND_FAIL'; + +const fetchFavouritedStatuses = () => + (dispatch: AppDispatch, getState: () => RootState) => { + if (!isLoggedIn(getState)) return; + + if (getState().status_lists.get('favourites')?.isLoading) { + return; + } + + dispatch(fetchFavouritedStatusesRequest()); + + api(getState).get('/api/v1/favourites').then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); + dispatch(fetchFavouritedStatusesSuccess(response.data, next ? next.uri : null)); + }).catch(error => { + dispatch(fetchFavouritedStatusesFail(error)); + }); + }; + +const fetchFavouritedStatusesRequest = () => ({ + type: FAVOURITED_STATUSES_FETCH_REQUEST, + skipLoading: true, +}); + +const fetchFavouritedStatusesSuccess = (statuses: APIEntity[], next: string | null) => ({ + type: FAVOURITED_STATUSES_FETCH_SUCCESS, + statuses, + next, + skipLoading: true, +}); + +const fetchFavouritedStatusesFail = (error: AxiosError) => ({ + type: FAVOURITED_STATUSES_FETCH_FAIL, + error, + skipLoading: true, +}); + +const expandFavouritedStatuses = () => + (dispatch: AppDispatch, getState: () => RootState) => { + if (!isLoggedIn(getState)) return; + + const url = getState().status_lists.get('favourites')?.next || null; + + if (url === null || getState().status_lists.get('favourites')?.isLoading) { + return; + } + + dispatch(expandFavouritedStatusesRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); + dispatch(expandFavouritedStatusesSuccess(response.data, next ? next.uri : null)); + }).catch(error => { + dispatch(expandFavouritedStatusesFail(error)); + }); + }; + +const expandFavouritedStatusesRequest = () => ({ + type: FAVOURITED_STATUSES_EXPAND_REQUEST, +}); + +const expandFavouritedStatusesSuccess = (statuses: APIEntity[], next: string | null) => ({ + type: FAVOURITED_STATUSES_EXPAND_SUCCESS, + statuses, + next, +}); + +const expandFavouritedStatusesFail = (error: AxiosError) => ({ + type: FAVOURITED_STATUSES_EXPAND_FAIL, + error, +}); + +const fetchAccountFavouritedStatuses = (accountId: string) => + (dispatch: AppDispatch, getState: () => RootState) => { + if (!isLoggedIn(getState)) return; + + if (getState().status_lists.get(`favourites:${accountId}`)?.isLoading) { + return; + } + + dispatch(fetchAccountFavouritedStatusesRequest(accountId)); + + api(getState).get(`/api/v1/pleroma/accounts/${accountId}/favourites`).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); + dispatch(fetchAccountFavouritedStatusesSuccess(accountId, response.data, next ? next.uri : null)); + }).catch(error => { + dispatch(fetchAccountFavouritedStatusesFail(accountId, error)); + }); + }; + +const fetchAccountFavouritedStatusesRequest = (accountId: string) => ({ + type: ACCOUNT_FAVOURITED_STATUSES_FETCH_REQUEST, + accountId, + skipLoading: true, +}); + +const fetchAccountFavouritedStatusesSuccess = (accountId: string, statuses: APIEntity, next: string | null) => ({ + type: ACCOUNT_FAVOURITED_STATUSES_FETCH_SUCCESS, + accountId, + statuses, + next, + skipLoading: true, +}); + +const fetchAccountFavouritedStatusesFail = (accountId: string, error: AxiosError) => ({ + type: ACCOUNT_FAVOURITED_STATUSES_FETCH_FAIL, + accountId, + error, + skipLoading: true, +}); + +const expandAccountFavouritedStatuses = (accountId: string) => + (dispatch: AppDispatch, getState: () => RootState) => { + if (!isLoggedIn(getState)) return; + + const url = getState().status_lists.get(`favourites:${accountId}`)?.next || null; + + if (url === null || getState().status_lists.get(`favourites:${accountId}`)?.isLoading) { + return; + } + + dispatch(expandAccountFavouritedStatusesRequest(accountId)); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); + dispatch(expandAccountFavouritedStatusesSuccess(accountId, response.data, next ? next.uri : null)); + }).catch(error => { + dispatch(expandAccountFavouritedStatusesFail(accountId, error)); + }); + }; + +const expandAccountFavouritedStatusesRequest = (accountId: string) => ({ + type: ACCOUNT_FAVOURITED_STATUSES_EXPAND_REQUEST, + accountId, +}); + +const expandAccountFavouritedStatusesSuccess = (accountId: string, statuses: APIEntity[], next: string | null) => ({ + type: ACCOUNT_FAVOURITED_STATUSES_EXPAND_SUCCESS, + accountId, + statuses, + next, +}); + +const expandAccountFavouritedStatusesFail = (accountId: string, error: AxiosError) => ({ + type: ACCOUNT_FAVOURITED_STATUSES_EXPAND_FAIL, + accountId, + error, +}); + +export { + FAVOURITED_STATUSES_FETCH_REQUEST, + FAVOURITED_STATUSES_FETCH_SUCCESS, + FAVOURITED_STATUSES_FETCH_FAIL, + FAVOURITED_STATUSES_EXPAND_REQUEST, + FAVOURITED_STATUSES_EXPAND_SUCCESS, + FAVOURITED_STATUSES_EXPAND_FAIL, + ACCOUNT_FAVOURITED_STATUSES_FETCH_REQUEST, + ACCOUNT_FAVOURITED_STATUSES_FETCH_SUCCESS, + ACCOUNT_FAVOURITED_STATUSES_FETCH_FAIL, + ACCOUNT_FAVOURITED_STATUSES_EXPAND_REQUEST, + ACCOUNT_FAVOURITED_STATUSES_EXPAND_SUCCESS, + ACCOUNT_FAVOURITED_STATUSES_EXPAND_FAIL, + fetchFavouritedStatuses, + fetchFavouritedStatusesRequest, + fetchFavouritedStatusesSuccess, + fetchFavouritedStatusesFail, + expandFavouritedStatuses, + expandFavouritedStatusesRequest, + expandFavouritedStatusesSuccess, + expandFavouritedStatusesFail, + fetchAccountFavouritedStatuses, + fetchAccountFavouritedStatusesRequest, + fetchAccountFavouritedStatusesSuccess, + fetchAccountFavouritedStatusesFail, + expandAccountFavouritedStatuses, + expandAccountFavouritedStatusesRequest, + expandAccountFavouritedStatusesSuccess, + expandAccountFavouritedStatusesFail, +}; diff --git a/app/soapbox/actions/media.ts b/app/soapbox/actions/media.ts index b754c11e5..1a63d87d5 100644 --- a/app/soapbox/actions/media.ts +++ b/app/soapbox/actions/media.ts @@ -4,7 +4,7 @@ import api from '../api'; import type { AppDispatch, RootState } from 'soapbox/store'; -const noOp = (e) => {}; +const noOp = (e: any) => {}; const fetchMedia = (mediaId: string) => (dispatch: any, getState: () => RootState) => {