diff --git a/.github/workflows/pl-fe.yaml b/.github/workflows/pl-fe.yaml index f0333f583..fad6f0d7b 100644 --- a/.github/workflows/pl-fe.yaml +++ b/.github/workflows/pl-fe.yaml @@ -12,7 +12,7 @@ jobs: name: Test and upload artifacts strategy: matrix: - node-version: [21.x] + node-version: [22.x] steps: - name: Install system dependencies diff --git a/.vscode/extensions.json b/.vscode/extensions.json index d1762aa9a..33be54684 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,6 +4,6 @@ "bradlc.vscode-tailwindcss", "stylelint.vscode-stylelint", "wix.vscode-import-cost", - "redhat.vscode-yaml" + "bradlc.vscode-tailwindcss" ] } diff --git a/packages/pl-api/lib/client.ts b/packages/pl-api/lib/client.ts index 407c41851..005934cd9 100644 --- a/packages/pl-api/lib/client.ts +++ b/packages/pl-api/lib/client.ts @@ -256,7 +256,7 @@ interface PlApiClientConstructorOpts { /** * @category Clients - * + * * Mastodon API client. */ class PlApiClient { diff --git a/packages/pl-api/lib/entities/backup.ts b/packages/pl-api/lib/entities/backup.ts index 8a49f4afa..5a142c07e 100644 --- a/packages/pl-api/lib/entities/backup.ts +++ b/packages/pl-api/lib/entities/backup.ts @@ -8,7 +8,7 @@ import { datetimeSchema, mimeSchema } from './utils'; */ const backupSchema = v.object({ id: v.pipe(v.unknown(), v.transform(String)), - contentType: mimeSchema, + content_type: mimeSchema, file_size: v.fallback(v.number(), 0), inserted_at: datetimeSchema, processed: v.fallback(v.boolean(), false), diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json index b7671a517..9fedde6dc 100644 --- a/packages/pl-api/package.json +++ b/packages/pl-api/package.json @@ -1,6 +1,6 @@ { "name": "pl-api", - "version": "1.0.0-rc.3", + "version": "1.0.0-rc.4", "type": "module", "homepage": "https://github.com/mkljczk/pl-fe/tree/develop/packages/pl-api", "repository": { diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json index e6b9be230..0adbc6b65 100644 --- a/packages/pl-fe/package.json +++ b/packages/pl-fe/package.json @@ -101,7 +101,7 @@ "multiselect-react-dropdown": "^2.0.25", "mutative": "^1.1.0", "path-browserify": "^1.0.1", - "pl-api": "^1.0.0-rc.3", + "pl-api": "^1.0.0-rc.4", "postcss": "^8.4.47", "process": "^0.11.10", "punycode": "^2.1.1", diff --git a/packages/pl-fe/src/actions/accounts.ts b/packages/pl-fe/src/actions/accounts.ts index 4da5c5ee7..0e32c425d 100644 --- a/packages/pl-fe/src/actions/accounts.ts +++ b/packages/pl-fe/src/actions/accounts.ts @@ -1,11 +1,8 @@ import { PLEROMA, type UpdateNotificationSettingsParams, - type Account, type CreateAccountParams, - type PlApiClient, type Relationship, - type Token, } from 'pl-api'; import { Entities } from 'pl-fe/entity-store/entities'; @@ -17,42 +14,14 @@ import { getClient, type PlfeResponse } from '../api'; import { importEntities } from './importer'; -import type { MinifiedSuggestion } from 'pl-fe/api/hooks/trends/use-suggested-accounts'; +import type { MinifiedSuggestion } from 'pl-fe/queries/trends/use-suggested-accounts'; import type { MinifiedStatus } from 'pl-fe/reducers/statuses'; import type { AppDispatch, RootState } from 'pl-fe/store'; import type { History } from 'pl-fe/types/history'; -const ACCOUNT_CREATE_REQUEST = 'ACCOUNT_CREATE_REQUEST' as const; -const ACCOUNT_CREATE_SUCCESS = 'ACCOUNT_CREATE_SUCCESS' as const; -const ACCOUNT_CREATE_FAIL = 'ACCOUNT_CREATE_FAIL' as const; - -const ACCOUNT_FETCH_REQUEST = 'ACCOUNT_FETCH_REQUEST' as const; -const ACCOUNT_FETCH_SUCCESS = 'ACCOUNT_FETCH_SUCCESS' as const; -const ACCOUNT_FETCH_FAIL = 'ACCOUNT_FETCH_FAIL' as const; - -const ACCOUNT_BLOCK_REQUEST = 'ACCOUNT_BLOCK_REQUEST' as const; const ACCOUNT_BLOCK_SUCCESS = 'ACCOUNT_BLOCK_SUCCESS' as const; -const ACCOUNT_BLOCK_FAIL = 'ACCOUNT_BLOCK_FAIL' as const; -const ACCOUNT_MUTE_REQUEST = 'ACCOUNT_MUTE_REQUEST' as const; const ACCOUNT_MUTE_SUCCESS = 'ACCOUNT_MUTE_SUCCESS' as const; -const ACCOUNT_MUTE_FAIL = 'ACCOUNT_MUTE_FAIL' as const; - -const PINNED_ACCOUNTS_FETCH_REQUEST = 'PINNED_ACCOUNTS_FETCH_REQUEST' as const; -const PINNED_ACCOUNTS_FETCH_SUCCESS = 'PINNED_ACCOUNTS_FETCH_SUCCESS' as const; -const PINNED_ACCOUNTS_FETCH_FAIL = 'PINNED_ACCOUNTS_FETCH_FAIL' as const; - -const ACCOUNT_SEARCH_REQUEST = 'ACCOUNT_SEARCH_REQUEST' as const; -const ACCOUNT_SEARCH_SUCCESS = 'ACCOUNT_SEARCH_SUCCESS' as const; -const ACCOUNT_SEARCH_FAIL = 'ACCOUNT_SEARCH_FAIL' as const; - -const ACCOUNT_LOOKUP_REQUEST = 'ACCOUNT_LOOKUP_REQUEST' as const; -const ACCOUNT_LOOKUP_SUCCESS = 'ACCOUNT_LOOKUP_SUCCESS' as const; -const ACCOUNT_LOOKUP_FAIL = 'ACCOUNT_LOOKUP_FAIL' as const; - -const NOTIFICATION_SETTINGS_REQUEST = 'NOTIFICATION_SETTINGS_REQUEST' as const; -const NOTIFICATION_SETTINGS_SUCCESS = 'NOTIFICATION_SETTINGS_SUCCESS' as const; -const NOTIFICATION_SETTINGS_FAIL = 'NOTIFICATION_SETTINGS_FAIL' as const; const maybeRedirectLogin = (error: { response: PlfeResponse }, history?: History) => { // The client is unauthorized - redirect to login. @@ -63,33 +32,11 @@ const maybeRedirectLogin = (error: { response: PlfeResponse }, history?: History const noOp = () => new Promise(f => f(undefined)); -interface AccountCreateRequestAction { - type: typeof ACCOUNT_CREATE_REQUEST; - params: CreateAccountParams; -} - -interface AccountCreateSuccessAction { - type: typeof ACCOUNT_CREATE_SUCCESS; - params: CreateAccountParams; - token: Token; -} - -interface AccountCreateFailAction { - type: typeof ACCOUNT_CREATE_FAIL; - params: CreateAccountParams; - error: unknown; -} - const createAccount = (params: CreateAccountParams) => - async (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ACCOUNT_CREATE_REQUEST, params }); - return getClient(getState()).settings.createAccount(params).then((token) => - dispatch({ type: ACCOUNT_CREATE_SUCCESS, params, token }), - ).catch(error => { - dispatch({ type: ACCOUNT_CREATE_FAIL, error, params }); - throw error; - }); - }; + async (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState()).settings.createAccount(params).then((token) => + ({ params, token }), + ); const fetchAccount = (accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { @@ -101,15 +48,11 @@ const fetchAccount = (accountId: string) => return Promise.resolve(null); } - dispatch(fetchAccountRequest(accountId)); - return getClient(getState()).accounts.getAccount(accountId) .then(response => { dispatch(importEntities({ accounts: [response] })); - dispatch(fetchAccountSuccess(response)); }) .catch(error => { - dispatch(fetchAccountFail(accountId, error)); }); }; @@ -122,16 +65,11 @@ const fetchAccountByUsername = (username: string, history?: History) => return getClient(getState()).accounts.getAccount(username).then(response => { dispatch(fetchRelationships([response.id])); dispatch(importEntities({ accounts: [response] })); - dispatch(fetchAccountSuccess(response)); - }).catch(error => { - dispatch(fetchAccountFail(null, error)); }); } else if (features.accountLookup) { return dispatch(accountLookup(username)).then(account => { dispatch(fetchRelationships([account.id])); - dispatch(fetchAccountSuccess(account)); }).catch(error => { - dispatch(fetchAccountFail(null, error)); maybeRedirectLogin(error, history); }); } else { @@ -140,39 +78,17 @@ const fetchAccountByUsername = (username: string, history?: History) => if (found) { dispatch(fetchRelationships([found.id])); - dispatch(fetchAccountSuccess(found)); } else { throw accounts; } - }).catch(error => { - dispatch(fetchAccountFail(null, error)); }); } }; -const fetchAccountRequest = (accountId: string) => ({ - type: ACCOUNT_FETCH_REQUEST, - accountId, -}); - -const fetchAccountSuccess = (account: Account) => ({ - type: ACCOUNT_FETCH_SUCCESS, - account, -}); - -const fetchAccountFail = (accountId: string | null, error: unknown) => ({ - type: ACCOUNT_FETCH_FAIL, - accountId, - error, - skipAlert: true, -}); - const blockAccount = (accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return null; - dispatch(blockAccountRequest(accountId)); - return getClient(getState).filtering.blockAccount(accountId) .then(response => { dispatch(importEntities({ relationships: [response] })); @@ -183,7 +99,7 @@ const blockAccount = (accountId: string) => // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers return dispatch(blockAccountSuccess(response, getState().statuses)); - }).catch(error => dispatch(blockAccountFail(error))); + }); }; const unblockAccount = (accountId: string) => @@ -196,21 +112,12 @@ const unblockAccount = (accountId: string) => }); }; -const blockAccountRequest = (accountId: string) => ({ - type: ACCOUNT_BLOCK_REQUEST, - accountId, -}); - const blockAccountSuccess = (relationship: Relationship, statuses: Record) => ({ type: ACCOUNT_BLOCK_SUCCESS, relationship, statuses, }); -const blockAccountFail = (error: unknown) => ({ - type: ACCOUNT_BLOCK_FAIL, - error, -}); const muteAccount = (accountId: string, notifications?: boolean, duration = 0) => (dispatch: AppDispatch, getState: () => RootState) => { @@ -218,8 +125,6 @@ const muteAccount = (accountId: string, notifications?: boolean, duration = 0) = const client = getClient(getState); - dispatch(muteAccountRequest(accountId)); - const params: Record = { notifications, }; @@ -244,8 +149,7 @@ const muteAccount = (accountId: string, notifications?: boolean, duration = 0) = // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers return dispatch(muteAccountSuccess(response, getState().statuses)); - }) - .catch(error => dispatch(muteAccountFail(accountId, error))); + }); }; const unmuteAccount = (accountId: string) => @@ -256,23 +160,12 @@ const unmuteAccount = (accountId: string) => .then(response => dispatch(importEntities({ relationships: [response] }))); }; -const muteAccountRequest = (accountId: string) => ({ - type: ACCOUNT_MUTE_REQUEST, - accountId, -}); - const muteAccountSuccess = (relationship: Relationship, statuses: Record) => ({ type: ACCOUNT_MUTE_SUCCESS, relationship, statuses, }); -const muteAccountFail = (accountId: string, error: unknown) => ({ - type: ACCOUNT_MUTE_FAIL, - accountId, - error, -}); - const removeFromFollowers = (accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return null; @@ -314,179 +207,35 @@ const unpinAccount = (accountId: string) => ); }; -interface NotificationSettingsRequestAction { - type: typeof NOTIFICATION_SETTINGS_REQUEST; - params: UpdateNotificationSettingsParams; -} - -interface NotificationSettingsSuccessAction { - type: typeof NOTIFICATION_SETTINGS_SUCCESS; - params: UpdateNotificationSettingsParams; - data: Awaited)['settings']['updateNotificationSettings']>>; -} - -interface NotificationSettingsFailAction { - type: typeof NOTIFICATION_SETTINGS_FAIL; - params: UpdateNotificationSettingsParams; - error: unknown; -} - const updateNotificationSettings = (params: UpdateNotificationSettingsParams) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: NOTIFICATION_SETTINGS_REQUEST, params }); - return getClient(getState).settings.updateNotificationSettings(params).then((data) => { - dispatch({ type: NOTIFICATION_SETTINGS_SUCCESS, params, data }); - }).catch(error => { - dispatch({ type: NOTIFICATION_SETTINGS_FAIL, params, error }); - throw error; - }); - }; - -const fetchPinnedAccounts = (accountId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(fetchPinnedAccountsRequest(accountId)); - - return getClient(getState).accounts.getAccountEndorsements(accountId).then(response => { - dispatch(importEntities({ accounts: response })); - dispatch(fetchPinnedAccountsSuccess(accountId, response, null)); - }).catch(error => { - dispatch(fetchPinnedAccountsFail(accountId, error)); - }); - }; - -const fetchPinnedAccountsRequest = (accountId: string) => ({ - type: PINNED_ACCOUNTS_FETCH_REQUEST, - accountId, -}); - -const fetchPinnedAccountsSuccess = (accountId: string, accounts: Array, next: null) => ({ - type: PINNED_ACCOUNTS_FETCH_SUCCESS, - accountId, - accounts, - next, -}); - -const fetchPinnedAccountsFail = (accountId: string, error: unknown) => ({ - type: PINNED_ACCOUNTS_FETCH_FAIL, - accountId, - error, -}); - -interface AccountSearchRequestAction { - type: typeof ACCOUNT_SEARCH_REQUEST; - params: { - q: string; - }; -} - -interface AccountSearchSuccessAction { - type: typeof ACCOUNT_SEARCH_SUCCESS; - accounts: Array; -} - -interface AccountSearchFailAction { - type: typeof ACCOUNT_SEARCH_FAIL; - skipAlert: true; -} + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.updateNotificationSettings(params).then((data) => ({ params, data })); const accountSearch = (q: string, signal?: AbortSignal) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ACCOUNT_SEARCH_REQUEST, params: { q } }); - return getClient(getState()).accounts.searchAccounts(q, { resolve: false, limit: 4, following: true }, { signal }).then((accounts) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState()).accounts.searchAccounts(q, { resolve: false, limit: 4, following: true }, { signal }).then((accounts) => { dispatch(importEntities({ accounts })); - dispatch({ type: ACCOUNT_SEARCH_SUCCESS, accounts }); return accounts; - }).catch(error => { - dispatch({ type: ACCOUNT_SEARCH_FAIL, skipAlert: true }); - throw error; }); - }; - -interface AccountLookupRequestAction { - type: typeof ACCOUNT_LOOKUP_REQUEST; - acct: string; -} - -interface AccountLookupSuccessAction { - type: typeof ACCOUNT_LOOKUP_SUCCESS; - account: Account; -} - -interface AccountLookupFailAction { - type: typeof ACCOUNT_LOOKUP_FAIL; -} const accountLookup = (acct: string, signal?: AbortSignal) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ACCOUNT_LOOKUP_REQUEST, acct }); - return getClient(getState()).accounts.lookupAccount(acct, { signal }).then((account) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState()).accounts.lookupAccount(acct, { signal }).then((account) => { if (account && account.id) dispatch(importEntities({ accounts: [account] })); - dispatch({ type: ACCOUNT_LOOKUP_SUCCESS, account }); return account; - }).catch(error => { - dispatch({ type: ACCOUNT_LOOKUP_FAIL }); - throw error; }); - }; const biteAccount = (accountId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - const client = getClient(getState); - - return client.accounts.biteAccount(accountId); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).accounts.biteAccount(accountId); type AccountsAction = - | AccountCreateRequestAction - | AccountCreateSuccessAction - | AccountCreateFailAction - | ReturnType - | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | NotificationSettingsRequestAction - | NotificationSettingsSuccessAction - | NotificationSettingsFailAction - | ReturnType - | ReturnType - | ReturnType - | AccountSearchRequestAction - | AccountSearchSuccessAction - | AccountSearchFailAction - | AccountLookupRequestAction - | AccountLookupSuccessAction - | AccountLookupFailAction; + | ReturnType; export { - ACCOUNT_CREATE_REQUEST, - ACCOUNT_CREATE_SUCCESS, - ACCOUNT_CREATE_FAIL, - ACCOUNT_FETCH_REQUEST, - ACCOUNT_FETCH_SUCCESS, - ACCOUNT_FETCH_FAIL, - ACCOUNT_BLOCK_REQUEST, ACCOUNT_BLOCK_SUCCESS, - ACCOUNT_BLOCK_FAIL, - ACCOUNT_MUTE_REQUEST, ACCOUNT_MUTE_SUCCESS, - ACCOUNT_MUTE_FAIL, - PINNED_ACCOUNTS_FETCH_REQUEST, - PINNED_ACCOUNTS_FETCH_SUCCESS, - PINNED_ACCOUNTS_FETCH_FAIL, - ACCOUNT_SEARCH_REQUEST, - ACCOUNT_SEARCH_SUCCESS, - ACCOUNT_SEARCH_FAIL, - ACCOUNT_LOOKUP_REQUEST, - ACCOUNT_LOOKUP_SUCCESS, - ACCOUNT_LOOKUP_FAIL, - NOTIFICATION_SETTINGS_REQUEST, - NOTIFICATION_SETTINGS_SUCCESS, - NOTIFICATION_SETTINGS_FAIL, createAccount, fetchAccount, fetchAccountByUsername, @@ -499,7 +248,6 @@ export { pinAccount, unpinAccount, updateNotificationSettings, - fetchPinnedAccounts, accountSearch, accountLookup, biteAccount, diff --git a/packages/pl-fe/src/actions/admin.ts b/packages/pl-fe/src/actions/admin.ts index 4d45f307f..afa3476aa 100644 --- a/packages/pl-fe/src/actions/admin.ts +++ b/packages/pl-fe/src/actions/admin.ts @@ -9,53 +9,21 @@ import { deleteFromTimelines } from './timelines'; import type { Account, AdminAccount, AdminGetAccountsParams, AdminGetReportsParams, AdminReport, PaginatedResponse, PleromaConfig, Status } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const ADMIN_CONFIG_FETCH_REQUEST = 'ADMIN_CONFIG_FETCH_REQUEST' as const; const ADMIN_CONFIG_FETCH_SUCCESS = 'ADMIN_CONFIG_FETCH_SUCCESS' as const; -const ADMIN_CONFIG_FETCH_FAIL = 'ADMIN_CONFIG_FETCH_FAIL' as const; const ADMIN_CONFIG_UPDATE_REQUEST = 'ADMIN_CONFIG_UPDATE_REQUEST' as const; const ADMIN_CONFIG_UPDATE_SUCCESS = 'ADMIN_CONFIG_UPDATE_SUCCESS' as const; -const ADMIN_CONFIG_UPDATE_FAIL = 'ADMIN_CONFIG_UPDATE_FAIL' as const; -const ADMIN_REPORTS_FETCH_REQUEST = 'ADMIN_REPORTS_FETCH_REQUEST' as const; const ADMIN_REPORTS_FETCH_SUCCESS = 'ADMIN_REPORTS_FETCH_SUCCESS' as const; -const ADMIN_REPORTS_FETCH_FAIL = 'ADMIN_REPORTS_FETCH_FAIL' as const; -const ADMIN_REPORT_PATCH_REQUEST = 'ADMIN_REPORT_PATCH_REQUEST' as const; const ADMIN_REPORT_PATCH_SUCCESS = 'ADMIN_REPORT_PATCH_SUCCESS' as const; -const ADMIN_REPORT_PATCH_FAIL = 'ADMIN_REPORT_PATCH_FAIL' as const; -const ADMIN_USERS_FETCH_REQUEST = 'ADMIN_USERS_FETCH_REQUEST' as const; const ADMIN_USERS_FETCH_SUCCESS = 'ADMIN_USERS_FETCH_SUCCESS' as const; -const ADMIN_USERS_FETCH_FAIL = 'ADMIN_USERS_FETCH_FAIL' as const; -const ADMIN_USER_DELETE_REQUEST = 'ADMIN_USER_DELETE_REQUEST' as const; const ADMIN_USER_DELETE_SUCCESS = 'ADMIN_USER_DELETE_SUCCESS' as const; -const ADMIN_USER_DELETE_FAIL = 'ADMIN_USER_DELETE_FAIL' as const; const ADMIN_USER_APPROVE_REQUEST = 'ADMIN_USER_APPROVE_REQUEST' as const; const ADMIN_USER_APPROVE_SUCCESS = 'ADMIN_USER_APPROVE_SUCCESS' as const; -const ADMIN_USER_APPROVE_FAIL = 'ADMIN_USER_APPROVE_FAIL' as const; - -const ADMIN_USER_DEACTIVATE_REQUEST = 'ADMIN_USER_DEACTIVATE_REQUEST' as const; -const ADMIN_USER_DEACTIVATE_SUCCESS = 'ADMIN_USER_DEACTIVATE_SUCCESS' as const; -const ADMIN_USER_DEACTIVATE_FAIL = 'ADMIN_USER_DEACTIVATE_FAIL' as const; - -const ADMIN_STATUS_DELETE_REQUEST = 'ADMIN_STATUS_DELETE_REQUEST' as const; -const ADMIN_STATUS_DELETE_SUCCESS = 'ADMIN_STATUS_DELETE_SUCCESS' as const; -const ADMIN_STATUS_DELETE_FAIL = 'ADMIN_STATUS_DELETE_FAIL' as const; - -const ADMIN_STATUS_TOGGLE_SENSITIVITY_REQUEST = 'ADMIN_STATUS_TOGGLE_SENSITIVITY_REQUEST' as const; -const ADMIN_STATUS_TOGGLE_SENSITIVITY_SUCCESS = 'ADMIN_STATUS_TOGGLE_SENSITIVITY_SUCCESS' as const; -const ADMIN_STATUS_TOGGLE_SENSITIVITY_FAIL = 'ADMIN_STATUS_TOGGLE_SENSITIVITY_FAIL' as const; - -const ADMIN_USER_TAG_REQUEST = 'ADMIN_USERS_TAG_REQUEST' as const; -const ADMIN_USER_TAG_SUCCESS = 'ADMIN_USERS_TAG_SUCCESS' as const; -const ADMIN_USER_TAG_FAIL = 'ADMIN_USERS_TAG_FAIL' as const; - -const ADMIN_USER_UNTAG_REQUEST = 'ADMIN_USERS_UNTAG_REQUEST' as const; -const ADMIN_USER_UNTAG_SUCCESS = 'ADMIN_USERS_UNTAG_SUCCESS' as const; -const ADMIN_USER_UNTAG_FAIL = 'ADMIN_USERS_UNTAG_FAIL' as const; const ADMIN_USER_INDEX_EXPAND_FAIL = 'ADMIN_USER_INDEX_EXPAND_FAIL' as const; const ADMIN_USER_INDEX_EXPAND_REQUEST = 'ADMIN_USER_INDEX_EXPAND_REQUEST' as const; @@ -68,15 +36,11 @@ const ADMIN_USER_INDEX_FETCH_SUCCESS = 'ADMIN_USER_INDEX_FETCH_SUCCESS' as const const ADMIN_USER_INDEX_QUERY_SET = 'ADMIN_USER_INDEX_QUERY_SET' as const; const fetchConfig = () => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ADMIN_CONFIG_FETCH_REQUEST }); - return getClient(getState).admin.config.getPleromaConfig() + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.config.getPleromaConfig() .then((data) => { dispatch({ type: ADMIN_CONFIG_FETCH_SUCCESS, configs: data.configs, needsReboot: data.need_reboot }); - }).catch(error => { - dispatch({ type: ADMIN_CONFIG_FETCH_FAIL, error }); }); - }; const updateConfig = (configs: PleromaConfig['configs']) => (dispatch: AppDispatch, getState: () => RootState) => { @@ -84,8 +48,6 @@ const updateConfig = (configs: PleromaConfig['configs']) => return getClient(getState).admin.config.updatePleromaConfig(configs) .then((data) => { dispatch({ type: ADMIN_CONFIG_UPDATE_SUCCESS, configs: data.configs, needsReboot: data.need_reboot }); - }).catch(error => { - dispatch({ type: ADMIN_CONFIG_UPDATE_FAIL, error, configs }); }); }; @@ -103,49 +65,28 @@ const updatePlFeConfig = (data: Record) => }; const fetchReports = (params?: AdminGetReportsParams) => - (dispatch: AppDispatch, getState: () => RootState) => { - const state = getState(); - - dispatch({ type: ADMIN_REPORTS_FETCH_REQUEST, params }); - - return getClient(state).admin.reports.getReports(params) + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.reports.getReports(params) .then(({ items }) => { items.forEach((report) => { dispatch(importEntities({ statuses: report.statuses as Array, accounts: [report.account?.account, report.target_account?.account] })); dispatch({ type: ADMIN_REPORTS_FETCH_SUCCESS, reports: items, params }); }); - }).catch(error => { - dispatch({ type: ADMIN_REPORTS_FETCH_FAIL, error, params }); }); - }; const closeReport = (reportId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - const state = getState(); - - dispatch({ type: ADMIN_REPORT_PATCH_REQUEST, reportId }); - - return getClient(state).admin.reports.resolveReport(reportId).then((report) => { - dispatch({ type: ADMIN_REPORT_PATCH_SUCCESS, report, reportId }); - }).catch(error => { - dispatch({ type: ADMIN_REPORT_PATCH_FAIL, error, reportId }); - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.reports.resolveReport(reportId); const fetchUsers = (params?: AdminGetAccountsParams) => (dispatch: AppDispatch, getState: () => RootState) => { const state = getState(); - dispatch({ type: ADMIN_USERS_FETCH_REQUEST, params }); - return getClient(state).admin.accounts.getAccounts(params).then((res) => { dispatch(importEntities({ accounts: res.items.map(({ account }) => account).filter((account): account is Account => account !== null) })); dispatch(fetchRelationships(res.items.map((account) => account.id))); dispatch({ type: ADMIN_USERS_FETCH_SUCCESS, users: res.items, params, next: res.next }); return res; - }).catch(error => { - dispatch({ type: ADMIN_USERS_FETCH_FAIL, error, params }); - throw error; }); }; @@ -153,22 +94,12 @@ const deactivateUser = (accountId: string, report_id?: string) => (dispatch: AppDispatch, getState: () => RootState) => { const state = getState(); - dispatch({ type: ADMIN_USER_DEACTIVATE_REQUEST, accountId }); - return getClient(state).admin.accounts.performAccountAction(accountId, 'suspend', { report_id }); }; const deleteUser = (accountId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ADMIN_USER_DELETE_REQUEST, accountId }); - - return getClient(getState).admin.accounts.deleteAccount(accountId) - .then(() => { - dispatch({ type: ADMIN_USER_DELETE_SUCCESS, accountId }); - }).catch(error => { - dispatch({ type: ADMIN_USER_DELETE_FAIL, error, accountId }); - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.accounts.deleteAccount(accountId); const approveUser = (accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { @@ -176,57 +107,31 @@ const approveUser = (accountId: string) => dispatch({ type: ADMIN_USER_APPROVE_REQUEST, accountId }); - return getClient(state).admin.accounts.approveAccount(accountId) - .then((user) => { - dispatch({ type: ADMIN_USER_APPROVE_SUCCESS, user, accountId }); - }).catch(error => { - dispatch({ type: ADMIN_USER_APPROVE_FAIL, error, accountId }); - }); + return getClient(state).admin.accounts.approveAccount(accountId); }; const deleteStatus = (statusId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ADMIN_STATUS_DELETE_REQUEST, statusId }); - return getClient(getState).admin.statuses.deleteStatus(statusId) + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.statuses.deleteStatus(statusId) .then(() => { dispatch(deleteFromTimelines(statusId)); - return dispatch({ type: ADMIN_STATUS_DELETE_SUCCESS, statusId }); - }).catch(error => { - return dispatch({ type: ADMIN_STATUS_DELETE_FAIL, error, statusId }); + return ({ statusId }); }); - }; const toggleStatusSensitivity = (statusId: string, sensitive: boolean) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ADMIN_STATUS_TOGGLE_SENSITIVITY_REQUEST, statusId }); - return getClient(getState).admin.statuses.updateStatus(statusId, { sensitive: !sensitive }) + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.statuses.updateStatus(statusId, { sensitive: !sensitive }) .then((status) => { dispatch(importEntities({ statuses: [status] })); - dispatch({ type: ADMIN_STATUS_TOGGLE_SENSITIVITY_SUCCESS, statusId, status }); - }).catch(error => { - dispatch({ type: ADMIN_STATUS_TOGGLE_SENSITIVITY_FAIL, error, statusId }); }); - }; const tagUser = (accountId: string, tags: string[]) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ADMIN_USER_TAG_REQUEST, accountId, tags }); - return getClient(getState).admin.accounts.tagUser(accountId, tags).then(() => { - dispatch({ type: ADMIN_USER_TAG_SUCCESS, accountId, tags }); - }).catch(error => { - dispatch({ type: ADMIN_USER_TAG_FAIL, error, accountId, tags }); - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.accounts.tagUser(accountId, tags); const untagUser = (accountId: string, tags: string[]) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: ADMIN_USER_UNTAG_REQUEST, accountId, tags }); - return getClient(getState).admin.accounts.untagUser(accountId, tags).then(() => { - dispatch({ type: ADMIN_USER_UNTAG_SUCCESS, accountId, tags }); - }).catch(error => { - dispatch({ type: ADMIN_USER_UNTAG_FAIL, error, accountId, tags }); - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).admin.accounts.untagUser(accountId, tags); /** Synchronizes user tags to the backend. */ const setTags = (accountId: string, oldTags: string[], newTags: string[]) => @@ -313,40 +218,15 @@ const expandUserIndex = () => }; type AdminActions = - | { type: typeof ADMIN_CONFIG_FETCH_REQUEST } | { type: typeof ADMIN_CONFIG_FETCH_SUCCESS; configs: PleromaConfig['configs']; needsReboot: boolean } - | { type: typeof ADMIN_CONFIG_FETCH_FAIL; error: unknown } | { type: typeof ADMIN_CONFIG_UPDATE_REQUEST; configs: PleromaConfig['configs'] } | { type: typeof ADMIN_CONFIG_UPDATE_SUCCESS; configs: PleromaConfig['configs']; needsReboot: boolean } - | { type: typeof ADMIN_CONFIG_UPDATE_FAIL; error: unknown; configs: PleromaConfig['configs'] } - | { type: typeof ADMIN_REPORTS_FETCH_REQUEST; params?: AdminGetReportsParams } | { type: typeof ADMIN_REPORTS_FETCH_SUCCESS; reports: Array; params?: AdminGetReportsParams } - | { type: typeof ADMIN_REPORTS_FETCH_FAIL; error: unknown; params?: AdminGetReportsParams } - | { type: typeof ADMIN_REPORT_PATCH_REQUEST; reportId: string } | { type: typeof ADMIN_REPORT_PATCH_SUCCESS; report: AdminReport; reportId: string } - | { type: typeof ADMIN_REPORT_PATCH_FAIL; error: unknown; reportId: string } - | { type: typeof ADMIN_USERS_FETCH_REQUEST; params?: AdminGetAccountsParams } | { type: typeof ADMIN_USERS_FETCH_SUCCESS; users: Array; params?: AdminGetAccountsParams; next: (() => Promise>) | null } - | { type: typeof ADMIN_USERS_FETCH_FAIL; error: unknown; params?: AdminGetAccountsParams } - | { type: typeof ADMIN_USER_DEACTIVATE_REQUEST; accountId: string } - | { type: typeof ADMIN_USER_DELETE_REQUEST; accountId: string } | { type: typeof ADMIN_USER_DELETE_SUCCESS; accountId: string } - | { type: typeof ADMIN_USER_DELETE_FAIL; error: unknown; accountId: string } | { type: typeof ADMIN_USER_APPROVE_REQUEST; accountId: string } | { type: typeof ADMIN_USER_APPROVE_SUCCESS; user: AdminAccount; accountId: string } - | { type: typeof ADMIN_USER_APPROVE_FAIL; error: unknown; accountId: string } - | { type: typeof ADMIN_STATUS_DELETE_REQUEST; statusId: string } - | { type: typeof ADMIN_STATUS_DELETE_SUCCESS; statusId: string } - | { type: typeof ADMIN_STATUS_DELETE_FAIL; error: unknown; statusId: string } - | { type: typeof ADMIN_STATUS_TOGGLE_SENSITIVITY_REQUEST; statusId: string } - | { type: typeof ADMIN_STATUS_TOGGLE_SENSITIVITY_SUCCESS; statusId: string; status: Status } - | { type: typeof ADMIN_STATUS_TOGGLE_SENSITIVITY_FAIL; error: unknown; statusId: string } - | { type: typeof ADMIN_USER_TAG_REQUEST; accountId: string; tags: Array } - | { type: typeof ADMIN_USER_TAG_SUCCESS; accountId: string; tags: Array } - | { type: typeof ADMIN_USER_TAG_FAIL; error: unknown; accountId: string; tags: Array } - | { type: typeof ADMIN_USER_UNTAG_REQUEST; accountId: string; tags: Array } - | { type: typeof ADMIN_USER_UNTAG_SUCCESS; accountId: string; tags: Array } - | { type: typeof ADMIN_USER_UNTAG_FAIL; error: unknown; accountId: string; tags: Array } | ReturnType | { type: typeof ADMIN_USER_INDEX_FETCH_REQUEST } | { type: typeof ADMIN_USER_INDEX_FETCH_SUCCESS; users: Array; total?: number; next: (() => Promise>) | null; params?: AdminGetAccountsParams } @@ -356,42 +236,15 @@ type AdminActions = | { type: typeof ADMIN_USER_INDEX_EXPAND_FAIL }; export { - ADMIN_CONFIG_FETCH_REQUEST, ADMIN_CONFIG_FETCH_SUCCESS, - ADMIN_CONFIG_FETCH_FAIL, ADMIN_CONFIG_UPDATE_REQUEST, ADMIN_CONFIG_UPDATE_SUCCESS, - ADMIN_CONFIG_UPDATE_FAIL, - ADMIN_REPORTS_FETCH_REQUEST, ADMIN_REPORTS_FETCH_SUCCESS, - ADMIN_REPORTS_FETCH_FAIL, - ADMIN_REPORT_PATCH_REQUEST, ADMIN_REPORT_PATCH_SUCCESS, - ADMIN_REPORT_PATCH_FAIL, - ADMIN_USERS_FETCH_REQUEST, ADMIN_USERS_FETCH_SUCCESS, - ADMIN_USERS_FETCH_FAIL, - ADMIN_USER_DELETE_REQUEST, ADMIN_USER_DELETE_SUCCESS, - ADMIN_USER_DELETE_FAIL, ADMIN_USER_APPROVE_REQUEST, ADMIN_USER_APPROVE_SUCCESS, - ADMIN_USER_APPROVE_FAIL, - ADMIN_USER_DEACTIVATE_REQUEST, - ADMIN_USER_DEACTIVATE_SUCCESS, - ADMIN_USER_DEACTIVATE_FAIL, - ADMIN_STATUS_DELETE_REQUEST, - ADMIN_STATUS_DELETE_SUCCESS, - ADMIN_STATUS_DELETE_FAIL, - ADMIN_STATUS_TOGGLE_SENSITIVITY_REQUEST, - ADMIN_STATUS_TOGGLE_SENSITIVITY_SUCCESS, - ADMIN_STATUS_TOGGLE_SENSITIVITY_FAIL, - ADMIN_USER_TAG_REQUEST, - ADMIN_USER_TAG_SUCCESS, - ADMIN_USER_TAG_FAIL, - ADMIN_USER_UNTAG_REQUEST, - ADMIN_USER_UNTAG_SUCCESS, - ADMIN_USER_UNTAG_FAIL, ADMIN_USER_INDEX_EXPAND_FAIL, ADMIN_USER_INDEX_EXPAND_REQUEST, ADMIN_USER_INDEX_EXPAND_SUCCESS, diff --git a/packages/pl-fe/src/actions/aliases.ts b/packages/pl-fe/src/actions/aliases.ts index 1efef7f2a..75f56f187 100644 --- a/packages/pl-fe/src/actions/aliases.ts +++ b/packages/pl-fe/src/actions/aliases.ts @@ -11,22 +11,12 @@ import type { Account as BaseAccount } from 'pl-api'; import type { Account } from 'pl-fe/normalizers/account'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const ALIASES_FETCH_REQUEST = 'ALIASES_FETCH_REQUEST' as const; const ALIASES_FETCH_SUCCESS = 'ALIASES_FETCH_SUCCESS' as const; -const ALIASES_FETCH_FAIL = 'ALIASES_FETCH_FAIL' as const; const ALIASES_SUGGESTIONS_CHANGE = 'ALIASES_SUGGESTIONS_CHANGE' as const; const ALIASES_SUGGESTIONS_READY = 'ALIASES_SUGGESTIONS_READY' as const; const ALIASES_SUGGESTIONS_CLEAR = 'ALIASES_SUGGESTIONS_CLEAR' as const; -const ALIASES_ADD_REQUEST = 'ALIASES_ADD_REQUEST' as const; -const ALIASES_ADD_SUCCESS = 'ALIASES_ADD_SUCCESS' as const; -const ALIASES_ADD_FAIL = 'ALIASES_ADD_FAIL' as const; - -const ALIASES_REMOVE_REQUEST = 'ALIASES_REMOVE_REQUEST' as const; -const ALIASES_REMOVE_SUCCESS = 'ALIASES_REMOVE_SUCCESS' as const; -const ALIASES_REMOVE_FAIL = 'ALIASES_REMOVE_FAIL' as const; - const messages = defineMessages({ createSuccess: { id: 'aliases.success.add', defaultMessage: 'Account alias created successfully' }, removeSuccess: { id: 'aliases.success.remove', defaultMessage: 'Account alias removed successfully' }, @@ -34,29 +24,18 @@ const messages = defineMessages({ const fetchAliases = (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(fetchAliasesRequest()); return getClient(getState).settings.getAccountAliases() .then(response => { dispatch(fetchAliasesSuccess(response.aliases)); - }) - .catch(err => dispatch(fetchAliasesFail(err))); + }); }; -const fetchAliasesRequest = () => ({ - type: ALIASES_FETCH_REQUEST, -}); - const fetchAliasesSuccess = (aliases: Array) => ({ type: ALIASES_FETCH_SUCCESS, value: aliases, }); -const fetchAliasesFail = (error: unknown) => ({ - type: ALIASES_FETCH_FAIL, - error, -}); - const fetchAliasesSuggestions = (q: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; @@ -86,81 +65,33 @@ const changeAliasesSuggestions = (value: string) => ({ const addToAliases = (account: Account) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(addToAliasesRequest()); return getClient(getState).settings.addAccountAlias(account.acct).then(() => { toast.success(messages.createSuccess); - dispatch(addToAliasesSuccess); dispatch(fetchAliases); - }) - .catch(err => dispatch(addToAliasesFail(err))); + }); }; -const addToAliasesRequest = () => ({ - type: ALIASES_ADD_REQUEST, -}); - -const addToAliasesSuccess = () => ({ - type: ALIASES_ADD_SUCCESS, -}); - -const addToAliasesFail = (error: unknown) => ({ - type: ALIASES_ADD_FAIL, - error, -}); - const removeFromAliases = (account: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(removeFromAliasesRequest()); return getClient(getState).settings.deleteAccountAlias(account).then(() => { toast.success(messages.removeSuccess); - dispatch(removeFromAliasesSuccess); - dispatch(fetchAliases); - }).catch(err => dispatch(removeFromAliasesFail(err))); + }); }; -const removeFromAliasesRequest = () => ({ - type: ALIASES_REMOVE_REQUEST, -}); - -const removeFromAliasesSuccess = () => ({ - type: ALIASES_REMOVE_SUCCESS, -}); - -const removeFromAliasesFail = (error: unknown) => ({ - type: ALIASES_REMOVE_FAIL, - error, -}); - type AliasesAction = - ReturnType | ReturnType - | ReturnType | ReturnType | ReturnType | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType; export { - ALIASES_FETCH_REQUEST, ALIASES_FETCH_SUCCESS, - ALIASES_FETCH_FAIL, ALIASES_SUGGESTIONS_CHANGE, ALIASES_SUGGESTIONS_READY, ALIASES_SUGGESTIONS_CLEAR, - ALIASES_ADD_REQUEST, - ALIASES_ADD_SUCCESS, - ALIASES_ADD_FAIL, - ALIASES_REMOVE_REQUEST, - ALIASES_REMOVE_SUCCESS, - ALIASES_REMOVE_FAIL, fetchAliases, fetchAliasesSuggestions, clearAliasesSuggestions, diff --git a/packages/pl-fe/src/actions/apps.ts b/packages/pl-fe/src/actions/apps.ts index 97a68ef63..25264b910 100644 --- a/packages/pl-fe/src/actions/apps.ts +++ b/packages/pl-fe/src/actions/apps.ts @@ -10,30 +10,12 @@ import { PlApiClient, type CreateApplicationParams } from 'pl-api'; import * as BuildConfig from 'pl-fe/build-config'; -import type { AppDispatch } from 'pl-fe/store'; +const createApp = (params: CreateApplicationParams, baseURL?: string) => { + const client = new PlApiClient(baseURL || BuildConfig.BACKEND_URL || ''); -const APP_CREATE_REQUEST = 'APP_CREATE_REQUEST' as const; -const APP_CREATE_SUCCESS = 'APP_CREATE_SUCCESS' as const; -const APP_CREATE_FAIL = 'APP_CREATE_FAIL' as const; - -const createApp = (params: CreateApplicationParams, baseURL?: string) => - (dispatch: AppDispatch) => { - dispatch({ type: APP_CREATE_REQUEST, params }); - - const client = new PlApiClient(baseURL || BuildConfig.BACKEND_URL || ''); - - return client.apps.createApplication(params).then((app) => { - dispatch({ type: APP_CREATE_SUCCESS, params, app }); - return app; - }).catch(error => { - dispatch({ type: APP_CREATE_FAIL, params, error }); - throw error; - }); - }; + return client.apps.createApplication(params); +}; export { - APP_CREATE_REQUEST, - APP_CREATE_SUCCESS, - APP_CREATE_FAIL, createApp, }; diff --git a/packages/pl-fe/src/actions/auth.ts b/packages/pl-fe/src/actions/auth.ts index 8f2a2c678..d2a303795 100644 --- a/packages/pl-fe/src/actions/auth.ts +++ b/packages/pl-fe/src/actions/auth.ts @@ -53,9 +53,7 @@ const VERIFY_CREDENTIALS_REQUEST = 'VERIFY_CREDENTIALS_REQUEST' as const; const VERIFY_CREDENTIALS_SUCCESS = 'VERIFY_CREDENTIALS_SUCCESS' as const; const VERIFY_CREDENTIALS_FAIL = 'VERIFY_CREDENTIALS_FAIL' as const; -const AUTH_ACCOUNT_REMEMBER_REQUEST = 'AUTH_ACCOUNT_REMEMBER_REQUEST' as const; const AUTH_ACCOUNT_REMEMBER_SUCCESS = 'AUTH_ACCOUNT_REMEMBER_SUCCESS' as const; -const AUTH_ACCOUNT_REMEMBER_FAIL = 'AUTH_ACCOUNT_REMEMBER_FAIL' as const; const customApp = custom('app'); @@ -97,7 +95,7 @@ const createAuthApp = () => website: sourceCode.homepage, }; - return dispatch(createApp(params)).then((app) => + return createApp(params).then((app) => dispatch({ type: AUTH_APP_CREATED, app }), ); }; @@ -120,7 +118,7 @@ const createAppToken = () => scope: getScopes(getState()), }; - return dispatch(obtainOAuthToken(params)).then((token) => + return obtainOAuthToken(params).then((token) => dispatch({ type: AUTH_APP_AUTHORIZED, app, token }), ); }; @@ -139,7 +137,7 @@ const createUserToken = (username: string, password: string) => scope: getScopes(getState()), }; - return dispatch(obtainOAuthToken(params)) + return obtainOAuthToken(params) .then((token) => dispatch(authLoggedIn(token))); }; @@ -207,36 +205,20 @@ const verifyCredentials = (token: string, accountUrl?: string) => }); }; -interface AuthAccountRememberRequestAction { - type: typeof AUTH_ACCOUNT_REMEMBER_REQUEST; - accountUrl: string; -} - interface AuthAccountRememberSuccessAction { type: typeof AUTH_ACCOUNT_REMEMBER_SUCCESS; accountUrl: string; account: CredentialAccount; } -interface AuthAccountRememberFailAction { - type: typeof AUTH_ACCOUNT_REMEMBER_FAIL; - error: unknown; - accountUrl: string; - skipAlert: boolean; -} - const rememberAuthAccount = (accountUrl: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: AUTH_ACCOUNT_REMEMBER_REQUEST, accountUrl }); - return KVStore.getItemOrError(`authAccount:${accountUrl}`).then(account => { + (dispatch: AppDispatch, getState: () => RootState) => + KVStore.getItemOrError(`authAccount:${accountUrl}`).then(account => { dispatch(importEntities({ accounts: [account] })); dispatch({ type: AUTH_ACCOUNT_REMEMBER_SUCCESS, account, accountUrl }); if (account.id === getState().me) dispatch(fetchMeSuccess(account)); return account; - }).catch(error => { - dispatch({ type: AUTH_ACCOUNT_REMEMBER_FAIL, error, accountUrl, skipAlert: true }); }); - }; const loadCredentials = (token: string, accountUrl: string) => (dispatch: AppDispatch) => dispatch(rememberAuthAccount(accountUrl)) @@ -357,9 +339,7 @@ type AuthAction = | VerifyCredentialsRequestAction | VerifyCredentialsSuccessAction | VerifyCredentialsFailAction - | AuthAccountRememberRequestAction - | AuthAccountRememberSuccessAction - | AuthAccountRememberFailAction; + | AuthAccountRememberSuccessAction; export { SWITCH_ACCOUNT, @@ -370,9 +350,7 @@ export { VERIFY_CREDENTIALS_REQUEST, VERIFY_CREDENTIALS_SUCCESS, VERIFY_CREDENTIALS_FAIL, - AUTH_ACCOUNT_REMEMBER_REQUEST, AUTH_ACCOUNT_REMEMBER_SUCCESS, - AUTH_ACCOUNT_REMEMBER_FAIL, messages, otpVerify, verifyCredentials, diff --git a/packages/pl-fe/src/actions/backups.ts b/packages/pl-fe/src/actions/backups.ts deleted file mode 100644 index 68e4f6dde..000000000 --- a/packages/pl-fe/src/actions/backups.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { getClient } from '../api'; - -import type { Backup } from 'pl-api'; -import type { AppDispatch, RootState } from 'pl-fe/store'; - -const BACKUPS_FETCH_REQUEST = 'BACKUPS_FETCH_REQUEST' as const; -const BACKUPS_FETCH_SUCCESS = 'BACKUPS_FETCH_SUCCESS' as const; -const BACKUPS_FETCH_FAIL = 'BACKUPS_FETCH_FAIL' as const; - -const BACKUPS_CREATE_REQUEST = 'BACKUPS_CREATE_REQUEST' as const; -const BACKUPS_CREATE_SUCCESS = 'BACKUPS_CREATE_SUCCESS' as const; -const BACKUPS_CREATE_FAIL = 'BACKUPS_CREATE_FAIL' as const; - -interface BackupsFetchRequestAction { - type: typeof BACKUPS_FETCH_REQUEST; -} - -interface BackupsFetchSuccessAction { - type: typeof BACKUPS_FETCH_SUCCESS; - backups: Array; -} - -interface BackupsFetchFailAction { - type: typeof BACKUPS_FETCH_FAIL; - error: unknown; -} - -const fetchBackups = () => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: BACKUPS_FETCH_REQUEST }); - - return getClient(getState).settings.getBackups().then((backups) => - dispatch({ type: BACKUPS_FETCH_SUCCESS, backups }), - ).catch(error => { - dispatch({ type: BACKUPS_FETCH_FAIL, error }); - }); - }; - - interface BackupsCreateRequestAction { - type: typeof BACKUPS_CREATE_REQUEST; - } - - interface BackupsCreateSuccessAction { - type: typeof BACKUPS_CREATE_SUCCESS; - backups: Array; - } - - interface BackupsCreateFailAction { - type: typeof BACKUPS_CREATE_FAIL; - error: unknown; - } - -const createBackup = () => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: BACKUPS_CREATE_REQUEST }); - return getClient(getState).settings.createBackup().then((backup) => - dispatch({ type: BACKUPS_CREATE_SUCCESS, backups: [backup] }), - ).catch(error => { - dispatch({ type: BACKUPS_CREATE_FAIL, error }); - }); - }; - -type BackupsAction = - | BackupsFetchRequestAction - | BackupsFetchSuccessAction - | BackupsFetchFailAction - | BackupsCreateRequestAction - | BackupsCreateSuccessAction - | BackupsCreateFailAction; - -export { - BACKUPS_FETCH_REQUEST, - BACKUPS_FETCH_SUCCESS, - BACKUPS_FETCH_FAIL, - BACKUPS_CREATE_REQUEST, - BACKUPS_CREATE_SUCCESS, - BACKUPS_CREATE_FAIL, - fetchBackups, - createBackup, - type BackupsAction, -}; diff --git a/packages/pl-fe/src/actions/compose.ts b/packages/pl-fe/src/actions/compose.ts index 7d246fdbe..85918e0ad 100644 --- a/packages/pl-fe/src/actions/compose.ts +++ b/packages/pl-fe/src/actions/compose.ts @@ -19,7 +19,7 @@ import { saveSettings } from './settings'; import { createStatus } from './statuses'; import type { EditorState } from 'lexical'; -import type { Account as BaseAccount, CreateStatusParams, Group, MediaAttachment, Status as BaseStatus, Tag, Poll, ScheduledStatus } from 'pl-api'; +import type { Account as BaseAccount, CreateStatusParams, CustomEmoji, Group, MediaAttachment, Status as BaseStatus, Tag, Poll, ScheduledStatus } from 'pl-api'; import type { AutoSuggestion } from 'pl-fe/components/autosuggest-input'; import type { Emoji } from 'pl-fe/features/emoji'; import type { Account } from 'pl-fe/normalizers/account'; @@ -300,7 +300,7 @@ const handleComposeSubmit = (dispatch: AppDispatch, getState: () => RootState, c dispatch(insertIntoTagHistory(composeId, data.tags || [], status)); toast.success(edit ? messages.editSuccess : messages.success, { actionLabel: messages.view, - actionLink: `/@${data.account.acct}/posts/${data.id}`, + actionLink: data.visibility === 'direct' ? '/conversations' : `/@${data.account.acct}/posts/${data.id}`, }); } else { toast.success(messages.scheduledSuccess, { @@ -432,9 +432,6 @@ const submitCompose = (composeId: string, opts: SubmitComposeOpts = {}) => } return dispatch(createStatus(params, idempotencyKey, statusId)).then((data) => { - if (!statusId && data.scheduled_at === null && data.visibility === 'direct' && getState().conversations.mounted <= 0 && history) { - history.push('/conversations'); - } handleComposeSubmit(dispatch, getState, composeId, data, status, !!statusId); onSuccess?.(); }).catch((error) => { @@ -595,9 +592,9 @@ const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, composeId, }); }, 200, { leading: true, trailing: true }); -const fetchComposeSuggestionsEmojis = (dispatch: AppDispatch, getState: () => RootState, composeId: string, token: string) => { - const state = getState(); - const results = emojiSearch(token.replace(':', ''), { maxResults: 10 }, state.custom_emojis); +const fetchComposeSuggestionsEmojis = (dispatch: AppDispatch, composeId: string, token: string) => { + const customEmojis = queryClient.getQueryData>(['instance', 'customEmojis']); + const results = emojiSearch(token.replace(':', ''), { maxResults: 10 }, customEmojis); dispatch(readyComposeSuggestionsEmojis(composeId, token, results)); }; @@ -633,7 +630,7 @@ const fetchComposeSuggestions = (composeId: string, token: string) => (dispatch: AppDispatch, getState: () => RootState) => { switch (token[0]) { case ':': - fetchComposeSuggestionsEmojis(dispatch, getState, composeId, token); + fetchComposeSuggestionsEmojis(dispatch, composeId, token); break; case '#': fetchComposeSuggestionsTags(dispatch, getState, composeId, token); diff --git a/packages/pl-fe/src/actions/consumer-auth.ts b/packages/pl-fe/src/actions/consumer-auth.ts index 4e66b343d..202e12c2b 100644 --- a/packages/pl-fe/src/actions/consumer-auth.ts +++ b/packages/pl-fe/src/actions/consumer-auth.ts @@ -10,7 +10,7 @@ import { createApp } from './apps'; import type { AppDispatch, RootState } from 'pl-fe/store'; const createProviderApp = () => - async(dispatch: AppDispatch, getState: () => RootState) => { + async (dispatch: AppDispatch, getState: () => RootState) => { const scopes = getScopes(getState()); const params = { @@ -20,7 +20,7 @@ const createProviderApp = () => scopes, }; - return dispatch(createApp(params)); + return createApp(params); }; const prepareRequest = (provider: string) => diff --git a/packages/pl-fe/src/actions/custom-emojis.ts b/packages/pl-fe/src/actions/custom-emojis.ts deleted file mode 100644 index ba1151a8c..000000000 --- a/packages/pl-fe/src/actions/custom-emojis.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { getClient } from '../api'; - -import type { CustomEmoji } from 'pl-api'; -import type { AppDispatch, RootState } from 'pl-fe/store'; - -const CUSTOM_EMOJIS_FETCH_REQUEST = 'CUSTOM_EMOJIS_FETCH_REQUEST' as const; -const CUSTOM_EMOJIS_FETCH_SUCCESS = 'CUSTOM_EMOJIS_FETCH_SUCCESS' as const; -const CUSTOM_EMOJIS_FETCH_FAIL = 'CUSTOM_EMOJIS_FETCH_FAIL' as const; - -const fetchCustomEmojis = () => - (dispatch: AppDispatch, getState: () => RootState) => { - const me = getState().me; - if (!me) return; - - dispatch(fetchCustomEmojisRequest()); - - return getClient(getState()).instance.getCustomEmojis().then(response => { - dispatch(fetchCustomEmojisSuccess(response)); - }).catch(error => { - dispatch(fetchCustomEmojisFail(error)); - }); - }; - -const fetchCustomEmojisRequest = () => ({ - type: CUSTOM_EMOJIS_FETCH_REQUEST, -}); - -const fetchCustomEmojisSuccess = (custom_emojis: Array) => ({ - type: CUSTOM_EMOJIS_FETCH_SUCCESS, - custom_emojis, -}); - -const fetchCustomEmojisFail = (error: unknown) => ({ - type: CUSTOM_EMOJIS_FETCH_FAIL, - error, -}); - -type CustomEmojisAction = - ReturnType - | ReturnType - | ReturnType; - -export { - CUSTOM_EMOJIS_FETCH_REQUEST, - CUSTOM_EMOJIS_FETCH_SUCCESS, - CUSTOM_EMOJIS_FETCH_FAIL, - fetchCustomEmojis, - type CustomEmojisAction, -}; diff --git a/packages/pl-fe/src/actions/domain-blocks.ts b/packages/pl-fe/src/actions/domain-blocks.ts index 439801b06..32942685b 100644 --- a/packages/pl-fe/src/actions/domain-blocks.ts +++ b/packages/pl-fe/src/actions/domain-blocks.ts @@ -5,125 +5,65 @@ import { isLoggedIn } from 'pl-fe/utils/auth'; import { getClient } from '../api'; import type { PaginatedResponse } from 'pl-api'; -import type { MinifiedSuggestion } from 'pl-fe/api/hooks/trends/use-suggested-accounts'; import type { EntityStore } from 'pl-fe/entity-store/types'; import type { Account } from 'pl-fe/normalizers/account'; +import type { MinifiedSuggestion } from 'pl-fe/queries/trends/use-suggested-accounts'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const DOMAIN_BLOCK_REQUEST = 'DOMAIN_BLOCK_REQUEST' as const; -const DOMAIN_BLOCK_SUCCESS = 'DOMAIN_BLOCK_SUCCESS' as const; -const DOMAIN_BLOCK_FAIL = 'DOMAIN_BLOCK_FAIL' as const; - -const DOMAIN_UNBLOCK_REQUEST = 'DOMAIN_UNBLOCK_REQUEST' as const; const DOMAIN_UNBLOCK_SUCCESS = 'DOMAIN_UNBLOCK_SUCCESS' as const; -const DOMAIN_UNBLOCK_FAIL = 'DOMAIN_UNBLOCK_FAIL' as const; -const DOMAIN_BLOCKS_FETCH_REQUEST = 'DOMAIN_BLOCKS_FETCH_REQUEST' as const; const DOMAIN_BLOCKS_FETCH_SUCCESS = 'DOMAIN_BLOCKS_FETCH_SUCCESS' as const; -const DOMAIN_BLOCKS_FETCH_FAIL = 'DOMAIN_BLOCKS_FETCH_FAIL' as const; -const DOMAIN_BLOCKS_EXPAND_REQUEST = 'DOMAIN_BLOCKS_EXPAND_REQUEST' as const; const DOMAIN_BLOCKS_EXPAND_SUCCESS = 'DOMAIN_BLOCKS_EXPAND_SUCCESS' as const; -const DOMAIN_BLOCKS_EXPAND_FAIL = 'DOMAIN_BLOCKS_EXPAND_FAIL' as const; const blockDomain = (domain: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(blockDomainRequest(domain)); - return getClient(getState).filtering.blockDomain(domain).then(() => { // TODO: Update relationships on block const accounts = selectAccountsByDomain(getState(), domain); if (!accounts) return; - dispatch(blockDomainSuccess(domain, accounts)); queryClient.setQueryData>(['suggestions'], suggestions => suggestions ? suggestions.filter((suggestion) => !accounts.includes(suggestion.account_id)) : undefined); - }).catch(err => { - dispatch(blockDomainFail(domain, err)); }); }; -const blockDomainRequest = (domain: string) => ({ - type: DOMAIN_BLOCK_REQUEST, - domain, -}); - -const blockDomainSuccess = (domain: string, accounts: string[]) => ({ - type: DOMAIN_BLOCK_SUCCESS, - domain, - accounts, -}); - -const blockDomainFail = (domain: string, error: unknown) => ({ - type: DOMAIN_BLOCK_FAIL, - domain, - error, -}); - const unblockDomain = (domain: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(unblockDomainRequest(domain)); - return getClient(getState).filtering.unblockDomain(domain).then(() => { // TODO: Update relationships on unblock const accounts = selectAccountsByDomain(getState(), domain); if (!accounts) return; dispatch(unblockDomainSuccess(domain, accounts)); - }).catch(err => { - dispatch(unblockDomainFail(domain, err)); - }); + }).catch(() => {}); }; -const unblockDomainRequest = (domain: string) => ({ - type: DOMAIN_UNBLOCK_REQUEST, - domain, -}); - const unblockDomainSuccess = (domain: string, accounts: string[]) => ({ type: DOMAIN_UNBLOCK_SUCCESS, domain, accounts, }); -const unblockDomainFail = (domain: string, error: unknown) => ({ - type: DOMAIN_UNBLOCK_FAIL, - domain, - error, -}); - const fetchDomainBlocks = () => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(fetchDomainBlocksRequest()); - return getClient(getState).filtering.getDomainBlocks().then(response => { dispatch(fetchDomainBlocksSuccess(response.items, response.next)); - }).catch(err => { - dispatch(fetchDomainBlocksFail(err)); }); }; -const fetchDomainBlocksRequest = () => ({ - type: DOMAIN_BLOCKS_FETCH_REQUEST, -}); - const fetchDomainBlocksSuccess = (domains: string[], next: (() => Promise>) | null) => ({ type: DOMAIN_BLOCKS_FETCH_SUCCESS, domains, next, }); -const fetchDomainBlocksFail = (error: unknown) => ({ - type: DOMAIN_BLOCKS_FETCH_FAIL, - error, -}); - const expandDomainBlocks = () => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; @@ -132,13 +72,9 @@ const expandDomainBlocks = () => if (!next) return; - dispatch(expandDomainBlocksRequest()); - next().then(response => { dispatch(expandDomainBlocksSuccess(response.items, response.next)); - }).catch(err => { - dispatch(expandDomainBlocksFail(err)); - }); + }).catch(() => {}); }; const selectAccountsByDomain = (state: RootState, domain: string): string[] => { @@ -150,48 +86,21 @@ const selectAccountsByDomain = (state: RootState, domain: string): string[] => { return accounts || []; }; -const expandDomainBlocksRequest = () => ({ - type: DOMAIN_BLOCKS_EXPAND_REQUEST, -}); - const expandDomainBlocksSuccess = (domains: string[], next: (() => Promise>) | null) => ({ type: DOMAIN_BLOCKS_EXPAND_SUCCESS, domains, next, }); -const expandDomainBlocksFail = (error: unknown) => ({ - type: DOMAIN_BLOCKS_EXPAND_FAIL, - error, -}); - type DomainBlocksAction = - ReturnType - | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType; + | ReturnType; export { - DOMAIN_BLOCK_REQUEST, - DOMAIN_BLOCK_SUCCESS, - DOMAIN_BLOCK_FAIL, - DOMAIN_UNBLOCK_REQUEST, DOMAIN_UNBLOCK_SUCCESS, - DOMAIN_UNBLOCK_FAIL, - DOMAIN_BLOCKS_FETCH_REQUEST, DOMAIN_BLOCKS_FETCH_SUCCESS, - DOMAIN_BLOCKS_FETCH_FAIL, - DOMAIN_BLOCKS_EXPAND_REQUEST, DOMAIN_BLOCKS_EXPAND_SUCCESS, - DOMAIN_BLOCKS_EXPAND_FAIL, blockDomain, unblockDomain, fetchDomainBlocks, diff --git a/packages/pl-fe/src/actions/emoji-reacts.ts b/packages/pl-fe/src/actions/emoji-reacts.ts index 5d5bb83c3..5531452fb 100644 --- a/packages/pl-fe/src/actions/emoji-reacts.ts +++ b/packages/pl-fe/src/actions/emoji-reacts.ts @@ -8,12 +8,9 @@ import type { Status } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; const EMOJI_REACT_REQUEST = 'EMOJI_REACT_REQUEST' as const; -const EMOJI_REACT_SUCCESS = 'EMOJI_REACT_SUCCESS' as const; const EMOJI_REACT_FAIL = 'EMOJI_REACT_FAIL' as const; const UNEMOJI_REACT_REQUEST = 'UNEMOJI_REACT_REQUEST' as const; -const UNEMOJI_REACT_SUCCESS = 'UNEMOJI_REACT_SUCCESS' as const; -const UNEMOJI_REACT_FAIL = 'UNEMOJI_REACT_FAIL' as const; const noOp = () => () => new Promise(f => f(undefined)); @@ -25,7 +22,6 @@ const emojiReact = (status: Pick, emoji: string, custom?: string) return getClient(getState).statuses.createStatusReaction(status.id, emoji).then((response) => { dispatch(importEntities({ statuses: [response] })); - dispatch(emojiReactSuccess(response, emoji)); }).catch((error) => { dispatch(emojiReactFail(status.id, emoji, error)); }); @@ -39,9 +35,6 @@ const unEmojiReact = (status: Pick, emoji: string) => return getClient(getState).statuses.deleteStatusReaction(status.id, emoji).then(response => { dispatch(importEntities({ statuses: [response] })); - dispatch(unEmojiReactSuccess(response, emoji)); - }).catch(error => { - dispatch(unEmojiReactFail(status.id, emoji, error)); }); }; @@ -52,13 +45,6 @@ const emojiReactRequest = (statusId: string, emoji: string, custom?: string) => custom, }); -const emojiReactSuccess = (status: Status, emoji: string) => ({ - type: EMOJI_REACT_SUCCESS, - status, - statusId: status.id, - emoji, -}); - const emojiReactFail = (statusId: string, emoji: string, error: unknown) => ({ type: EMOJI_REACT_FAIL, statusId, @@ -72,35 +58,15 @@ const unEmojiReactRequest = (statusId: string, emoji: string) => ({ emoji, }); -const unEmojiReactSuccess = (status: Status, emoji: string) => ({ - type: UNEMOJI_REACT_SUCCESS, - status, - statusId: status.id, - emoji, -}); - -const unEmojiReactFail = (statusId: string, emoji: string, error: unknown) => ({ - type: UNEMOJI_REACT_FAIL, - statusId, - emoji, - error, -}); - type EmojiReactsAction = | ReturnType - | ReturnType | ReturnType | ReturnType - | ReturnType - | ReturnType export { EMOJI_REACT_REQUEST, - EMOJI_REACT_SUCCESS, EMOJI_REACT_FAIL, UNEMOJI_REACT_REQUEST, - UNEMOJI_REACT_SUCCESS, - UNEMOJI_REACT_FAIL, emojiReact, unEmojiReact, type EmojiReactsAction, diff --git a/packages/pl-fe/src/actions/events.ts b/packages/pl-fe/src/actions/events.ts index e6d49d556..4d122c802 100644 --- a/packages/pl-fe/src/actions/events.ts +++ b/packages/pl-fe/src/actions/events.ts @@ -9,16 +9,10 @@ import { STATUS_FETCH_SOURCE_FAIL, STATUS_FETCH_SOURCE_REQUEST, STATUS_FETCH_SOU import type { CreateEventParams, Location, MediaAttachment, PaginatedResponse, Status } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const EVENT_SUBMIT_REQUEST = 'EVENT_SUBMIT_REQUEST' as const; -const EVENT_SUBMIT_SUCCESS = 'EVENT_SUBMIT_SUCCESS' as const; -const EVENT_SUBMIT_FAIL = 'EVENT_SUBMIT_FAIL' as const; - const EVENT_JOIN_REQUEST = 'EVENT_JOIN_REQUEST' as const; -const EVENT_JOIN_SUCCESS = 'EVENT_JOIN_SUCCESS' as const; const EVENT_JOIN_FAIL = 'EVENT_JOIN_FAIL' as const; const EVENT_LEAVE_REQUEST = 'EVENT_LEAVE_REQUEST' as const; -const EVENT_LEAVE_SUCCESS = 'EVENT_LEAVE_SUCCESS' as const; const EVENT_LEAVE_FAIL = 'EVENT_LEAVE_FAIL' as const; const EVENT_COMPOSE_CANCEL = 'EVENT_COMPOSE_CANCEL' as const; @@ -71,8 +65,6 @@ const submitEvent = ({ return; } - dispatch(submitEventRequest()); - const params: CreateEventParams = { name, status, @@ -91,7 +83,6 @@ const submitEvent = ({ : getClient(state).events.editEvent(statusId, params) ).then((data) => { dispatch(importEntities({ statuses: [data] })); - dispatch(submitEventSuccess(data)); toast.success( statusId ? messages.editSuccess : messages.success, { @@ -101,25 +92,9 @@ const submitEvent = ({ ); return data; - }).catch((error) => { - dispatch(submitEventFail(error)); }); }; -const submitEventRequest = () => ({ - type: EVENT_SUBMIT_REQUEST, -}); - -const submitEventSuccess = (status: Status) => ({ - type: EVENT_SUBMIT_SUCCESS, - status, -}); - -const submitEventFail = (error: unknown) => ({ - type: EVENT_SUBMIT_FAIL, - error, -}); - const joinEvent = (statusId: string, participationMessage?: string) => (dispatch: AppDispatch, getState: () => RootState) => { const status = getState().statuses[statusId]; @@ -132,7 +107,6 @@ const joinEvent = (statusId: string, participationMessage?: string) => return getClient(getState).events.joinEvent(statusId, participationMessage).then((data) => { dispatch(importEntities({ statuses: [data] })); - dispatch(joinEventSuccess(status.id)); toast.success( data.event?.join_state === 'pending' ? messages.joinRequestSuccess : messages.joinSuccess, { @@ -150,11 +124,6 @@ const joinEventRequest = (statusId: string) => ({ statusId, }); -const joinEventSuccess = (statusId: string) => ({ - type: EVENT_JOIN_SUCCESS, - statusId, -}); - const joinEventFail = (error: unknown, statusId: string, previousState: Exclude['join_state'] | null) => ({ type: EVENT_JOIN_FAIL, error, @@ -174,7 +143,6 @@ const leaveEvent = (statusId: string) => return getClient(getState).events.leaveEvent(statusId).then((data) => { dispatch(importEntities({ statuses: [data] })); - dispatch(leaveEventSuccess(status.id)); }).catch((error) => { dispatch(leaveEventFail(error, status.id, status?.event?.join_state || null)); }); @@ -185,11 +153,6 @@ const leaveEventRequest = (statusId: string) => ({ statusId, }); -const leaveEventSuccess = (statusId: string) => ({ - type: EVENT_LEAVE_SUCCESS, - statusId, -}); - const leaveEventFail = (error: unknown, statusId: string, previousState: Exclude['join_state'] | null) => ({ type: EVENT_LEAVE_FAIL, statusId, @@ -270,14 +233,9 @@ const fetchJoinedEvents = () => }; type EventsAction = - | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType | ReturnType | ReturnType - | ReturnType | ReturnType | ReturnType | EventFormSetAction @@ -289,14 +247,9 @@ type EventsAction = | { type: typeof JOINED_EVENTS_FETCH_FAIL; error: unknown } export { - EVENT_SUBMIT_REQUEST, - EVENT_SUBMIT_SUCCESS, - EVENT_SUBMIT_FAIL, EVENT_JOIN_REQUEST, - EVENT_JOIN_SUCCESS, EVENT_JOIN_FAIL, EVENT_LEAVE_REQUEST, - EVENT_LEAVE_SUCCESS, EVENT_LEAVE_FAIL, EVENT_COMPOSE_CANCEL, EVENT_FORM_SET, diff --git a/packages/pl-fe/src/actions/export-data.ts b/packages/pl-fe/src/actions/export-data.ts index 5f1d2b24e..05ed669a0 100644 --- a/packages/pl-fe/src/actions/export-data.ts +++ b/packages/pl-fe/src/actions/export-data.ts @@ -5,19 +5,7 @@ import { normalizeAccount } from 'pl-fe/normalizers/account'; import toast from 'pl-fe/toast'; import type { Account, PaginatedResponse } from 'pl-api'; -import type { RootState } from 'pl-fe/store'; - -const EXPORT_FOLLOWS_REQUEST = 'EXPORT_FOLLOWS_REQUEST' as const; -const EXPORT_FOLLOWS_SUCCESS = 'EXPORT_FOLLOWS_SUCCESS' as const; -const EXPORT_FOLLOWS_FAIL = 'EXPORT_FOLLOWS_FAIL' as const; - -const EXPORT_BLOCKS_REQUEST = 'EXPORT_BLOCKS_REQUEST' as const; -const EXPORT_BLOCKS_SUCCESS = 'EXPORT_BLOCKS_SUCCESS' as const; -const EXPORT_BLOCKS_FAIL = 'EXPORT_BLOCKS_FAIL' as const; - -const EXPORT_MUTES_REQUEST = 'EXPORT_MUTES_REQUEST' as const; -const EXPORT_MUTES_SUCCESS = 'EXPORT_MUTES_SUCCESS' as const; -const EXPORT_MUTES_FAIL = 'EXPORT_MUTES_FAIL' as const; +import type { AppDispatch, RootState } from 'pl-fe/store'; const messages = defineMessages({ blocksSuccess: { id: 'export_data.success.blocks', defaultMessage: 'Blocks exported successfully' }, @@ -25,20 +13,6 @@ const messages = defineMessages({ mutesSuccess: { id: 'export_data.success.mutes', defaultMessage: 'Mutes exported successfully' }, }); -type ExportDataAction = { - type: typeof EXPORT_FOLLOWS_REQUEST - | typeof EXPORT_BLOCKS_REQUEST - | typeof EXPORT_MUTES_REQUEST - | typeof EXPORT_FOLLOWS_SUCCESS - | typeof EXPORT_BLOCKS_SUCCESS - | typeof EXPORT_MUTES_SUCCESS; -} | { - type: typeof EXPORT_FOLLOWS_FAIL - | typeof EXPORT_BLOCKS_FAIL - | typeof EXPORT_MUTES_FAIL; - error?: unknown; -} - const fileExport = (content: string, fileName: string) => { const fileToDownload = document.createElement('a'); @@ -62,8 +36,7 @@ const listAccounts = async (response: PaginatedResponse) => { return Array.from(new Set(accounts)); }; -const exportFollows = () => async (dispatch: React.Dispatch, getState: () => RootState) => { - dispatch({ type: EXPORT_FOLLOWS_REQUEST }); +const exportFollows = () => async (_dispatch: AppDispatch, getState: () => RootState) => { const me = getState().me; if (!me) return; @@ -75,52 +48,29 @@ const exportFollows = () => async (dispatch: React.Dispatch, g fileExport(followings.join('\n'), 'export_followings.csv'); toast.success(messages.followersSuccess); - dispatch({ type: EXPORT_FOLLOWS_SUCCESS }); - }).catch(error => { - dispatch({ type: EXPORT_FOLLOWS_FAIL, error }); }); }; -const exportBlocks = () => (dispatch: React.Dispatch, getState: () => RootState) => { - dispatch({ type: EXPORT_BLOCKS_REQUEST }); - return getClient(getState()).filtering.getBlocks({ limit: 40 }) +const exportBlocks = () => (_dispatch: AppDispatch, getState: () => RootState) => + getClient(getState()).filtering.getBlocks({ limit: 40 }) .then(listAccounts) .then((blocks) => { fileExport(blocks.join('\n'), 'export_block.csv'); toast.success(messages.blocksSuccess); - dispatch({ type: EXPORT_BLOCKS_SUCCESS }); - }).catch(error => { - dispatch({ type: EXPORT_BLOCKS_FAIL, error }); }); -}; -const exportMutes = () => (dispatch: React.Dispatch, getState: () => RootState) => { - dispatch({ type: EXPORT_MUTES_REQUEST }); - return getClient(getState()).filtering.getMutes({ limit: 40 }) +const exportMutes = () => (_dispatch: AppDispatch, getState: () => RootState) => + getClient(getState()).filtering.getMutes({ limit: 40 }) .then(listAccounts) .then((mutes) => { fileExport(mutes.join('\n'), 'export_mutes.csv'); toast.success(messages.mutesSuccess); - dispatch({ type: EXPORT_MUTES_SUCCESS }); - }).catch(error => { - dispatch({ type: EXPORT_MUTES_FAIL, error }); }); -}; export { - EXPORT_FOLLOWS_REQUEST, - EXPORT_FOLLOWS_SUCCESS, - EXPORT_FOLLOWS_FAIL, - EXPORT_BLOCKS_REQUEST, - EXPORT_BLOCKS_SUCCESS, - EXPORT_BLOCKS_FAIL, - EXPORT_MUTES_REQUEST, - EXPORT_MUTES_SUCCESS, - EXPORT_MUTES_FAIL, exportFollows, exportBlocks, exportMutes, - type ExportDataAction, }; diff --git a/packages/pl-fe/src/actions/external-auth.ts b/packages/pl-fe/src/actions/external-auth.ts index 14dc76f6d..2232873d0 100644 --- a/packages/pl-fe/src/actions/external-auth.ts +++ b/packages/pl-fe/src/actions/external-auth.ts @@ -46,7 +46,7 @@ const externalAuthorize = (instance: Instance, baseURL: string) => (dispatch: AppDispatch) => { const scopes = getInstanceScopes(instance); - return dispatch(createExternalApp(instance, baseURL)).then((app) => { + return createExternalApp(instance, baseURL).then((app) => { const { client_id, redirect_uri } = app; const query = new URLSearchParams({ @@ -88,7 +88,7 @@ const loginWithCode = (code: string) => code, }; - return dispatch(obtainOAuthToken(params, baseURL)) + return obtainOAuthToken(params, baseURL) .then((token) => dispatch(authLoggedIn(token))) .then(({ access_token }) => dispatch(verifyCredentials(access_token, baseURL))) .then((account) => dispatch(switchAccount(account.id))) diff --git a/packages/pl-fe/src/actions/familiar-followers.ts b/packages/pl-fe/src/actions/familiar-followers.ts deleted file mode 100644 index c651abcf6..000000000 --- a/packages/pl-fe/src/actions/familiar-followers.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { AppDispatch, RootState } from 'pl-fe/store'; - -import { getClient } from '../api'; - -import { fetchRelationships } from './accounts'; -import { importEntities } from './importer'; - -import type { Account } from 'pl-api'; - -const FAMILIAR_FOLLOWERS_FETCH_REQUEST = 'FAMILIAR_FOLLOWERS_FETCH_REQUEST' as const; -const FAMILIAR_FOLLOWERS_FETCH_SUCCESS = 'FAMILIAR_FOLLOWERS_FETCH_SUCCESS' as const; -const FAMILIAR_FOLLOWERS_FETCH_FAIL = 'FAMILIAR_FOLLOWERS_FETCH_FAIL' as const; - -const fetchAccountFamiliarFollowers = (accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ - type: FAMILIAR_FOLLOWERS_FETCH_REQUEST, - accountId, - }); - - getClient(getState()).accounts.getFamiliarFollowers([accountId]) - .then((data) => { - const accounts = data.find(({ id }: { id: string }) => id === accountId)!.accounts; - - dispatch(importEntities({ accounts })); - dispatch(fetchRelationships(accounts.map((item) => item.id))); - dispatch({ - type: FAMILIAR_FOLLOWERS_FETCH_SUCCESS, - accountId, - accounts, - }); - }) - .catch(error => dispatch({ - type: FAMILIAR_FOLLOWERS_FETCH_FAIL, - accountId, - error, - skipAlert: true, - })); -}; - -type FamiliarFollowersAction = - | { - type: typeof FAMILIAR_FOLLOWERS_FETCH_REQUEST; - accountId: string; - } - | { - type: typeof FAMILIAR_FOLLOWERS_FETCH_SUCCESS; - accountId: string; - accounts: Array; - } - | { - type: typeof FAMILIAR_FOLLOWERS_FETCH_FAIL; - accountId: string; - error: unknown; - skipAlert: true; - } - -export { - FAMILIAR_FOLLOWERS_FETCH_REQUEST, - FAMILIAR_FOLLOWERS_FETCH_SUCCESS, - FAMILIAR_FOLLOWERS_FETCH_FAIL, - fetchAccountFamiliarFollowers, - type FamiliarFollowersAction, -}; diff --git a/packages/pl-fe/src/actions/filters.ts b/packages/pl-fe/src/actions/filters.ts index 21f4987a6..5d20b7d52 100644 --- a/packages/pl-fe/src/actions/filters.ts +++ b/packages/pl-fe/src/actions/filters.ts @@ -8,25 +8,7 @@ import { getClient } from '../api'; import type { Filter, FilterContext } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const FILTERS_FETCH_REQUEST = 'FILTERS_FETCH_REQUEST' as const; const FILTERS_FETCH_SUCCESS = 'FILTERS_FETCH_SUCCESS' as const; -const FILTERS_FETCH_FAIL = 'FILTERS_FETCH_FAIL' as const; - -const FILTER_FETCH_REQUEST = 'FILTER_FETCH_REQUEST' as const; -const FILTER_FETCH_SUCCESS = 'FILTER_FETCH_SUCCESS' as const; -const FILTER_FETCH_FAIL = 'FILTER_FETCH_FAIL' as const; - -const FILTERS_CREATE_REQUEST = 'FILTERS_CREATE_REQUEST' as const; -const FILTERS_CREATE_SUCCESS = 'FILTERS_CREATE_SUCCESS' as const; -const FILTERS_CREATE_FAIL = 'FILTERS_CREATE_FAIL' as const; - -const FILTERS_UPDATE_REQUEST = 'FILTERS_UPDATE_REQUEST' as const; -const FILTERS_UPDATE_SUCCESS = 'FILTERS_UPDATE_SUCCESS' as const; -const FILTERS_UPDATE_FAIL = 'FILTERS_UPDATE_FAIL' as const; - -const FILTERS_DELETE_REQUEST = 'FILTERS_DELETE_REQUEST' as const; -const FILTERS_DELETE_SUCCESS = 'FILTERS_DELETE_SUCCESS' as const; -const FILTERS_DELETE_FAIL = 'FILTERS_DELETE_FAIL' as const; const messages = defineMessages({ added: { id: 'filters.added', defaultMessage: 'Filter added.' }, @@ -39,130 +21,59 @@ const fetchFilters = () => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch({ - type: FILTERS_FETCH_REQUEST, - }); - return getClient(getState).filtering.getFilters() - .then((data) => dispatch({ - type: FILTERS_FETCH_SUCCESS, + .then((data) => ({ filters: data, })) - .catch(error => dispatch({ - type: FILTERS_FETCH_FAIL, + .catch(error => ({ error, - skipAlert: true, })); }; const fetchFilter = (filterId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: FILTER_FETCH_REQUEST }); - - return getClient(getState).filtering.getFilter(filterId) - .then((data) => { - dispatch({ - type: FILTER_FETCH_SUCCESS, - filter: data, - }); - - return data; - }) - .catch(error => { - dispatch({ - type: FILTER_FETCH_FAIL, - error, - skipAlert: true, - }); - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).filtering.getFilter(filterId); const createFilter = (title: string, expires_in: number | undefined, context: Array, hide: boolean, keywords_attributes: FilterKeywords) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: FILTERS_CREATE_REQUEST }); - - return getClient(getState).filtering.createFilter({ + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).filtering.createFilter({ title, context, filter_action: hide ? 'hide' : 'warn', expires_in, keywords_attributes, }).then(response => { - dispatch({ type: FILTERS_CREATE_SUCCESS, filter: response }); toast.success(messages.added); return response; - }).catch(error => { - dispatch({ type: FILTERS_CREATE_FAIL, error }); }); - }; const updateFilter = (filterId: string, title: string, expires_in: number | undefined, context: Array, hide: boolean, keywords_attributes: FilterKeywords) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: FILTERS_UPDATE_REQUEST }); - - return getClient(getState).filtering.updateFilter(filterId, { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).filtering.updateFilter(filterId, { title, context, filter_action: hide ? 'hide' : 'warn', expires_in, keywords_attributes, }).then(response => { - dispatch({ type: FILTERS_UPDATE_SUCCESS, filter: response }); toast.success(messages.added); return response; - }).catch(error => { - dispatch({ type: FILTERS_UPDATE_FAIL, filterId, error }); }); - }; const deleteFilter = (filterId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: FILTERS_DELETE_REQUEST }); - return getClient(getState).filtering.deleteFilter(filterId).then(response => { - dispatch({ type: FILTERS_DELETE_SUCCESS, filterId }); + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).filtering.deleteFilter(filterId).then(response => { toast.success(messages.removed); return response; - }).catch(error => { - dispatch({ type: FILTERS_DELETE_FAIL, filterId, error }); }); - }; -type FiltersAction = - | { type: typeof FILTERS_FETCH_REQUEST } - | { type: typeof FILTERS_FETCH_SUCCESS; filters: Array } - | { type: typeof FILTERS_FETCH_FAIL; error: unknown; skipAlert: true } - | { type: typeof FILTER_FETCH_REQUEST } - | { type: typeof FILTER_FETCH_SUCCESS; filter: Filter } - | { type: typeof FILTER_FETCH_FAIL; error: unknown; skipAlert: true } - | { type: typeof FILTERS_CREATE_REQUEST } - | { type: typeof FILTERS_CREATE_SUCCESS; filter: Filter } - | { type: typeof FILTERS_CREATE_FAIL; error: unknown } - | { type: typeof FILTERS_UPDATE_REQUEST } - | { type: typeof FILTERS_UPDATE_SUCCESS; filter: Filter } - | { type: typeof FILTERS_UPDATE_FAIL; filterId: string; error: unknown } - | { type: typeof FILTERS_DELETE_REQUEST } - | { type: typeof FILTERS_DELETE_SUCCESS; filterId: string } - | { type: typeof FILTERS_DELETE_FAIL; filterId: string; error: unknown } +type FiltersAction = { type: typeof FILTERS_FETCH_SUCCESS; filters: Array }; export { - FILTERS_FETCH_REQUEST, FILTERS_FETCH_SUCCESS, - FILTERS_FETCH_FAIL, - FILTER_FETCH_REQUEST, - FILTER_FETCH_SUCCESS, - FILTER_FETCH_FAIL, - FILTERS_CREATE_REQUEST, - FILTERS_CREATE_SUCCESS, - FILTERS_CREATE_FAIL, - FILTERS_UPDATE_REQUEST, - FILTERS_UPDATE_SUCCESS, - FILTERS_UPDATE_FAIL, - FILTERS_DELETE_REQUEST, - FILTERS_DELETE_SUCCESS, - FILTERS_DELETE_FAIL, fetchFilters, fetchFilter, createFilter, diff --git a/packages/pl-fe/src/actions/groups.ts b/packages/pl-fe/src/actions/groups.ts deleted file mode 100644 index a1cbb49df..000000000 --- a/packages/pl-fe/src/actions/groups.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { getClient } from '../api'; - -import { importEntities } from './importer'; - -import type { Account, PaginatedResponse } from 'pl-api'; -import type { AppDispatch, RootState } from 'pl-fe/store'; - -const GROUP_BLOCKS_FETCH_REQUEST = 'GROUP_BLOCKS_FETCH_REQUEST' as const; -const GROUP_BLOCKS_FETCH_SUCCESS = 'GROUP_BLOCKS_FETCH_SUCCESS' as const; -const GROUP_BLOCKS_FETCH_FAIL = 'GROUP_BLOCKS_FETCH_FAIL' as const; - -const GROUP_UNBLOCK_REQUEST = 'GROUP_UNBLOCK_REQUEST' as const; -const GROUP_UNBLOCK_SUCCESS = 'GROUP_UNBLOCK_SUCCESS' as const; -const GROUP_UNBLOCK_FAIL = 'GROUP_UNBLOCK_FAIL' as const; - -const groupKick = (groupId: string, accountId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - return getClient(getState).experimental.groups.kickGroupUsers(groupId, [accountId]); - }; - -const fetchGroupBlocks = (groupId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(fetchGroupBlocksRequest(groupId)); - - return getClient(getState).experimental.groups.getGroupBlocks(groupId).then(response => { - dispatch(importEntities({ accounts: response.items })); - dispatch(fetchGroupBlocksSuccess(groupId, response.items, response.next)); - }).catch(error => { - dispatch(fetchGroupBlocksFail(groupId, error)); - }); - }; - -const fetchGroupBlocksRequest = (groupId: string) => ({ - type: GROUP_BLOCKS_FETCH_REQUEST, - groupId, -}); - -const fetchGroupBlocksSuccess = (groupId: string, accounts: Array, next: (() => Promise>) | null) => ({ - type: GROUP_BLOCKS_FETCH_SUCCESS, - groupId, - accounts, - next, -}); - -const fetchGroupBlocksFail = (groupId: string, error: unknown) => ({ - type: GROUP_BLOCKS_FETCH_FAIL, - groupId, - error, - skipNotFound: true, -}); - -const groupUnblock = (groupId: string, accountId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(groupUnblockRequest(groupId, accountId)); - - return getClient(getState).experimental.groups.unblockGroupUsers(groupId, [accountId]) - .then(() => dispatch(groupUnblockSuccess(groupId, accountId))) - .catch(err => dispatch(groupUnblockFail(groupId, accountId, err))); - }; - -const groupUnblockRequest = (groupId: string, accountId: string) => ({ - type: GROUP_UNBLOCK_REQUEST, - groupId, - accountId, -}); - -const groupUnblockSuccess = (groupId: string, accountId: string) => ({ - type: GROUP_UNBLOCK_SUCCESS, - groupId, - accountId, -}); - -const groupUnblockFail = (groupId: string, accountId: string, error: unknown) => ({ - type: GROUP_UNBLOCK_FAIL, - groupId, - accountId, - error, -}); - -type GroupsAction = - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - -export { - GROUP_BLOCKS_FETCH_REQUEST, - GROUP_BLOCKS_FETCH_SUCCESS, - GROUP_BLOCKS_FETCH_FAIL, - GROUP_UNBLOCK_REQUEST, - GROUP_UNBLOCK_SUCCESS, - GROUP_UNBLOCK_FAIL, - groupKick, - fetchGroupBlocks, - groupUnblock, - type GroupsAction, -}; diff --git a/packages/pl-fe/src/actions/import-data.ts b/packages/pl-fe/src/actions/import-data.ts index 1f991bfc7..fd9ddc1c3 100644 --- a/packages/pl-fe/src/actions/import-data.ts +++ b/packages/pl-fe/src/actions/import-data.ts @@ -4,35 +4,7 @@ import toast from 'pl-fe/toast'; import { getClient } from '../api'; -import type { RootState } from 'pl-fe/store'; - -const IMPORT_FOLLOWS_REQUEST = 'IMPORT_FOLLOWS_REQUEST' as const; -const IMPORT_FOLLOWS_SUCCESS = 'IMPORT_FOLLOWS_SUCCESS' as const; -const IMPORT_FOLLOWS_FAIL = 'IMPORT_FOLLOWS_FAIL' as const; - -const IMPORT_BLOCKS_REQUEST = 'IMPORT_BLOCKS_REQUEST' as const; -const IMPORT_BLOCKS_SUCCESS = 'IMPORT_BLOCKS_SUCCESS' as const; -const IMPORT_BLOCKS_FAIL = 'IMPORT_BLOCKS_FAIL' as const; - -const IMPORT_MUTES_REQUEST = 'IMPORT_MUTES_REQUEST' as const; -const IMPORT_MUTES_SUCCESS = 'IMPORT_MUTES_SUCCESS' as const; -const IMPORT_MUTES_FAIL = 'IMPORT_MUTES_FAIL' as const; - -type ImportDataActions = { - type: typeof IMPORT_FOLLOWS_REQUEST - | typeof IMPORT_BLOCKS_REQUEST - | typeof IMPORT_MUTES_REQUEST; -} | { - type: typeof IMPORT_FOLLOWS_SUCCESS - | typeof IMPORT_BLOCKS_SUCCESS - | typeof IMPORT_MUTES_SUCCESS; - response?: string; -} | { - type: | typeof IMPORT_FOLLOWS_FAIL - | typeof IMPORT_BLOCKS_FAIL - | typeof IMPORT_MUTES_FAIL; - error?: unknown; -} +import type { AppDispatch, RootState } from 'pl-fe/store'; const messages = defineMessages({ blocksSuccess: { id: 'import_data.success.blocks', defaultMessage: 'Blocks imported successfully' }, @@ -41,48 +13,24 @@ const messages = defineMessages({ }); const importFollows = (list: File | string, overwrite?: boolean) => - (dispatch: React.Dispatch, getState: () => RootState) => { - dispatch({ type: IMPORT_FOLLOWS_REQUEST }); - return getClient(getState).settings.importFollows(list, overwrite ? 'overwrite' : 'merge').then(response => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.importFollows(list, overwrite ? 'overwrite' : 'merge').then(response => { toast.success(messages.followersSuccess); - dispatch({ type: IMPORT_FOLLOWS_SUCCESS, response }); - }).catch(error => { - dispatch({ type: IMPORT_FOLLOWS_FAIL, error }); }); - }; const importBlocks = (list: File | string, overwrite?: boolean) => - (dispatch: React.Dispatch, getState: () => RootState) => { - dispatch({ type: IMPORT_BLOCKS_REQUEST }); - return getClient(getState).settings.importBlocks(list, overwrite ? 'overwrite' : 'merge').then(response => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.importBlocks(list, overwrite ? 'overwrite' : 'merge').then(response => { toast.success(messages.blocksSuccess); - dispatch({ type: IMPORT_BLOCKS_SUCCESS, response }); - }).catch(error => { - dispatch({ type: IMPORT_BLOCKS_FAIL, error }); }); - }; const importMutes = (list: File | string) => - (dispatch: React.Dispatch, getState: () => RootState) => { - dispatch({ type: IMPORT_MUTES_REQUEST }); - return getClient(getState).settings.importMutes(list).then(response => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.importMutes(list).then(response => { toast.success(messages.mutesSuccess); - dispatch({ type: IMPORT_MUTES_SUCCESS, response }); - }).catch(error => { - dispatch({ type: IMPORT_MUTES_FAIL, error }); }); - }; export { - IMPORT_FOLLOWS_REQUEST, - IMPORT_FOLLOWS_SUCCESS, - IMPORT_FOLLOWS_FAIL, - IMPORT_BLOCKS_REQUEST, - IMPORT_BLOCKS_SUCCESS, - IMPORT_BLOCKS_FAIL, - IMPORT_MUTES_REQUEST, - IMPORT_MUTES_SUCCESS, - IMPORT_MUTES_FAIL, importFollows, importBlocks, importMutes, diff --git a/packages/pl-fe/src/actions/interactions.ts b/packages/pl-fe/src/actions/interactions.ts index 1d907baf3..7d2cf8b34 100644 --- a/packages/pl-fe/src/actions/interactions.ts +++ b/packages/pl-fe/src/actions/interactions.ts @@ -12,7 +12,6 @@ import type { Status } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; const REBLOG_REQUEST = 'REBLOG_REQUEST' as const; -const REBLOG_SUCCESS = 'REBLOG_SUCCESS' as const; const REBLOG_FAIL = 'REBLOG_FAIL' as const; const FAVOURITE_REQUEST = 'FAVOURITE_REQUEST' as const; @@ -20,40 +19,23 @@ const FAVOURITE_SUCCESS = 'FAVOURITE_SUCCESS' as const; const FAVOURITE_FAIL = 'FAVOURITE_FAIL' as const; const DISLIKE_REQUEST = 'DISLIKE_REQUEST' as const; -const DISLIKE_SUCCESS = 'DISLIKE_SUCCESS' as const; const DISLIKE_FAIL = 'DISLIKE_FAIL' as const; const UNREBLOG_REQUEST = 'UNREBLOG_REQUEST' as const; -const UNREBLOG_SUCCESS = 'UNREBLOG_SUCCESS' as const; const UNREBLOG_FAIL = 'UNREBLOG_FAIL' as const; const UNFAVOURITE_REQUEST = 'UNFAVOURITE_REQUEST' as const; const UNFAVOURITE_SUCCESS = 'UNFAVOURITE_SUCCESS' as const; -const UNFAVOURITE_FAIL = 'UNFAVOURITE_FAIL' as const; const UNDISLIKE_REQUEST = 'UNDISLIKE_REQUEST' as const; -const UNDISLIKE_SUCCESS = 'UNDISLIKE_SUCCESS' as const; -const UNDISLIKE_FAIL = 'UNDISLIKE_FAIL' as const; -const PIN_REQUEST = 'PIN_REQUEST' as const; const PIN_SUCCESS = 'PIN_SUCCESS' as const; -const PIN_FAIL = 'PIN_FAIL' as const; -const UNPIN_REQUEST = 'UNPIN_REQUEST' as const; const UNPIN_SUCCESS = 'UNPIN_SUCCESS' as const; -const UNPIN_FAIL = 'UNPIN_FAIL' as const; -const BOOKMARK_REQUEST = 'BOOKMARK_REQUEST' as const; const BOOKMARK_SUCCESS = 'BOOKMARKED_SUCCESS' as const; -const BOOKMARK_FAIL = 'BOOKMARKED_FAIL' as const; -const UNBOOKMARK_REQUEST = 'UNBOOKMARKED_REQUEST' as const; const UNBOOKMARK_SUCCESS = 'UNBOOKMARKED_SUCCESS' as const; -const UNBOOKMARK_FAIL = 'UNBOOKMARKED_FAIL' as const; - -const REMOTE_INTERACTION_REQUEST = 'REMOTE_INTERACTION_REQUEST' as const; -const REMOTE_INTERACTION_SUCCESS = 'REMOTE_INTERACTION_SUCCESS' as const; -const REMOTE_INTERACTION_FAIL = 'REMOTE_INTERACTION_FAIL' as const; const noOp = () => new Promise(f => f(undefined)); @@ -75,7 +57,6 @@ const reblog = (status: Pick) => // The reblog API method returns a new status wrapped around the original. In this case we are only // interested in how the original is modified, hence passing it skipping the wrapper if (response.reblog) dispatch(importEntities({ statuses: [response.reblog] })); - dispatch(reblogSuccess(response)); }).catch(error => { dispatch(reblogFail(status.id, error)); }); @@ -87,9 +68,7 @@ const unreblog = (status: Pick) => dispatch(unreblogRequest(status.id)); - return getClient(getState()).statuses.unreblogStatus(status.id).then((status) => { - dispatch(unreblogSuccess(status)); - }).catch(error => { + return getClient(getState()).statuses.unreblogStatus(status.id).catch(error => { dispatch(unreblogFail(status.id, error)); }); }; @@ -107,12 +86,6 @@ const reblogRequest = (statusId: string) => ({ statusId, }); -const reblogSuccess = (status: Status) => ({ - type: REBLOG_SUCCESS, - status, - statusId: status.id, -}); - const reblogFail = (statusId: string, error: unknown) => ({ type: REBLOG_FAIL, statusId, @@ -124,12 +97,6 @@ const unreblogRequest = (statusId: string) => ({ statusId, }); -const unreblogSuccess = (status: Status) => ({ - type: UNREBLOG_SUCCESS, - status, - statusId: status.id, -}); - const unreblogFail = (statusId: string, error: unknown) => ({ type: UNREBLOG_FAIL, statusId, @@ -157,8 +124,6 @@ const unfavourite = (status: Pick) => return getClient(getState()).statuses.unfavouriteStatus(status.id).then((response) => { dispatch(unfavouriteSuccess(response)); - }).catch(error => { - dispatch(unfavouriteFail(status.id, error)); }); }; @@ -198,21 +163,13 @@ const unfavouriteSuccess = (status: Status) => ({ statusId: status.id, }); -const unfavouriteFail = (statusId: string, error: unknown) => ({ - type: UNFAVOURITE_FAIL, - statusId, - error, -}); - const dislike = (status: Pick) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; dispatch(dislikeRequest(status.id)); - return getClient(getState).statuses.dislikeStatus(status.id).then((response) => { - dispatch(dislikeSuccess(response)); - }).catch((error) => { + return getClient(getState).statuses.dislikeStatus(status.id).catch((error) => { dispatch(dislikeFail(status.id, error)); }); }; @@ -223,11 +180,7 @@ const undislike = (status: Pick) => dispatch(undislikeRequest(status.id)); - return getClient(getState).statuses.undislikeStatus(status.id).then((response) => { - dispatch(undislikeSuccess(response)); - }).catch(error => { - dispatch(undislikeFail(status.id, error)); - }); + return getClient(getState).statuses.undislikeStatus(status.id); }; const toggleDislike = (status: Pick) => @@ -244,12 +197,6 @@ const dislikeRequest = (statusId: string) => ({ statusId, }); -const dislikeSuccess = (status: Status) => ({ - type: DISLIKE_SUCCESS, - status, - statusId: status.id, -}); - const dislikeFail = (statusId: string, error: unknown) => ({ type: DISLIKE_FAIL, statusId, @@ -261,26 +208,12 @@ const undislikeRequest = (statusId: string) => ({ statusId, }); -const undislikeSuccess = (status: Status) => ({ - type: UNDISLIKE_SUCCESS, - status, - statusId: status.id, -}); - -const undislikeFail = (statusId: string, error: unknown) => ({ - type: UNDISLIKE_FAIL, - statusId, - error, -}); - const bookmark = (status: Pick, folderId?: string) => (dispatch: AppDispatch, getState: () => RootState) => { const state = getState(); const features = state.auth.client.features; - dispatch(bookmarkRequest(status.id)); - return getClient(getState()).statuses.bookmarkStatus(status.id, folderId).then((response) => { dispatch(importEntities({ statuses: [response] })); dispatch(bookmarkSuccess(response)); @@ -300,23 +233,16 @@ const bookmark = (status: Pick, folderId?: string) => } toast.success(typeof folderId === 'string' ? messages.folderChanged : messages.bookmarkAdded, opts); - }).catch((error) => { - dispatch(bookmarkFail(status.id, error)); }); }; const unbookmark = (status: Pick) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(unbookmarkRequest(status.id)); - - return getClient(getState()).statuses.unbookmarkStatus(status.id).then(response => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).statuses.unbookmarkStatus(status.id).then(response => { dispatch(importEntities({ statuses: [response] })); dispatch(unbookmarkSuccess(response)); toast.success(messages.bookmarkRemoved); - }).catch(error => { - dispatch(unbookmarkFail(status.id, error)); }); - }; const toggleBookmark = (status: Pick) => (dispatch: AppDispatch) => { @@ -327,60 +253,29 @@ const toggleBookmark = (status: Pick) => } }; -const bookmarkRequest = (statusId: string) => ({ - type: BOOKMARK_REQUEST, - statusId, -}); - const bookmarkSuccess = (status: Status) => ({ type: BOOKMARK_SUCCESS, status, statusId: status.id, }); -const bookmarkFail = (statusId: string, error: unknown) => ({ - type: BOOKMARK_FAIL, - statusId, - error, -}); - -const unbookmarkRequest = (statusId: string) => ({ - type: UNBOOKMARK_REQUEST, - statusId, -}); - const unbookmarkSuccess = (status: Status) => ({ type: UNBOOKMARK_SUCCESS, status, statusId: status.id, }); -const unbookmarkFail = (statusId: string, error: unknown) => ({ - type: UNBOOKMARK_FAIL, - statusId, - error, -}); - const pin = (status: Pick, accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(pinRequest(status.id, accountId)); - return getClient(getState()).statuses.pinStatus(status.id).then(response => { dispatch(importEntities({ statuses: [response] })); dispatch(pinSuccess(response, accountId)); }).catch(error => { - dispatch(pinFail(status.id, error, accountId)); }); }; -const pinRequest = (statusId: string, accountId: string) => ({ - type: PIN_REQUEST, - statusId, - accountId, -}); - const pinSuccess = (status: Status, accountId: string) => ({ type: PIN_SUCCESS, status, @@ -388,24 +283,13 @@ const pinSuccess = (status: Status, accountId: string) => ({ accountId, }); -const pinFail = (statusId: string, error: unknown, accountId: string) => ({ - type: PIN_FAIL, - statusId, - error, - accountId, -}); - const unpin = (status: Pick, accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(unpinRequest(status.id, accountId)); - return getClient(getState()).statuses.unpinStatus(status.id).then(response => { dispatch(importEntities({ statuses: [response] })); dispatch(unpinSuccess(response, accountId)); - }).catch(error => { - dispatch(unpinFail(status.id, error, accountId)); }); }; @@ -422,12 +306,6 @@ const togglePin = (status: Pick) => } }; -const unpinRequest = (statusId: string, accountId: string) => ({ - type: UNPIN_REQUEST, - statusId, - accountId, -}); - const unpinSuccess = (status: Status, accountId: string) => ({ type: UNPIN_SUCCESS, status, @@ -435,130 +313,54 @@ const unpinSuccess = (status: Status, accountId: string) => ({ accountId, }); -const unpinFail = (statusId: string, error: unknown, accountId: string) => ({ - type: UNPIN_FAIL, - statusId, - error, - accountId, -}); - const remoteInteraction = (ap_id: string, profile: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(remoteInteractionRequest(ap_id, profile)); - - return getClient(getState).accounts.remoteInteraction(ap_id, profile).then((data) => { - dispatch(remoteInteractionSuccess(ap_id, profile, data.url)); - - return data.url; - }).catch(error => { - dispatch(remoteInteractionFail(ap_id, profile, error)); - throw error; - }); - }; - -const remoteInteractionRequest = (ap_id: string, profile: string) => ({ - type: REMOTE_INTERACTION_REQUEST, - ap_id, - profile, -}); - -const remoteInteractionSuccess = (ap_id: string, profile: string, url: string) => ({ - type: REMOTE_INTERACTION_SUCCESS, - ap_id, - profile, - url, -}); - -const remoteInteractionFail = (ap_id: string, profile: string, error: unknown) => ({ - type: REMOTE_INTERACTION_FAIL, - ap_id, - profile, - error, -}); + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).accounts.remoteInteraction(ap_id, profile).then((data) => data.url); type InteractionsAction = - ReturnType - | ReturnType + | ReturnType | ReturnType | ReturnType - | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType - | ReturnType | ReturnType - | ReturnType | ReturnType | ReturnType - | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType; export { REBLOG_REQUEST, - REBLOG_SUCCESS, REBLOG_FAIL, FAVOURITE_REQUEST, FAVOURITE_SUCCESS, FAVOURITE_FAIL, DISLIKE_REQUEST, - DISLIKE_SUCCESS, DISLIKE_FAIL, UNREBLOG_REQUEST, - UNREBLOG_SUCCESS, UNREBLOG_FAIL, UNFAVOURITE_REQUEST, UNFAVOURITE_SUCCESS, - UNFAVOURITE_FAIL, UNDISLIKE_REQUEST, - UNDISLIKE_SUCCESS, - UNDISLIKE_FAIL, - PIN_REQUEST, PIN_SUCCESS, - PIN_FAIL, - UNPIN_REQUEST, UNPIN_SUCCESS, - UNPIN_FAIL, - BOOKMARK_REQUEST, BOOKMARK_SUCCESS, - BOOKMARK_FAIL, - UNBOOKMARK_REQUEST, UNBOOKMARK_SUCCESS, - UNBOOKMARK_FAIL, - REMOTE_INTERACTION_REQUEST, - REMOTE_INTERACTION_SUCCESS, - REMOTE_INTERACTION_FAIL, reblog, unreblog, toggleReblog, favourite, unfavourite, toggleFavourite, - dislike, - undislike, toggleDislike, bookmark, - unbookmark, toggleBookmark, - pin, - unpin, togglePin, remoteInteraction, type InteractionsAction, diff --git a/packages/pl-fe/src/actions/lists.ts b/packages/pl-fe/src/actions/lists.ts index 463f151c5..8a64992a6 100644 --- a/packages/pl-fe/src/actions/lists.ts +++ b/packages/pl-fe/src/actions/lists.ts @@ -9,13 +9,10 @@ import { importEntities } from './importer'; import type { Account, List, PaginatedResponse } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const LIST_FETCH_REQUEST = 'LIST_FETCH_REQUEST' as const; const LIST_FETCH_SUCCESS = 'LIST_FETCH_SUCCESS' as const; const LIST_FETCH_FAIL = 'LIST_FETCH_FAIL' as const; -const LISTS_FETCH_REQUEST = 'LISTS_FETCH_REQUEST' as const; const LISTS_FETCH_SUCCESS = 'LISTS_FETCH_SUCCESS' as const; -const LISTS_FETCH_FAIL = 'LISTS_FETCH_FAIL' as const; const LIST_EDITOR_TITLE_CHANGE = 'LIST_EDITOR_TITLE_CHANGE' as const; const LIST_EDITOR_RESET = 'LIST_EDITOR_RESET' as const; @@ -29,9 +26,7 @@ const LIST_UPDATE_REQUEST = 'LIST_UPDATE_REQUEST' as const; const LIST_UPDATE_SUCCESS = 'LIST_UPDATE_SUCCESS' as const; const LIST_UPDATE_FAIL = 'LIST_UPDATE_FAIL' as const; -const LIST_DELETE_REQUEST = 'LIST_DELETE_REQUEST' as const; const LIST_DELETE_SUCCESS = 'LIST_DELETE_SUCCESS' as const; -const LIST_DELETE_FAIL = 'LIST_DELETE_FAIL' as const; const LIST_ACCOUNTS_FETCH_REQUEST = 'LIST_ACCOUNTS_FETCH_REQUEST' as const; const LIST_ACCOUNTS_FETCH_SUCCESS = 'LIST_ACCOUNTS_FETCH_SUCCESS' as const; @@ -41,13 +36,9 @@ const LIST_EDITOR_SUGGESTIONS_CHANGE = 'LIST_EDITOR_SUGGESTIONS_CHANGE' as const const LIST_EDITOR_SUGGESTIONS_READY = 'LIST_EDITOR_SUGGESTIONS_READY' as const; const LIST_EDITOR_SUGGESTIONS_CLEAR = 'LIST_EDITOR_SUGGESTIONS_CLEAR' as const; -const LIST_EDITOR_ADD_REQUEST = 'LIST_EDITOR_ADD_REQUEST' as const; const LIST_EDITOR_ADD_SUCCESS = 'LIST_EDITOR_ADD_SUCCESS' as const; -const LIST_EDITOR_ADD_FAIL = 'LIST_EDITOR_ADD_FAIL' as const; -const LIST_EDITOR_REMOVE_REQUEST = 'LIST_EDITOR_REMOVE_REQUEST' as const; const LIST_EDITOR_REMOVE_SUCCESS = 'LIST_EDITOR_REMOVE_SUCCESS' as const; -const LIST_EDITOR_REMOVE_FAIL = 'LIST_EDITOR_REMOVE_FAIL' as const; const LIST_ADDER_RESET = 'LIST_ADDER_RESET' as const; const LIST_ADDER_SETUP = 'LIST_ADDER_SETUP' as const; @@ -63,18 +54,11 @@ const fetchList = (listId: string) => (dispatch: AppDispatch, getState: () => Ro return; } - dispatch(fetchListRequest(listId)); - return getClient(getState()).lists.getList(listId) .then((data) => dispatch(fetchListSuccess(data))) .catch(err => dispatch(fetchListFail(listId, err))); }; -const fetchListRequest = (listId: string) => ({ - type: LIST_FETCH_REQUEST, - listId, -}); - const fetchListSuccess = (list: List) => ({ type: LIST_FETCH_SUCCESS, list, @@ -89,27 +73,15 @@ const fetchListFail = (listId: string, error: unknown) => ({ const fetchLists = () => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(fetchListsRequest()); - return getClient(getState()).lists.getLists() - .then((data) => dispatch(fetchListsSuccess(data))) - .catch(err => dispatch(fetchListsFail(err))); + .then((data) => dispatch(fetchListsSuccess(data))); }; -const fetchListsRequest = () => ({ - type: LISTS_FETCH_REQUEST, -}); - const fetchListsSuccess = (lists: Array) => ({ type: LISTS_FETCH_SUCCESS, lists, }); -const fetchListsFail = (error: unknown) => ({ - type: LISTS_FETCH_FAIL, - error, -}); - const submitListEditor = (shouldReset?: boolean) => (dispatch: AppDispatch, getState: () => RootState) => { const listId = getState().listEditor.listId!; const title = getState().listEditor.title; @@ -208,29 +180,15 @@ const resetListEditor = () => ({ const deleteList = (listId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(deleteListRequest(listId)); - return getClient(getState()).lists.deleteList(listId) - .then(() => dispatch(deleteListSuccess(listId))) - .catch(err => dispatch(deleteListFail(listId, err))); + .then(() => dispatch(deleteListSuccess(listId))); }; -const deleteListRequest = (listId: string) => ({ - type: LIST_DELETE_REQUEST, - listId, -}); - const deleteListSuccess = (listId: string) => ({ type: LIST_DELETE_SUCCESS, listId, }); -const deleteListFail = (listId: string, error: unknown) => ({ - type: LIST_DELETE_FAIL, - listId, - error, -}); - const fetchListAccounts = (listId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; @@ -291,32 +249,16 @@ const addToListEditor = (accountId: string) => (dispatch: AppDispatch, getState: const addToList = (listId: string, accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(addToListRequest(listId, accountId)); - return getClient(getState()).lists.addListAccounts(listId, [accountId]) - .then(() => dispatch(addToListSuccess(listId, accountId))) - .catch(err => dispatch(addToListFail(listId, accountId, err))); + .then(() => dispatch(addToListSuccess(listId, accountId))); }; -const addToListRequest = (listId: string, accountId: string) => ({ - type: LIST_EDITOR_ADD_REQUEST, - listId, - accountId, -}); - const addToListSuccess = (listId: string, accountId: string) => ({ type: LIST_EDITOR_ADD_SUCCESS, listId, accountId, }); -const addToListFail = (listId: string, accountId: string, error: unknown) => ({ - type: LIST_EDITOR_ADD_FAIL, - listId, - accountId, - error, -}); - const removeFromListEditor = (accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { dispatch(removeFromList(getState().listEditor.listId!, accountId)); }; @@ -324,31 +266,16 @@ const removeFromListEditor = (accountId: string) => (dispatch: AppDispatch, getS const removeFromList = (listId: string, accountId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch(removeFromListRequest(listId, accountId)); - return getClient(getState()).lists.deleteListAccounts(listId, [accountId]) - .then(() => dispatch(removeFromListSuccess(listId, accountId))) - .catch(err => dispatch(removeFromListFail(listId, accountId, err))); + .then(() => dispatch(removeFromListSuccess(listId, accountId))); }; -const removeFromListRequest = (listId: string, accountId: string) => ({ - type: LIST_EDITOR_REMOVE_REQUEST, - listId, - accountId, -}); - const removeFromListSuccess = (listId: string, accountId: string) => ({ type: LIST_EDITOR_REMOVE_SUCCESS, listId, accountId, }); -const removeFromListFail = (listId: string, accountId: string, error: unknown) => ({ - type: LIST_EDITOR_REMOVE_FAIL, - listId, - accountId, - error, -}); const resetListAdder = () => ({ type: LIST_ADDER_RESET, @@ -407,12 +334,9 @@ const removeFromListAdder = (listId: string) => (dispatch: AppDispatch, getState }; type ListsAction = - | ReturnType | ReturnType | ReturnType - | ReturnType | ReturnType - | ReturnType | ListEditorSetupAction | ReturnType | ReturnType @@ -422,21 +346,15 @@ type ListsAction = | ReturnType | ReturnType | ReturnType - | ReturnType | ReturnType - | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType | ReturnType - | ReturnType | ReturnType - | ReturnType - | ReturnType | ReturnType - | ReturnType | ReturnType | ListAdderSetupAction | ReturnType @@ -444,12 +362,9 @@ type ListsAction = | ReturnType; export { - LIST_FETCH_REQUEST, LIST_FETCH_SUCCESS, LIST_FETCH_FAIL, - LISTS_FETCH_REQUEST, LISTS_FETCH_SUCCESS, - LISTS_FETCH_FAIL, LIST_EDITOR_TITLE_CHANGE, LIST_EDITOR_RESET, LIST_EDITOR_SETUP, @@ -459,21 +374,15 @@ export { LIST_UPDATE_REQUEST, LIST_UPDATE_SUCCESS, LIST_UPDATE_FAIL, - LIST_DELETE_REQUEST, LIST_DELETE_SUCCESS, - LIST_DELETE_FAIL, LIST_ACCOUNTS_FETCH_REQUEST, LIST_ACCOUNTS_FETCH_SUCCESS, LIST_ACCOUNTS_FETCH_FAIL, LIST_EDITOR_SUGGESTIONS_CHANGE, LIST_EDITOR_SUGGESTIONS_READY, LIST_EDITOR_SUGGESTIONS_CLEAR, - LIST_EDITOR_ADD_REQUEST, LIST_EDITOR_ADD_SUCCESS, - LIST_EDITOR_ADD_FAIL, - LIST_EDITOR_REMOVE_REQUEST, LIST_EDITOR_REMOVE_SUCCESS, - LIST_EDITOR_REMOVE_FAIL, LIST_ADDER_RESET, LIST_ADDER_SETUP, LIST_ADDER_LISTS_FETCH_REQUEST, @@ -484,22 +393,15 @@ export { submitListEditor, setupListEditor, changeListEditorTitle, - createList, - updateList, resetListEditor, deleteList, - fetchListAccounts, fetchListSuggestions, - fetchListSuggestionsReady, clearListSuggestions, changeListSuggestions, addToListEditor, - addToList, removeFromListEditor, - removeFromList, resetListAdder, setupListAdder, - fetchAccountLists, addToListAdder, removeFromListAdder, type ListsAction, diff --git a/packages/pl-fe/src/actions/markers.ts b/packages/pl-fe/src/actions/markers.ts index 4941ffa89..ce16d6a35 100644 --- a/packages/pl-fe/src/actions/markers.ts +++ b/packages/pl-fe/src/actions/markers.ts @@ -3,66 +3,35 @@ import { getClient } from '../api'; import type { Markers, SaveMarkersParams } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const MARKER_FETCH_REQUEST = 'MARKER_FETCH_REQUEST' as const; const MARKER_FETCH_SUCCESS = 'MARKER_FETCH_SUCCESS' as const; -const MARKER_FETCH_FAIL = 'MARKER_FETCH_FAIL' as const; -const MARKER_SAVE_REQUEST = 'MARKER_SAVE_REQUEST' as const; const MARKER_SAVE_SUCCESS = 'MARKER_SAVE_SUCCESS' as const; -const MARKER_SAVE_FAIL = 'MARKER_SAVE_FAIL' as const; const fetchMarker = (timeline: Array) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MARKER_FETCH_REQUEST }); - return getClient(getState).timelines.getMarkers(timeline).then((marker) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).timelines.getMarkers(timeline).then((marker) => { dispatch({ type: MARKER_FETCH_SUCCESS, marker }); - }).catch(error => { - dispatch({ type: MARKER_FETCH_FAIL, error }); }); - }; const saveMarker = (marker: SaveMarkersParams) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MARKER_SAVE_REQUEST, marker }); - return getClient(getState).timelines.saveMarkers(marker).then((marker) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).timelines.saveMarkers(marker).then((marker) => { dispatch({ type: MARKER_SAVE_SUCCESS, marker }); - }).catch(error => { - dispatch({ type: MARKER_SAVE_FAIL, error }); }); - }; type MarkersAction = - | { - type: typeof MARKER_FETCH_REQUEST; - } | { type: typeof MARKER_FETCH_SUCCESS; marker: Markers; } - | { - type: typeof MARKER_FETCH_FAIL; - error: unknown; - } - | { - type: typeof MARKER_SAVE_REQUEST; - marker: SaveMarkersParams; - } | { type: typeof MARKER_SAVE_SUCCESS; marker: Markers; - } - | { - type: typeof MARKER_SAVE_FAIL; - error: unknown; - } + }; export { - MARKER_FETCH_REQUEST, MARKER_FETCH_SUCCESS, - MARKER_FETCH_FAIL, - MARKER_SAVE_REQUEST, MARKER_SAVE_SUCCESS, - MARKER_SAVE_FAIL, fetchMarker, saveMarker, type MarkersAction, diff --git a/packages/pl-fe/src/actions/me.ts b/packages/pl-fe/src/actions/me.ts index e33e44955..a90874cfc 100644 --- a/packages/pl-fe/src/actions/me.ts +++ b/packages/pl-fe/src/actions/me.ts @@ -13,14 +13,11 @@ import { FE_NAME } from './settings'; import type { CredentialAccount, UpdateCredentialsParams } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const ME_FETCH_REQUEST = 'ME_FETCH_REQUEST' as const; const ME_FETCH_SUCCESS = 'ME_FETCH_SUCCESS' as const; const ME_FETCH_FAIL = 'ME_FETCH_FAIL' as const; const ME_FETCH_SKIP = 'ME_FETCH_SKIP' as const; -const ME_PATCH_REQUEST = 'ME_PATCH_REQUEST' as const; const ME_PATCH_SUCCESS = 'ME_PATCH_SUCCESS' as const; -const ME_PATCH_FAIL = 'ME_PATCH_FAIL' as const; const noOp = () => new Promise(f => f(undefined)); @@ -54,7 +51,6 @@ const fetchMe = () => return noOp(); } - dispatch(fetchMeRequest()); return dispatch(loadCredentials(token, accountUrl!)) .catch(error => dispatch(fetchMeFail(error))); }; @@ -81,22 +77,12 @@ const persistAuthAccount = (account: CredentialAccount, params: Record - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(patchMeRequest()); - - return getClient(getState).settings.updateCredentials(params) + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.updateCredentials(params) .then(response => { persistAuthAccount(response, params); dispatch(patchMeSuccess(response)); - }).catch(error => { - dispatch(patchMeFail(error)); - throw error; }); - }; - -const fetchMeRequest = () => ({ - type: ME_FETCH_REQUEST, -}); const fetchMeSuccess = (account: CredentialAccount) => { setSentryAccount(account); @@ -115,10 +101,6 @@ const fetchMeFail = (error: unknown) => ({ skipAlert: true, }); -const patchMeRequest = () => ({ - type: ME_PATCH_REQUEST, -}); - interface MePatchSuccessAction { type: typeof ME_PATCH_SUCCESS; me: CredentialAccount; @@ -133,29 +115,17 @@ const patchMeSuccess = (me: CredentialAccount) => }); }; -const patchMeFail = (error: unknown) => ({ - type: ME_PATCH_FAIL, - error, - skipAlert: true, -}); - type MeAction = - | ReturnType | ReturnType | ReturnType | MeFetchSkipAction - | ReturnType | MePatchSuccessAction - | ReturnType; export { - ME_FETCH_REQUEST, ME_FETCH_SUCCESS, ME_FETCH_FAIL, ME_FETCH_SKIP, - ME_PATCH_REQUEST, ME_PATCH_SUCCESS, - ME_PATCH_FAIL, fetchMe, patchMe, fetchMeSuccess, diff --git a/packages/pl-fe/src/actions/mfa.ts b/packages/pl-fe/src/actions/mfa.ts index 94f3d97b9..6cb33a273 100644 --- a/packages/pl-fe/src/actions/mfa.ts +++ b/packages/pl-fe/src/actions/mfa.ts @@ -3,117 +3,49 @@ import { getClient } from '../api'; import type { PlApiClient } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const MFA_FETCH_REQUEST = 'MFA_FETCH_REQUEST' as const; const MFA_FETCH_SUCCESS = 'MFA_FETCH_SUCCESS' as const; -const MFA_FETCH_FAIL = 'MFA_FETCH_FAIL' as const; -const MFA_BACKUP_CODES_FETCH_REQUEST = 'MFA_BACKUP_CODES_FETCH_REQUEST' as const; -const MFA_BACKUP_CODES_FETCH_SUCCESS = 'MFA_BACKUP_CODES_FETCH_SUCCESS' as const; -const MFA_BACKUP_CODES_FETCH_FAIL = 'MFA_BACKUP_CODES_FETCH_FAIL' as const; - -const MFA_SETUP_REQUEST = 'MFA_SETUP_REQUEST' as const; -const MFA_SETUP_SUCCESS = 'MFA_SETUP_SUCCESS' as const; -const MFA_SETUP_FAIL = 'MFA_SETUP_FAIL' as const; - -const MFA_CONFIRM_REQUEST = 'MFA_CONFIRM_REQUEST' as const; const MFA_CONFIRM_SUCCESS = 'MFA_CONFIRM_SUCCESS' as const; -const MFA_CONFIRM_FAIL = 'MFA_CONFIRM_FAIL' as const; -const MFA_DISABLE_REQUEST = 'MFA_DISABLE_REQUEST' as const; const MFA_DISABLE_SUCCESS = 'MFA_DISABLE_SUCCESS' as const; -const MFA_DISABLE_FAIL = 'MFA_DISABLE_FAIL' as const; const fetchMfa = () => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MFA_FETCH_REQUEST }); - return getClient(getState).settings.mfa.getMfaSettings().then((data) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.mfa.getMfaSettings().then((data) => { dispatch({ type: MFA_FETCH_SUCCESS, data }); - }).catch(() => { - dispatch({ type: MFA_FETCH_FAIL }); }); - }; const fetchBackupCodes = () => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MFA_BACKUP_CODES_FETCH_REQUEST }); - return getClient(getState).settings.mfa.getMfaBackupCodes().then((data) => { - dispatch({ type: MFA_BACKUP_CODES_FETCH_SUCCESS, data }); - return data; - }).catch((error: unknown) => { - dispatch({ type: MFA_BACKUP_CODES_FETCH_FAIL }); - throw error; - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.mfa.getMfaBackupCodes(); const setupMfa = (method: 'totp') => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MFA_SETUP_REQUEST, method }); - return getClient(getState).settings.mfa.getMfaSetup(method).then((data) => { - dispatch({ type: MFA_SETUP_SUCCESS, data }); - return data; - }).catch((error: unknown) => { - dispatch({ type: MFA_SETUP_FAIL }); - throw error; - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.mfa.getMfaSetup(method); const confirmMfa = (method: 'totp', code: string, password: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MFA_CONFIRM_REQUEST, method, code }); - return getClient(getState).settings.mfa.confirmMfaSetup(method, code, password).then((data) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.mfa.confirmMfaSetup(method, code, password).then((data) => { dispatch({ type: MFA_CONFIRM_SUCCESS, method, code }); return data; - }).catch((error: unknown) => { - dispatch({ type: MFA_CONFIRM_FAIL, method, code, error, skipAlert: true }); - throw error; }); - }; const disableMfa = (method: 'totp', password: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MFA_DISABLE_REQUEST, method }); - return getClient(getState).settings.mfa.disableMfa(method, password).then((data) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.mfa.disableMfa(method, password).then((data) => { dispatch({ type: MFA_DISABLE_SUCCESS, method }); return data; - }).catch((error: unknown) => { - dispatch({ type: MFA_DISABLE_FAIL, method, skipAlert: true }); - throw error; }); - }; type MfaAction = - | { type: typeof MFA_FETCH_REQUEST } | { type: typeof MFA_FETCH_SUCCESS; data: Awaited)['settings']['mfa']['getMfaSettings']>> } - | { type: typeof MFA_FETCH_FAIL } - | { type: typeof MFA_BACKUP_CODES_FETCH_REQUEST } - | { type: typeof MFA_BACKUP_CODES_FETCH_SUCCESS; data: Awaited)['settings']['mfa']['getMfaBackupCodes']>> } - | { type: typeof MFA_BACKUP_CODES_FETCH_FAIL } - | { type: typeof MFA_SETUP_REQUEST; method: 'totp' } - | { type: typeof MFA_SETUP_SUCCESS; data: Awaited)['settings']['mfa']['getMfaSetup']>> } - | { type: typeof MFA_SETUP_FAIL } - | { type: typeof MFA_CONFIRM_REQUEST; method: 'totp'; code: string } | { type: typeof MFA_CONFIRM_SUCCESS; method: 'totp'; code: string } - | { type: typeof MFA_CONFIRM_FAIL; method: 'totp'; code: string; error: unknown; skipAlert: true } - | { type: typeof MFA_DISABLE_REQUEST; method: 'totp' } | { type: typeof MFA_DISABLE_SUCCESS; method: 'totp' } - | { type: typeof MFA_DISABLE_FAIL; method: 'totp'; skipAlert: true }; export { - MFA_FETCH_REQUEST, MFA_FETCH_SUCCESS, - MFA_FETCH_FAIL, - MFA_BACKUP_CODES_FETCH_REQUEST, - MFA_BACKUP_CODES_FETCH_SUCCESS, - MFA_BACKUP_CODES_FETCH_FAIL, - MFA_SETUP_REQUEST, - MFA_SETUP_SUCCESS, - MFA_SETUP_FAIL, - MFA_CONFIRM_REQUEST, MFA_CONFIRM_SUCCESS, - MFA_CONFIRM_FAIL, - MFA_DISABLE_REQUEST, MFA_DISABLE_SUCCESS, - MFA_DISABLE_FAIL, fetchMfa, fetchBackupCodes, setupMfa, diff --git a/packages/pl-fe/src/actions/notifications.ts b/packages/pl-fe/src/actions/notifications.ts index 34976f763..5f93b8d98 100644 --- a/packages/pl-fe/src/actions/notifications.ts +++ b/packages/pl-fe/src/actions/notifications.ts @@ -3,9 +3,9 @@ import 'intl-pluralrules'; import { defineMessages } from 'react-intl'; import { getClient } from 'pl-fe/api'; -import { appendFollowRequest } from 'pl-fe/api/hooks/account-lists/use-follow-requests'; import { getNotificationStatus } from 'pl-fe/features/notifications/components/notification'; import { normalizeNotification } from 'pl-fe/normalizers/notification'; +import { appendFollowRequest } from 'pl-fe/queries/accounts/use-follow-requests'; import { getFilters, regexFromFilters } from 'pl-fe/selectors'; import { useSettingsStore } from 'pl-fe/stores/settings'; import { isLoggedIn } from 'pl-fe/utils/auth'; @@ -286,7 +286,6 @@ type NotificationsAction = export { NOTIFICATIONS_UPDATE, - NOTIFICATIONS_UPDATE_NOOP, NOTIFICATIONS_EXPAND_REQUEST, NOTIFICATIONS_EXPAND_SUCCESS, NOTIFICATIONS_EXPAND_FAIL, diff --git a/packages/pl-fe/src/actions/oauth.ts b/packages/pl-fe/src/actions/oauth.ts index 652716b62..70b6caf03 100644 --- a/packages/pl-fe/src/actions/oauth.ts +++ b/packages/pl-fe/src/actions/oauth.ts @@ -13,49 +13,20 @@ import { getBaseURL } from 'pl-fe/utils/state'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const OAUTH_TOKEN_CREATE_REQUEST = 'OAUTH_TOKEN_CREATE_REQUEST' as const; -const OAUTH_TOKEN_CREATE_SUCCESS = 'OAUTH_TOKEN_CREATE_SUCCESS' as const; -const OAUTH_TOKEN_CREATE_FAIL = 'OAUTH_TOKEN_CREATE_FAIL' as const; +const obtainOAuthToken = (params: GetTokenParams, baseURL?: string) =>{ + const client = new PlApiClient(baseURL || BuildConfig.BACKEND_URL || ''); -const OAUTH_TOKEN_REVOKE_REQUEST = 'OAUTH_TOKEN_REVOKE_REQUEST' as const; -const OAUTH_TOKEN_REVOKE_SUCCESS = 'OAUTH_TOKEN_REVOKE_SUCCESS' as const; -const OAUTH_TOKEN_REVOKE_FAIL = 'OAUTH_TOKEN_REVOKE_FAIL' as const; - -const obtainOAuthToken = (params: GetTokenParams, baseURL?: string) => - (dispatch: AppDispatch) => { - dispatch({ type: OAUTH_TOKEN_CREATE_REQUEST, params }); - const client = new PlApiClient(baseURL || BuildConfig.BACKEND_URL || ''); - - return client.oauth.getToken(params).then((token) => { - dispatch({ type: OAUTH_TOKEN_CREATE_SUCCESS, params, token }); - return token; - }).catch(error => { - dispatch({ type: OAUTH_TOKEN_CREATE_FAIL, params, error, skipAlert: true }); - throw error; - }); - }; + return client.oauth.getToken(params); +}; const revokeOAuthToken = (params: RevokeTokenParams) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: OAUTH_TOKEN_REVOKE_REQUEST, params }); const baseURL = getBaseURL(getState()); const client = new PlApiClient(baseURL || ''); - return client.oauth.revokeToken(params).then((data) => { - dispatch({ type: OAUTH_TOKEN_REVOKE_SUCCESS, params, data }); - return data; - }).catch(error => { - dispatch({ type: OAUTH_TOKEN_REVOKE_FAIL, params, error }); - throw error; - }); + return client.oauth.revokeToken(params); }; export { - OAUTH_TOKEN_CREATE_REQUEST, - OAUTH_TOKEN_CREATE_SUCCESS, - OAUTH_TOKEN_CREATE_FAIL, - OAUTH_TOKEN_REVOKE_REQUEST, - OAUTH_TOKEN_REVOKE_SUCCESS, - OAUTH_TOKEN_REVOKE_FAIL, obtainOAuthToken, revokeOAuthToken, }; diff --git a/packages/pl-fe/src/actions/pin-statuses.ts b/packages/pl-fe/src/actions/pin-statuses.ts index e9ddd0b92..4103689e0 100644 --- a/packages/pl-fe/src/actions/pin-statuses.ts +++ b/packages/pl-fe/src/actions/pin-statuses.ts @@ -7,49 +7,29 @@ import { importEntities } from './importer'; import type { PaginatedResponse, Status } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const PINNED_STATUSES_FETCH_REQUEST = 'PINNED_STATUSES_FETCH_REQUEST' as const; const PINNED_STATUSES_FETCH_SUCCESS = 'PINNED_STATUSES_FETCH_SUCCESS' as const; -const PINNED_STATUSES_FETCH_FAIL = 'PINNED_STATUSES_FETCH_FAIL' as const; const fetchPinnedStatuses = () => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; const me = getState().me; - dispatch(fetchPinnedStatusesRequest()); - return getClient(getState()).accounts.getAccountStatuses(me as string, { pinned: true }).then(response => { dispatch(importEntities({ statuses: response.items })); dispatch(fetchPinnedStatusesSuccess(response.items, response.next)); - }).catch(error => { - dispatch(fetchPinnedStatusesFail(error)); }); }; -const fetchPinnedStatusesRequest = () => ({ - type: PINNED_STATUSES_FETCH_REQUEST, -}); - const fetchPinnedStatusesSuccess = (statuses: Array, next: (() => Promise>) | null) => ({ type: PINNED_STATUSES_FETCH_SUCCESS, statuses, next, }); -const fetchPinnedStatusesFail = (error: unknown) => ({ - type: PINNED_STATUSES_FETCH_FAIL, - error, -}); - -type PinStatusesAction = - ReturnType - | ReturnType - | ReturnType; +type PinStatusesAction = ReturnType; export { - PINNED_STATUSES_FETCH_REQUEST, PINNED_STATUSES_FETCH_SUCCESS, - PINNED_STATUSES_FETCH_FAIL, fetchPinnedStatuses, type PinStatusesAction, }; diff --git a/packages/pl-fe/src/actions/pl-fe.ts b/packages/pl-fe/src/actions/pl-fe.ts index 6a81db1d9..1072cd805 100644 --- a/packages/pl-fe/src/actions/pl-fe.ts +++ b/packages/pl-fe/src/actions/pl-fe.ts @@ -22,12 +22,11 @@ const getPlFeConfig = createSelector([ ], (plfe) => v.parse(plFeConfigSchema, plfe)); const rememberPlFeConfig = (host: string | null) => - (dispatch: AppDispatch) => { - return KVStore.getItemOrError(`plfe_config:${host}`).then(plFeConfig => { + (dispatch: AppDispatch) => + KVStore.getItemOrError(`plfe_config:${host}`).then(plFeConfig => { dispatch({ type: PLFE_CONFIG_REMEMBER_SUCCESS, host, plFeConfig }); return plFeConfig; }).catch(() => {}); - }; const fetchFrontendConfigurations = () => (dispatch: AppDispatch, getState: () => RootState) => @@ -101,11 +100,6 @@ export { PLFE_CONFIG_REQUEST_FAIL, PLFE_CONFIG_REMEMBER_SUCCESS, getPlFeConfig, - rememberPlFeConfig, - fetchFrontendConfigurations, fetchPlFeConfig, loadPlFeConfig, - fetchPlFeJson, - importPlFeConfig, - plFeConfigFail, }; diff --git a/packages/pl-fe/src/actions/polls.ts b/packages/pl-fe/src/actions/polls.ts index 0f3780c03..43458d058 100644 --- a/packages/pl-fe/src/actions/polls.ts +++ b/packages/pl-fe/src/actions/polls.ts @@ -2,81 +2,21 @@ import { getClient } from '../api'; import { importEntities } from './importer'; -import type { Poll } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const POLL_VOTE_REQUEST = 'POLL_VOTE_REQUEST' as const; -const POLL_VOTE_SUCCESS = 'POLL_VOTE_SUCCESS' as const; -const POLL_VOTE_FAIL = 'POLL_VOTE_FAIL' as const; - -const POLL_FETCH_REQUEST = 'POLL_FETCH_REQUEST' as const; -const POLL_FETCH_SUCCESS = 'POLL_FETCH_SUCCESS' as const; -const POLL_FETCH_FAIL = 'POLL_FETCH_FAIL' as const; - const vote = (pollId: string, choices: number[]) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(voteRequest()); - - return getClient(getState()).polls.vote(pollId, choices).then((data) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState()).polls.vote(pollId, choices).then((data) => { dispatch(importEntities({ polls: [data] })); - dispatch(voteSuccess(data)); - }).catch(err => dispatch(voteFail(err))); - }; + }); const fetchPoll = (pollId: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(fetchPollRequest()); - - return getClient(getState()).polls.getPoll(pollId).then((data) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState()).polls.getPoll(pollId).then((data) => { dispatch(importEntities({ polls: [data] })); - dispatch(fetchPollSuccess(data)); - }).catch(err => dispatch(fetchPollFail(err))); - }; - -const voteRequest = () => ({ - type: POLL_VOTE_REQUEST, -}); - -const voteSuccess = (poll: Poll) => ({ - type: POLL_VOTE_SUCCESS, - poll, -}); - -const voteFail = (error: unknown) => ({ - type: POLL_VOTE_FAIL, - error, -}); - -const fetchPollRequest = () => ({ - type: POLL_FETCH_REQUEST, -}); - -const fetchPollSuccess = (poll: Poll) => ({ - type: POLL_FETCH_SUCCESS, - poll, -}); - -const fetchPollFail = (error: unknown) => ({ - type: POLL_FETCH_FAIL, - error, -}); - -type PollsAction = - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType; + }); export { - POLL_VOTE_REQUEST, - POLL_VOTE_SUCCESS, - POLL_VOTE_FAIL, - POLL_FETCH_REQUEST, - POLL_FETCH_SUCCESS, - POLL_FETCH_FAIL, vote, fetchPoll, - type PollsAction, }; diff --git a/packages/pl-fe/src/actions/push-notifications/registerer.ts b/packages/pl-fe/src/actions/push-notifications/registerer.ts index ac19530a3..3d9983dec 100644 --- a/packages/pl-fe/src/actions/push-notifications/registerer.ts +++ b/packages/pl-fe/src/actions/push-notifications/registerer.ts @@ -1,4 +1,4 @@ -import { createPushSubscription, updatePushSubscription } from 'pl-fe/actions/push-subscriptions'; +import { createPushSubscription } from 'pl-fe/actions/push-subscriptions'; import { pushNotificationsSetting } from 'pl-fe/settings'; import { getVapidKey } from 'pl-fe/utils/auth'; import { decode as decodeBase64 } from 'pl-fe/utils/base64'; @@ -135,21 +135,6 @@ const register = () => .catch(console.warn); }; -const saveSettings = () => - (dispatch: AppDispatch, getState: () => RootState) => { - const state = getState().push_notifications; - const alerts = state.alerts; - const data = { alerts }; - const me = getState().me; - - return dispatch(updatePushSubscription({ data })).then(() => { - if (me) { - pushNotificationsSetting.set(me, data); - } - }).catch(console.warn); - }; - export { register, - saveSettings, }; diff --git a/packages/pl-fe/src/actions/push-subscriptions.ts b/packages/pl-fe/src/actions/push-subscriptions.ts index 332f9bc42..90f0068df 100644 --- a/packages/pl-fe/src/actions/push-subscriptions.ts +++ b/packages/pl-fe/src/actions/push-subscriptions.ts @@ -1,17 +1,12 @@ import { getClient } from '../api'; -import type { CreatePushNotificationsSubscriptionParams, UpdatePushNotificationsSubscriptionParams } from 'pl-api'; +import type { CreatePushNotificationsSubscriptionParams } from 'pl-api'; import type { AppDispatch, RootState } from 'pl-fe/store'; const createPushSubscription = (params: CreatePushNotificationsSubscriptionParams) => (dispatch: AppDispatch, getState: () => RootState) => getClient(getState).pushNotifications.createSubscription(params); -const updatePushSubscription = (params: UpdatePushNotificationsSubscriptionParams) => - (dispatch: AppDispatch, getState: () => RootState) => - getClient(getState).pushNotifications.updateSubscription(params); - export { createPushSubscription, - updatePushSubscription, }; diff --git a/packages/pl-fe/src/actions/scheduled-statuses.ts b/packages/pl-fe/src/actions/scheduled-statuses.ts index c0d27fe3a..e2473419c 100644 --- a/packages/pl-fe/src/actions/scheduled-statuses.ts +++ b/packages/pl-fe/src/actions/scheduled-statuses.ts @@ -13,7 +13,6 @@ const SCHEDULED_STATUSES_EXPAND_FAIL = 'SCHEDULED_STATUSES_EXPAND_FAIL' as const const SCHEDULED_STATUS_CANCEL_REQUEST = 'SCHEDULED_STATUS_CANCEL_REQUEST' as const; const SCHEDULED_STATUS_CANCEL_SUCCESS = 'SCHEDULED_STATUS_CANCEL_SUCCESS' as const; -const SCHEDULED_STATUS_CANCEL_FAIL = 'SCHEDULED_STATUS_CANCEL_FAIL' as const; const fetchScheduledStatuses = () => (dispatch: AppDispatch, getState: () => RootState) => { @@ -46,19 +45,11 @@ interface ScheduledStatusCancelSuccessAction { statusId: string; } -interface ScheduledStatusCancelFailAction { - type: typeof SCHEDULED_STATUS_CANCEL_FAIL; - statusId: string; - error: unknown; -} - const cancelScheduledStatus = (statusId: string) => (dispatch: AppDispatch, getState: () => RootState) => { dispatch({ type: SCHEDULED_STATUS_CANCEL_REQUEST, statusId }); return getClient(getState()).scheduledStatuses.cancelScheduledStatus(statusId).then(() => { dispatch({ type: SCHEDULED_STATUS_CANCEL_SUCCESS, statusId }); - }).catch(error => { - dispatch({ type: SCHEDULED_STATUS_CANCEL_FAIL, statusId, error }); }); }; @@ -112,7 +103,6 @@ const expandScheduledStatusesFail = (error: unknown) => ({ type ScheduledStatusesAction = | ScheduledStatusCancelRequestAction | ScheduledStatusCancelSuccessAction - | ScheduledStatusCancelFailAction | ReturnType | ReturnType | ReturnType @@ -129,7 +119,6 @@ export { SCHEDULED_STATUSES_EXPAND_FAIL, SCHEDULED_STATUS_CANCEL_REQUEST, SCHEDULED_STATUS_CANCEL_SUCCESS, - SCHEDULED_STATUS_CANCEL_FAIL, fetchScheduledStatuses, cancelScheduledStatus, expandScheduledStatuses, diff --git a/packages/pl-fe/src/actions/security.ts b/packages/pl-fe/src/actions/security.ts index f8a6702a5..16f17e493 100644 --- a/packages/pl-fe/src/actions/security.ts +++ b/packages/pl-fe/src/actions/security.ts @@ -15,176 +15,62 @@ import type { OauthToken } from 'pl-api'; import type { Account } from 'pl-fe/normalizers/account'; import type { AppDispatch, RootState } from 'pl-fe/store'; -const FETCH_TOKENS_REQUEST = 'FETCH_TOKENS_REQUEST' as const; const FETCH_TOKENS_SUCCESS = 'FETCH_TOKENS_SUCCESS' as const; -const FETCH_TOKENS_FAIL = 'FETCH_TOKENS_FAIL' as const; -const REVOKE_TOKEN_REQUEST = 'REVOKE_TOKEN_REQUEST' as const; const REVOKE_TOKEN_SUCCESS = 'REVOKE_TOKEN_SUCCESS' as const; -const REVOKE_TOKEN_FAIL = 'REVOKE_TOKEN_FAIL' as const; - -const RESET_PASSWORD_REQUEST = 'RESET_PASSWORD_REQUEST' as const; -const RESET_PASSWORD_SUCCESS = 'RESET_PASSWORD_SUCCESS' as const; -const RESET_PASSWORD_FAIL = 'RESET_PASSWORD_FAIL' as const; - -const RESET_PASSWORD_CONFIRM_REQUEST = 'RESET_PASSWORD_CONFIRM_REQUEST' as const; -const RESET_PASSWORD_CONFIRM_SUCCESS = 'RESET_PASSWORD_CONFIRM_SUCCESS' as const; -const RESET_PASSWORD_CONFIRM_FAIL = 'RESET_PASSWORD_CONFIRM_FAIL' as const; - -const CHANGE_PASSWORD_REQUEST = 'CHANGE_PASSWORD_REQUEST' as const; -const CHANGE_PASSWORD_SUCCESS = 'CHANGE_PASSWORD_SUCCESS' as const; -const CHANGE_PASSWORD_FAIL = 'CHANGE_PASSWORD_FAIL' as const; - -const CHANGE_EMAIL_REQUEST = 'CHANGE_EMAIL_REQUEST' as const; -const CHANGE_EMAIL_SUCCESS = 'CHANGE_EMAIL_SUCCESS' as const; -const CHANGE_EMAIL_FAIL = 'CHANGE_EMAIL_FAIL' as const; - -const DELETE_ACCOUNT_REQUEST = 'DELETE_ACCOUNT_REQUEST' as const; -const DELETE_ACCOUNT_SUCCESS = 'DELETE_ACCOUNT_SUCCESS' as const; -const DELETE_ACCOUNT_FAIL = 'DELETE_ACCOUNT_FAIL' as const; - -const MOVE_ACCOUNT_REQUEST = 'MOVE_ACCOUNT_REQUEST' as const; -const MOVE_ACCOUNT_SUCCESS = 'MOVE_ACCOUNT_SUCCESS' as const; -const MOVE_ACCOUNT_FAIL = 'MOVE_ACCOUNT_FAIL' as const; const fetchOAuthTokens = () => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: FETCH_TOKENS_REQUEST }); - return getClient(getState).settings.getOauthTokens().then((tokens) => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.getOauthTokens().then((tokens) => { dispatch({ type: FETCH_TOKENS_SUCCESS, tokens }); - }).catch((e) => { - dispatch({ type: FETCH_TOKENS_FAIL }); }); - }; const revokeOAuthTokenById = (tokenId: number) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: REVOKE_TOKEN_REQUEST, tokenId }); - return getClient(getState).settings.deleteOauthToken(tokenId).then(() => { + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.deleteOauthToken(tokenId).then(() => { dispatch({ type: REVOKE_TOKEN_SUCCESS, tokenId }); - }).catch(() => { - dispatch({ type: REVOKE_TOKEN_FAIL, tokenId }); }); - }; const changePassword = (oldPassword: string, newPassword: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: CHANGE_PASSWORD_REQUEST }); - - return getClient(getState).settings.changePassword(oldPassword, newPassword).then(response => { - dispatch({ type: CHANGE_PASSWORD_SUCCESS, response }); - }).catch(error => { - dispatch({ type: CHANGE_PASSWORD_FAIL, error, skipAlert: true }); - throw error; - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.changePassword(oldPassword, newPassword); const resetPassword = (usernameOrEmail: string) => (dispatch: AppDispatch, getState: () => RootState) => { const input = normalizeUsername(usernameOrEmail); - dispatch({ type: RESET_PASSWORD_REQUEST }); - return getClient(getState).settings.resetPassword( input.includes('@') ? input : undefined, input.includes('@') ? undefined : input, - ).then(() => { - dispatch({ type: RESET_PASSWORD_SUCCESS }); - }).catch(error => { - dispatch({ type: RESET_PASSWORD_FAIL, error }); - throw error; - }); + ); }; const changeEmail = (email: string, password: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: CHANGE_EMAIL_REQUEST, email }); - - return getClient(getState).settings.changeEmail(email, password).then(response => { - dispatch({ type: CHANGE_EMAIL_SUCCESS, email, response }); - }).catch(error => { - dispatch({ type: CHANGE_EMAIL_FAIL, email, error, skipAlert: true }); - throw error; - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.changeEmail(email, password); const deleteAccount = (password: string) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: CHANGE_PASSWORD_REQUEST }); const account = getLoggedInAccount(getState())!; - dispatch({ type: DELETE_ACCOUNT_REQUEST }); - return getClient(getState).settings.deleteAccount(password).then(response => { - dispatch({ type: DELETE_ACCOUNT_SUCCESS, response }); + return getClient(getState).settings.deleteAccount(password).then(() => { dispatch({ type: AUTH_LOGGED_OUT, account }); toast.success(messages.loggedOut); - }).catch(error => { - dispatch({ type: DELETE_ACCOUNT_FAIL, error, skipAlert: true }); - throw error; }); }; const moveAccount = (targetAccount: string, password: string) => - (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: MOVE_ACCOUNT_REQUEST }); - return getClient(getState).settings.moveAccount(targetAccount, password).then(response => { - dispatch({ type: MOVE_ACCOUNT_SUCCESS, response }); - }).catch(error => { - dispatch({ type: MOVE_ACCOUNT_FAIL, error, skipAlert: true }); - throw error; - }); - }; + (dispatch: AppDispatch, getState: () => RootState) => + getClient(getState).settings.moveAccount(targetAccount, password); type SecurityAction = - | { type: typeof FETCH_TOKENS_REQUEST } | { type: typeof FETCH_TOKENS_SUCCESS; tokens: Array } - | { type: typeof FETCH_TOKENS_FAIL } - | { type: typeof REVOKE_TOKEN_REQUEST; tokenId: number } | { type: typeof REVOKE_TOKEN_SUCCESS; tokenId: number } - | { type: typeof REVOKE_TOKEN_FAIL; tokenId: number } - | { type: typeof CHANGE_PASSWORD_REQUEST } - | { type: typeof CHANGE_PASSWORD_SUCCESS; response: {} } - | { type: typeof CHANGE_PASSWORD_FAIL; error: unknown; skipAlert: true } - | { type: typeof RESET_PASSWORD_REQUEST } - | { type: typeof RESET_PASSWORD_SUCCESS } - | { type: typeof RESET_PASSWORD_FAIL; error: unknown } - | { type: typeof CHANGE_EMAIL_REQUEST; email: string } - | { type: typeof CHANGE_EMAIL_SUCCESS; email: string; response: {} } - | { type: typeof CHANGE_EMAIL_FAIL; email: string; error: unknown; skipAlert: true } - | { type: typeof CHANGE_PASSWORD_REQUEST } - | { type: typeof DELETE_ACCOUNT_REQUEST } - | { type: typeof DELETE_ACCOUNT_SUCCESS; response: {} } | { type: typeof AUTH_LOGGED_OUT; account: Account } - | { type: typeof DELETE_ACCOUNT_FAIL; error: unknown; skipAlert: true } - | { type: typeof MOVE_ACCOUNT_REQUEST } - | { type: typeof MOVE_ACCOUNT_SUCCESS; response: {} } - | { type: typeof MOVE_ACCOUNT_FAIL; error: unknown; skipAlert: true } export { - FETCH_TOKENS_REQUEST, FETCH_TOKENS_SUCCESS, - FETCH_TOKENS_FAIL, - REVOKE_TOKEN_REQUEST, REVOKE_TOKEN_SUCCESS, - REVOKE_TOKEN_FAIL, - RESET_PASSWORD_REQUEST, - RESET_PASSWORD_SUCCESS, - RESET_PASSWORD_FAIL, - RESET_PASSWORD_CONFIRM_REQUEST, - RESET_PASSWORD_CONFIRM_SUCCESS, - RESET_PASSWORD_CONFIRM_FAIL, - CHANGE_PASSWORD_REQUEST, - CHANGE_PASSWORD_SUCCESS, - CHANGE_PASSWORD_FAIL, - CHANGE_EMAIL_REQUEST, - CHANGE_EMAIL_SUCCESS, - CHANGE_EMAIL_FAIL, - DELETE_ACCOUNT_REQUEST, - DELETE_ACCOUNT_SUCCESS, - DELETE_ACCOUNT_FAIL, - MOVE_ACCOUNT_REQUEST, - MOVE_ACCOUNT_SUCCESS, - MOVE_ACCOUNT_FAIL, fetchOAuthTokens, revokeOAuthTokenById, changePassword, diff --git a/packages/pl-fe/src/actions/settings.ts b/packages/pl-fe/src/actions/settings.ts index 04e6c526b..65ded3f3f 100644 --- a/packages/pl-fe/src/actions/settings.ts +++ b/packages/pl-fe/src/actions/settings.ts @@ -17,13 +17,16 @@ const FE_NAME = 'pl_fe'; type SettingOpts = { /** Whether to display an alert when settings are saved. */ showAlert?: boolean; + save?: boolean; } const saveSuccessMessage = defineMessage({ id: 'settings.save.success', defaultMessage: 'Your preferences have been saved!' }); const changeSetting = (path: string[], value: any, opts?: SettingOpts) => { useSettingsStore.getState().changeSetting(path, value); - return saveSettings(opts); + + if (opts?.save !== false) return saveSettings(opts); + return () => {}; }; const saveSettings = (opts?: SettingOpts) => diff --git a/packages/pl-fe/src/actions/statuses.ts b/packages/pl-fe/src/actions/statuses.ts index a5b45533c..882df2302 100644 --- a/packages/pl-fe/src/actions/statuses.ts +++ b/packages/pl-fe/src/actions/statuses.ts @@ -22,25 +22,15 @@ const STATUS_FETCH_SOURCE_REQUEST = 'STATUS_FETCH_SOURCE_REQUEST' as const; const STATUS_FETCH_SOURCE_SUCCESS = 'STATUS_FETCH_SOURCE_SUCCESS' as const; const STATUS_FETCH_SOURCE_FAIL = 'STATUS_FETCH_SOURCE_FAIL' as const; -const STATUS_FETCH_REQUEST = 'STATUS_FETCH_REQUEST' as const; -const STATUS_FETCH_SUCCESS = 'STATUS_FETCH_SUCCESS' as const; -const STATUS_FETCH_FAIL = 'STATUS_FETCH_FAIL' as const; - const STATUS_DELETE_REQUEST = 'STATUS_DELETE_REQUEST' as const; const STATUS_DELETE_SUCCESS = 'STATUS_DELETE_SUCCESS' as const; const STATUS_DELETE_FAIL = 'STATUS_DELETE_FAIL' as const; -const CONTEXT_FETCH_REQUEST = 'CONTEXT_FETCH_REQUEST' as const; const CONTEXT_FETCH_SUCCESS = 'CONTEXT_FETCH_SUCCESS' as const; -const CONTEXT_FETCH_FAIL = 'CONTEXT_FETCH_FAIL' as const; -const STATUS_MUTE_REQUEST = 'STATUS_MUTE_REQUEST' as const; const STATUS_MUTE_SUCCESS = 'STATUS_MUTE_SUCCESS' as const; -const STATUS_MUTE_FAIL = 'STATUS_MUTE_FAIL' as const; -const STATUS_UNMUTE_REQUEST = 'STATUS_UNMUTE_REQUEST' as const; const STATUS_UNMUTE_SUCCESS = 'STATUS_UNMUTE_SUCCESS' as const; -const STATUS_UNMUTE_FAIL = 'STATUS_UNMUTE_FAIL' as const; const STATUS_UNFILTER = 'STATUS_UNFILTER' as const; @@ -99,18 +89,13 @@ const editStatus = (statusId: string) => (dispatch: AppDispatch, getState: () => const fetchStatus = (statusId: string, intl?: IntlShape) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: STATUS_FETCH_REQUEST, statusId }); - const params = intl && useSettingsStore.getState().settings.autoTranslate ? { language: intl.locale, } : undefined; return getClient(getState()).statuses.getStatus(statusId, params).then(status => { dispatch(importEntities({ statuses: [status] })); - dispatch({ type: STATUS_FETCH_SUCCESS, status }); return status; - }).catch(error => { - dispatch({ type: STATUS_FETCH_FAIL, statusId, error, skipAlert: true }); }); }; @@ -144,8 +129,6 @@ const updateStatus = (status: BaseStatus) => (dispatch: AppDispatch) => const fetchContext = (statusId: string, intl?: IntlShape) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch({ type: CONTEXT_FETCH_REQUEST, statusId }); - const params = intl && useSettingsStore.getState().settings.autoTranslate ? { language: intl.locale, } : undefined; @@ -160,8 +143,6 @@ const fetchContext = (statusId: string, intl?: IntlShape) => if (error.response?.status === 404) { dispatch(deleteFromTimelines(statusId)); } - - dispatch({ type: CONTEXT_FETCH_FAIL, statusId, error, skipAlert: true }); }); }; @@ -175,11 +156,8 @@ const muteStatus = (statusId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch({ type: STATUS_MUTE_REQUEST, statusId }); return getClient(getState()).statuses.muteStatus(statusId).then((status) => { dispatch({ type: STATUS_MUTE_SUCCESS, statusId }); - }).catch(error => { - dispatch({ type: STATUS_MUTE_FAIL, statusId, error }); }); }; @@ -187,22 +165,13 @@ const unmuteStatus = (statusId: string) => (dispatch: AppDispatch, getState: () => RootState) => { if (!isLoggedIn(getState)) return; - dispatch({ type: STATUS_UNMUTE_REQUEST, statusId }); return getClient(getState()).statuses.unmuteStatus(statusId).then(() => { dispatch({ type: STATUS_UNMUTE_SUCCESS, statusId }); - }).catch(error => { - dispatch({ type: STATUS_UNMUTE_FAIL, statusId, error }); }); }; const toggleMuteStatus = (status: Pick) => - (dispatch: AppDispatch) => { - if (status.muted) { - dispatch(unmuteStatus(status.id)); - } else { - dispatch(muteStatus(status.id)); - } - }; + status.muted ? unmuteStatus(status.id) : muteStatus(status.id); // let TRANSLATIONS_QUEUE: Set = new Set(); // let TRANSLATIONS_TIMEOUT: NodeJS.Timeout | null = null; @@ -265,21 +234,12 @@ type StatusesAction = | { type: typeof STATUS_FETCH_SOURCE_REQUEST } | { type: typeof STATUS_FETCH_SOURCE_SUCCESS } | { type: typeof STATUS_FETCH_SOURCE_FAIL; error: unknown } - | { type: typeof STATUS_FETCH_REQUEST; statusId: string } - | { type: typeof STATUS_FETCH_SUCCESS; status: BaseStatus } - | { type: typeof STATUS_FETCH_FAIL; statusId: string; error: unknown; skipAlert: true } | { type: typeof STATUS_DELETE_REQUEST; params: Pick } | { type: typeof STATUS_DELETE_SUCCESS; statusId: string } | { type: typeof STATUS_DELETE_FAIL; params: Pick; error: unknown } - | { type: typeof CONTEXT_FETCH_REQUEST; statusId: string } | { type: typeof CONTEXT_FETCH_SUCCESS; statusId: string; ancestors: Array; descendants: Array } - | { type: typeof CONTEXT_FETCH_FAIL; statusId: string; error: unknown; skipAlert: true } - | { type: typeof STATUS_MUTE_REQUEST; statusId: string } | { type: typeof STATUS_MUTE_SUCCESS; statusId: string } - | { type: typeof STATUS_MUTE_FAIL; statusId: string; error: unknown } - | { type: typeof STATUS_UNMUTE_REQUEST; statusId: string } | { type: typeof STATUS_UNMUTE_SUCCESS; statusId: string } - | { type: typeof STATUS_UNMUTE_FAIL; statusId: string; error: unknown } | ReturnType export { @@ -289,21 +249,12 @@ export { STATUS_FETCH_SOURCE_REQUEST, STATUS_FETCH_SOURCE_SUCCESS, STATUS_FETCH_SOURCE_FAIL, - STATUS_FETCH_REQUEST, - STATUS_FETCH_SUCCESS, - STATUS_FETCH_FAIL, STATUS_DELETE_REQUEST, STATUS_DELETE_SUCCESS, STATUS_DELETE_FAIL, - CONTEXT_FETCH_REQUEST, CONTEXT_FETCH_SUCCESS, - CONTEXT_FETCH_FAIL, - STATUS_MUTE_REQUEST, STATUS_MUTE_SUCCESS, - STATUS_MUTE_FAIL, - STATUS_UNMUTE_REQUEST, STATUS_UNMUTE_SUCCESS, - STATUS_UNMUTE_FAIL, STATUS_UNFILTER, createStatus, editStatus, diff --git a/packages/pl-fe/src/actions/tags.ts b/packages/pl-fe/src/actions/tags.ts deleted file mode 100644 index f642f5d05..000000000 --- a/packages/pl-fe/src/actions/tags.ts +++ /dev/null @@ -1,198 +0,0 @@ -import { getClient } from '../api'; - -import type { PaginatedResponse, Tag } from 'pl-api'; -import type { AppDispatch, RootState } from 'pl-fe/store'; - -const HASHTAG_FETCH_REQUEST = 'HASHTAG_FETCH_REQUEST' as const; -const HASHTAG_FETCH_SUCCESS = 'HASHTAG_FETCH_SUCCESS' as const; -const HASHTAG_FETCH_FAIL = 'HASHTAG_FETCH_FAIL' as const; - -const HASHTAG_FOLLOW_REQUEST = 'HASHTAG_FOLLOW_REQUEST' as const; -const HASHTAG_FOLLOW_SUCCESS = 'HASHTAG_FOLLOW_SUCCESS' as const; -const HASHTAG_FOLLOW_FAIL = 'HASHTAG_FOLLOW_FAIL' as const; - -const HASHTAG_UNFOLLOW_REQUEST = 'HASHTAG_UNFOLLOW_REQUEST' as const; -const HASHTAG_UNFOLLOW_SUCCESS = 'HASHTAG_UNFOLLOW_SUCCESS' as const; -const HASHTAG_UNFOLLOW_FAIL = 'HASHTAG_UNFOLLOW_FAIL' as const; - -const FOLLOWED_HASHTAGS_FETCH_REQUEST = 'FOLLOWED_HASHTAGS_FETCH_REQUEST' as const; -const FOLLOWED_HASHTAGS_FETCH_SUCCESS = 'FOLLOWED_HASHTAGS_FETCH_SUCCESS' as const; -const FOLLOWED_HASHTAGS_FETCH_FAIL = 'FOLLOWED_HASHTAGS_FETCH_FAIL' as const; - -const FOLLOWED_HASHTAGS_EXPAND_REQUEST = 'FOLLOWED_HASHTAGS_EXPAND_REQUEST' as const; -const FOLLOWED_HASHTAGS_EXPAND_SUCCESS = 'FOLLOWED_HASHTAGS_EXPAND_SUCCESS' as const; -const FOLLOWED_HASHTAGS_EXPAND_FAIL = 'FOLLOWED_HASHTAGS_EXPAND_FAIL' as const; - -const fetchHashtag = (name: string) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(fetchHashtagRequest()); - - return getClient(getState()).myAccount.getTag(name).then((data) => { - dispatch(fetchHashtagSuccess(name, data)); - }).catch(err => { - dispatch(fetchHashtagFail(err)); - }); -}; - -const fetchHashtagRequest = () => ({ - type: HASHTAG_FETCH_REQUEST, -}); - -const fetchHashtagSuccess = (name: string, tag: Tag) => ({ - type: HASHTAG_FETCH_SUCCESS, - name, - tag, -}); - -const fetchHashtagFail = (error: unknown) => ({ - type: HASHTAG_FETCH_FAIL, - error, -}); - -const followHashtag = (name: string) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(followHashtagRequest(name)); - - return getClient(getState()).myAccount.followTag(name).then((data) => { - dispatch(followHashtagSuccess(name, data)); - }).catch(err => { - dispatch(followHashtagFail(name, err)); - }); -}; - -const followHashtagRequest = (name: string) => ({ - type: HASHTAG_FOLLOW_REQUEST, - name, -}); - -const followHashtagSuccess = (name: string, tag: Tag) => ({ - type: HASHTAG_FOLLOW_SUCCESS, - name, - tag, -}); - -const followHashtagFail = (name: string, error: unknown) => ({ - type: HASHTAG_FOLLOW_FAIL, - name, - error, -}); - -const unfollowHashtag = (name: string) => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(unfollowHashtagRequest(name)); - - return getClient(getState()).myAccount.unfollowTag(name).then((data) => { - dispatch(unfollowHashtagSuccess(name, data)); - }).catch(err => { - dispatch(unfollowHashtagFail(name, err)); - }); -}; - -const unfollowHashtagRequest = (name: string) => ({ - type: HASHTAG_UNFOLLOW_REQUEST, - name, -}); - -const unfollowHashtagSuccess = (name: string, tag: Tag) => ({ - type: HASHTAG_UNFOLLOW_SUCCESS, - name, - tag, -}); - -const unfollowHashtagFail = (name: string, error: unknown) => ({ - type: HASHTAG_UNFOLLOW_FAIL, - name, - error, -}); - -const fetchFollowedHashtags = () => (dispatch: AppDispatch, getState: () => RootState) => { - dispatch(fetchFollowedHashtagsRequest()); - - return getClient(getState()).myAccount.getFollowedTags().then(response => { - dispatch(fetchFollowedHashtagsSuccess(response.items, response.next)); - }).catch(err => { - dispatch(fetchFollowedHashtagsFail(err)); - }); -}; - -const fetchFollowedHashtagsRequest = () => ({ - type: FOLLOWED_HASHTAGS_FETCH_REQUEST, -}); - -const fetchFollowedHashtagsSuccess = (followed_tags: Array, next: (() => Promise>) | null) => ({ - type: FOLLOWED_HASHTAGS_FETCH_SUCCESS, - followed_tags, - next, -}); - -const fetchFollowedHashtagsFail = (error: unknown) => ({ - type: FOLLOWED_HASHTAGS_FETCH_FAIL, - error, -}); - -const expandFollowedHashtags = () => (dispatch: AppDispatch, getState: () => RootState) => { - const next = getState().followed_tags.next; - - if (next === null) return; - - dispatch(expandFollowedHashtagsRequest()); - - return next().then(response => { - dispatch(expandFollowedHashtagsSuccess(response.items, response.next)); - }).catch(error => { - dispatch(expandFollowedHashtagsFail(error)); - }); -}; - -const expandFollowedHashtagsRequest = () => ({ - type: FOLLOWED_HASHTAGS_EXPAND_REQUEST, -}); - -const expandFollowedHashtagsSuccess = (followed_tags: Array, next: (() => Promise>) | null) => ({ - type: FOLLOWED_HASHTAGS_EXPAND_SUCCESS, - followed_tags, - next, -}); - -const expandFollowedHashtagsFail = (error: unknown) => ({ - type: FOLLOWED_HASHTAGS_EXPAND_FAIL, - error, -}); - -type TagsAction = - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType - | ReturnType; - -export { - HASHTAG_FETCH_REQUEST, - HASHTAG_FETCH_SUCCESS, - HASHTAG_FETCH_FAIL, - HASHTAG_FOLLOW_REQUEST, - HASHTAG_FOLLOW_SUCCESS, - HASHTAG_FOLLOW_FAIL, - HASHTAG_UNFOLLOW_REQUEST, - HASHTAG_UNFOLLOW_SUCCESS, - HASHTAG_UNFOLLOW_FAIL, - FOLLOWED_HASHTAGS_FETCH_REQUEST, - FOLLOWED_HASHTAGS_FETCH_SUCCESS, - FOLLOWED_HASHTAGS_FETCH_FAIL, - FOLLOWED_HASHTAGS_EXPAND_REQUEST, - FOLLOWED_HASHTAGS_EXPAND_SUCCESS, - FOLLOWED_HASHTAGS_EXPAND_FAIL, - fetchHashtag, - followHashtag, - unfollowHashtag, - fetchFollowedHashtags, - expandFollowedHashtags, - type TagsAction, -}; diff --git a/packages/pl-fe/src/api/hooks/accounts/use-account-lookup.ts b/packages/pl-fe/src/api/hooks/accounts/use-account-lookup.ts index ac3806700..86abdc638 100644 --- a/packages/pl-fe/src/api/hooks/accounts/use-account-lookup.ts +++ b/packages/pl-fe/src/api/hooks/accounts/use-account-lookup.ts @@ -8,7 +8,8 @@ import { useFeatures } from 'pl-fe/hooks/use-features'; import { useLoggedIn } from 'pl-fe/hooks/use-logged-in'; import { type Account, normalizeAccount } from 'pl-fe/normalizers/account'; -import { useAccountScrobble } from './use-account-scrobble'; +import { useAccountScrobble } from '../../../queries/accounts/use-account-scrobble'; + import { useRelationship } from './use-relationship'; import type { Account as BaseAccount } from 'pl-api'; diff --git a/packages/pl-fe/src/api/hooks/accounts/use-account.ts b/packages/pl-fe/src/api/hooks/accounts/use-account.ts index 2f27e7ef7..75f0e3ac7 100644 --- a/packages/pl-fe/src/api/hooks/accounts/use-account.ts +++ b/packages/pl-fe/src/api/hooks/accounts/use-account.ts @@ -9,7 +9,8 @@ import { useFeatures } from 'pl-fe/hooks/use-features'; import { useLoggedIn } from 'pl-fe/hooks/use-logged-in'; import { type Account, normalizeAccount } from 'pl-fe/normalizers/account'; -import { useAccountScrobble } from './use-account-scrobble'; +import { useAccountScrobble } from '../../../queries/accounts/use-account-scrobble'; + import { useRelationship } from './use-relationship'; import type { Account as BaseAccount } from 'pl-api'; diff --git a/packages/pl-fe/src/api/hooks/admin/use-announcements.ts b/packages/pl-fe/src/api/hooks/admin/use-announcements.ts deleted file mode 100644 index c313e0895..000000000 --- a/packages/pl-fe/src/api/hooks/admin/use-announcements.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { useMutation, useQuery } from '@tanstack/react-query'; -import { - adminAnnouncementSchema, - type AdminAnnouncement, - type AdminCreateAnnouncementParams, - type AdminUpdateAnnouncementParams, -} from 'pl-api'; -import * as v from 'valibot'; - -import { useClient } from 'pl-fe/hooks/use-client'; -import { queryClient } from 'pl-fe/queries/client'; - -import { useAnnouncements as useUserAnnouncements } from '../announcements/use-announcements'; - -const useAnnouncements = () => { - const client = useClient(); - const userAnnouncements = useUserAnnouncements(); - - const getAnnouncements = async () => { - const data = await client.admin.announcements.getAnnouncements(); - - return data.items; - }; - - const result = useQuery>({ - queryKey: ['admin', 'announcements'], - queryFn: getAnnouncements, - placeholderData: [] as ReadonlyArray, - }); - - const { - mutate: createAnnouncement, - isPending: isCreating, - } = useMutation({ - mutationFn: (params: AdminCreateAnnouncementParams) => client.admin.announcements.createAnnouncement(params), - retry: false, - onSuccess: (data) => - queryClient.setQueryData(['admin', 'announcements'], (prevResult: ReadonlyArray) => - [...prevResult, v.parse(adminAnnouncementSchema, data)], - ), - onSettled: () => userAnnouncements.refetch(), - }); - - const { - mutate: updateAnnouncement, - isPending: isUpdating, - } = useMutation({ - mutationFn: ({ id, ...params }: AdminUpdateAnnouncementParams & { id: string }) => - client.admin.announcements.updateAnnouncement(id, params), - retry: false, - onSuccess: (data) => - queryClient.setQueryData(['admin', 'announcements'], (prevResult: ReadonlyArray) => - prevResult.map((announcement) => announcement.id === data.id ? v.parse(adminAnnouncementSchema, data) : announcement), - ), - onSettled: () => userAnnouncements.refetch(), - }); - - const { - mutate: deleteAnnouncement, - isPending: isDeleting, - } = useMutation({ - mutationFn: (id: string) => client.admin.announcements.deleteAnnouncement(id), - retry: false, - onSuccess: (_, id) => - queryClient.setQueryData(['admin', 'announcements'], (prevResult: ReadonlyArray) => - prevResult.filter(({ id: announcementId }) => announcementId !== id), - ), - onSettled: () => userAnnouncements.refetch(), - }); - - return { - ...result, - createAnnouncement, - isCreating, - updateAnnouncement, - isUpdating, - deleteAnnouncement, - isDeleting, - }; -}; - -export { useAnnouncements }; diff --git a/packages/pl-fe/src/api/hooks/groups/use-block-group-member.ts b/packages/pl-fe/src/api/hooks/groups/use-block-group-member.ts deleted file mode 100644 index 673b261dd..000000000 --- a/packages/pl-fe/src/api/hooks/groups/use-block-group-member.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Entities } from 'pl-fe/entity-store/entities'; -import { useCreateEntity } from 'pl-fe/entity-store/hooks/use-create-entity'; -import { useClient } from 'pl-fe/hooks/use-client'; - -import type { Group } from 'pl-api'; -import type { Account } from 'pl-fe/normalizers/account'; - -const useBlockGroupMember = (group: Pick, account: Pick) => { - const client = useClient(); - - const { createEntity } = useCreateEntity( - [Entities.GROUP_MEMBERSHIPS, account.id], - (accountIds: string[]) => client.experimental.groups.blockGroupUsers(group.id, accountIds), - ); - - return createEntity; -}; - -export { useBlockGroupMember }; diff --git a/packages/pl-fe/src/api/hooks/groups/use-group-members.test.ts b/packages/pl-fe/src/api/hooks/groups/use-group-members.test.ts deleted file mode 100644 index d6dbf53dc..000000000 --- a/packages/pl-fe/src/api/hooks/groups/use-group-members.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { GroupRoles } from 'pl-api'; - -import { __stub } from 'pl-fe/api'; -import { buildGroupMember } from 'pl-fe/jest/factory'; -import { renderHook, waitFor } from 'pl-fe/jest/test-helpers'; - -import { useGroupMembers } from './use-group-members'; - -const groupMember = buildGroupMember(); -const groupId = '1'; - -describe('useGroupMembers hook', () => { - describe('with a successful request', () => { - beforeEach(() => { - __stub((mock) => { - mock.onGet(`/api/v1/groups/${groupId}/memberships?role=${GroupRoles.ADMIN}`).reply(200, [groupMember]); - }); - }); - - it('is successful', async () => { - const { result } = renderHook(() => useGroupMembers(groupId, GroupRoles.ADMIN)); - - await waitFor(() => expect(result.current.isFetching).toBe(false)); - - expect(result.current.groupMembers.length).toBe(1); - expect(result.current.groupMembers[0].id).toBe(groupMember.id); - }); - }); - - describe('with an unsuccessful query', () => { - beforeEach(() => { - __stub((mock) => { - mock.onGet(`/api/v1/groups/${groupId}/memberships?role=${GroupRoles.ADMIN}`).networkError(); - }); - }); - - it('is has error state', async() => { - const { result } = renderHook(() => useGroupMembers(groupId, GroupRoles.ADMIN)); - - await waitFor(() => expect(result.current.isFetching).toBe(false)); - - expect(result.current.groupMembers.length).toBe(0); - expect(result.current.isError).toBeTruthy(); - }); - }); -}); diff --git a/packages/pl-fe/src/api/hooks/groups/use-group-members.ts b/packages/pl-fe/src/api/hooks/groups/use-group-members.ts deleted file mode 100644 index d8e8df888..000000000 --- a/packages/pl-fe/src/api/hooks/groups/use-group-members.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Entities } from 'pl-fe/entity-store/entities'; -import { useEntities } from 'pl-fe/entity-store/hooks/use-entities'; -import { useClient } from 'pl-fe/hooks/use-client'; -import { normalizeGroupMember, type GroupMember } from 'pl-fe/normalizers/group-member'; - -import type { GroupMember as BaseGroupMember, GroupRoles } from 'pl-api'; - -const useGroupMembers = (groupId: string, role: GroupRoles) => { - const client = useClient(); - - const { entities, ...result } = useEntities( - [Entities.GROUP_MEMBERSHIPS, groupId, role], - () => client.experimental.groups.getGroupMemberships(groupId, role), - { transform: normalizeGroupMember }, - ); - - return { - ...result, - groupMembers: entities, - }; -}; - -export { useGroupMembers }; diff --git a/packages/pl-fe/src/api/hooks/statuses/use-bookmark-folder.ts b/packages/pl-fe/src/api/hooks/statuses/use-bookmark-folder.ts deleted file mode 100644 index 79f145aaa..000000000 --- a/packages/pl-fe/src/api/hooks/statuses/use-bookmark-folder.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useBookmarkFolders } from './use-bookmark-folders'; - -const useBookmarkFolder = (folderId?: string) => useBookmarkFolders((data) => folderId ? data.find(folder => folder.id === folderId) : undefined); - -export { useBookmarkFolder }; diff --git a/packages/pl-fe/src/api/hooks/statuses/use-bookmark-folders.ts b/packages/pl-fe/src/api/hooks/statuses/use-bookmark-folders.ts deleted file mode 100644 index 7e857b1ac..000000000 --- a/packages/pl-fe/src/api/hooks/statuses/use-bookmark-folders.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; - -import { useClient } from 'pl-fe/hooks/use-client'; -import { useFeatures } from 'pl-fe/hooks/use-features'; - -import type { BookmarkFolder } from 'pl-api'; - -const useBookmarkFolders = ( - select?: ((data: Array) => T), -) => { - const client = useClient(); - const features = useFeatures(); - - return useQuery({ - queryKey: ['bookmarkFolders'], - queryFn: () => client.myAccount.getBookmarkFolders(), - enabled: features.bookmarkFolders, - select, - }); -}; - -export { useBookmarkFolders }; diff --git a/packages/pl-fe/src/api/hooks/statuses/use-create-bookmark-folder.ts b/packages/pl-fe/src/api/hooks/statuses/use-create-bookmark-folder.ts deleted file mode 100644 index 0cc9acfc8..000000000 --- a/packages/pl-fe/src/api/hooks/statuses/use-create-bookmark-folder.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { useClient } from 'pl-fe/hooks/use-client'; -import { queryClient } from 'pl-fe/queries/client'; - -interface CreateBookmarkFolderParams { - name: string; - emoji?: string; -} - -const useCreateBookmarkFolder = () => { - const client = useClient(); - - return useMutation({ - mutationKey: ['bookmarkFolders', 'create'], - mutationFn: (params: CreateBookmarkFolderParams) => client.myAccount.createBookmarkFolder(params), - onSettled: () => queryClient.invalidateQueries({ queryKey: ['bookmarkFolders'] }), - }); -}; - -export { useCreateBookmarkFolder }; diff --git a/packages/pl-fe/src/api/hooks/statuses/use-delete-bookmark-folder.ts b/packages/pl-fe/src/api/hooks/statuses/use-delete-bookmark-folder.ts deleted file mode 100644 index 9c96d5786..000000000 --- a/packages/pl-fe/src/api/hooks/statuses/use-delete-bookmark-folder.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { useClient } from 'pl-fe/hooks/use-client'; -import { queryClient } from 'pl-fe/queries/client'; - -const useDeleteBookmarkFolder = () => { - const client = useClient(); - - return useMutation({ - mutationKey: ['bookmarkFolders', 'delete'], - mutationFn: (folderId: string) => client.myAccount.deleteBookmarkFolder(folderId), - onSettled: () => queryClient.invalidateQueries({ queryKey: ['bookmarkFolders'] }), - }); -}; - -export { useDeleteBookmarkFolder }; diff --git a/packages/pl-fe/src/api/hooks/statuses/use-update-bookmark-folder.ts b/packages/pl-fe/src/api/hooks/statuses/use-update-bookmark-folder.ts deleted file mode 100644 index 13c6b28e9..000000000 --- a/packages/pl-fe/src/api/hooks/statuses/use-update-bookmark-folder.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { useClient } from 'pl-fe/hooks/use-client'; -import { queryClient } from 'pl-fe/queries/client'; - -interface UpdateBookmarkFolderParams { - name: string; - emoji?: string; -} - -const useUpdateBookmarkFolder = (folderId: string) => { - const client = useClient(); - - return useMutation({ - mutationKey: ['bookmarkFolders', 'update', folderId], - mutationFn: (params: UpdateBookmarkFolderParams) => client.myAccount.updateBookmarkFolder(folderId, params), - onSettled: () => queryClient.invalidateQueries({ queryKey: ['bookmarkFolders'] }), - }); -}; - -export { useUpdateBookmarkFolder }; diff --git a/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts b/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts index ac161db0c..8804f0741 100644 --- a/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts +++ b/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts @@ -19,7 +19,7 @@ import { useSettingsStore } from 'pl-fe/stores/settings'; import { getUnreadChatsCount, updateChatListItem } from 'pl-fe/utils/chats'; import { play, soundCache } from 'pl-fe/utils/sounds'; -import { updateReactions } from '../announcements/use-announcements'; +import { updateReactions } from '../../../queries/announcements/use-announcements'; import { useTimelineStream } from './use-timeline-stream'; diff --git a/packages/pl-fe/src/components/account.tsx b/packages/pl-fe/src/components/account.tsx index ba4434a90..9adb4ff82 100644 --- a/packages/pl-fe/src/components/account.tsx +++ b/packages/pl-fe/src/components/account.tsx @@ -85,7 +85,6 @@ interface IAccount { /** Override other actions for specificity like mute/unmute. */ actionType?: 'muting' | 'blocking' | 'follow_request' | 'biting'; avatarSize?: number; - hidden?: boolean; hideActions?: boolean; id?: string; onActionClick?: (account: AccountSchema) => void; @@ -115,7 +114,6 @@ const Account = ({ actionTitle, actionAlignment = 'center', avatarSize = 42, - hidden = false, hideActions = false, onActionClick, showAccountHoverCard = true, @@ -181,15 +179,6 @@ const Account = ({ return null; } - if (hidden) { - return ( - <> - {account.display_name} - {account.username} - - ); - } - if (withDate) timestamp = account.created_at; const LinkEl: any = withLinkToProfile ? Link : 'div'; @@ -234,7 +223,7 @@ const Account = ({ @{username} {account.favicon && ( - + )} {items} diff --git a/packages/pl-fe/src/components/announcements/announcements-panel.tsx b/packages/pl-fe/src/components/announcements/announcements-panel.tsx index ecbddd826..cb1d6c511 100644 --- a/packages/pl-fe/src/components/announcements/announcements-panel.tsx +++ b/packages/pl-fe/src/components/announcements/announcements-panel.tsx @@ -2,23 +2,21 @@ import clsx from 'clsx'; import React, { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import ReactSwipeableViews from 'react-swipeable-views'; -import { createSelector } from 'reselect'; -import { useAnnouncements } from 'pl-fe/api/hooks/announcements/use-announcements'; import Card from 'pl-fe/components/ui/card'; import HStack from 'pl-fe/components/ui/hstack'; import Widget from 'pl-fe/components/ui/widget'; -import { useAppSelector } from 'pl-fe/hooks/use-app-selector'; +import { useAnnouncements } from 'pl-fe/queries/announcements/use-announcements'; +import { useCustomEmojis } from 'pl-fe/queries/instance/use-custom-emojis'; import Announcement from './announcement'; import type { CustomEmoji } from 'pl-api'; -import type { RootState } from 'pl-fe/store'; -const customEmojiMap = createSelector([(state: RootState) => state.custom_emojis], items => items.reduce>((map, emoji) => (map[emoji.shortcode] = emoji, map), {})); +const makeCustomEmojiMap = (items: Array) => items.reduce>((map, emoji) => (map[emoji.shortcode] = emoji, map), {}); const AnnouncementsPanel = () => { - const emojiMap = useAppSelector(state => customEmojiMap(state)); + const { data: emojiMap = {} } = useCustomEmojis(makeCustomEmojiMap); const [index, setIndex] = useState(0); const { data: announcements } = useAnnouncements(); diff --git a/packages/pl-fe/src/components/announcements/reaction.tsx b/packages/pl-fe/src/components/announcements/reaction.tsx index 99ba3b790..ac6d817c2 100644 --- a/packages/pl-fe/src/components/announcements/reaction.tsx +++ b/packages/pl-fe/src/components/announcements/reaction.tsx @@ -1,9 +1,9 @@ import clsx from 'clsx'; import React, { useState } from 'react'; -import { useAnnouncements } from 'pl-fe/api/hooks/announcements/use-announcements'; import AnimatedNumber from 'pl-fe/components/animated-number'; import unicodeMapping from 'pl-fe/features/emoji/mapping'; +import { useAnnouncements } from 'pl-fe/queries/announcements/use-announcements'; import Emoji from './emoji'; diff --git a/packages/pl-fe/src/components/announcements/reactions-bar.tsx b/packages/pl-fe/src/components/announcements/reactions-bar.tsx index d0db5971b..3d56c774d 100644 --- a/packages/pl-fe/src/components/announcements/reactions-bar.tsx +++ b/packages/pl-fe/src/components/announcements/reactions-bar.tsx @@ -1,9 +1,9 @@ import React from 'react'; import { TransitionMotion, spring } from 'react-motion'; -import { useAnnouncements } from 'pl-fe/api/hooks/announcements/use-announcements'; import EmojiPickerDropdown from 'pl-fe/features/emoji/containers/emoji-picker-dropdown-container'; import { useSettings } from 'pl-fe/hooks/use-settings'; +import { useAnnouncements } from 'pl-fe/queries/announcements/use-announcements'; import Reaction from './reaction'; diff --git a/packages/pl-fe/src/components/autosuggest-account-input.tsx b/packages/pl-fe/src/components/autosuggest-account-input.tsx index aa75dae6f..fadff8f28 100644 --- a/packages/pl-fe/src/components/autosuggest-account-input.tsx +++ b/packages/pl-fe/src/components/autosuggest-account-input.tsx @@ -11,6 +11,7 @@ import type { InputThemes } from 'pl-fe/components/ui/input'; const noOp = () => { }; interface IAutosuggestAccountInput { + id?: string; onChange: React.ChangeEventHandler; onSelected: (accountId: string) => void; autoFocus?: boolean; diff --git a/packages/pl-fe/src/components/birthday-panel.tsx b/packages/pl-fe/src/components/birthday-panel.tsx index b7b9f06a6..33f7d6f7a 100644 --- a/packages/pl-fe/src/components/birthday-panel.tsx +++ b/packages/pl-fe/src/components/birthday-panel.tsx @@ -1,9 +1,9 @@ import React, { useRef, useState } from 'react'; import { FormattedMessage } from 'react-intl'; -import { useBirthdayReminders } from 'pl-fe/api/hooks/account-lists/use-birthday-reminders'; import Widget from 'pl-fe/components/ui/widget'; import AccountContainer from 'pl-fe/containers/account-container'; +import { useBirthdayReminders } from 'pl-fe/queries/accounts/use-birthday-reminders'; const timeToMidnight = () => { const now = new Date(); diff --git a/packages/pl-fe/src/components/location-search.tsx b/packages/pl-fe/src/components/location-search.tsx index 7e1a19530..4766a10a8 100644 --- a/packages/pl-fe/src/components/location-search.tsx +++ b/packages/pl-fe/src/components/location-search.tsx @@ -3,9 +3,9 @@ import clsx from 'clsx'; import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import { useSearchLocation } from 'pl-fe/api/hooks/search/use-search-location'; import AutosuggestInput, { AutoSuggestion } from 'pl-fe/components/autosuggest-input'; import Icon from 'pl-fe/components/icon'; +import { useSearchLocation } from 'pl-fe/queries/search/use-search-location'; import type { Location } from 'pl-api'; diff --git a/packages/pl-fe/src/components/search-input.tsx b/packages/pl-fe/src/components/search-input.tsx index 11460b297..36e571bf6 100644 --- a/packages/pl-fe/src/components/search-input.tsx +++ b/packages/pl-fe/src/components/search-input.tsx @@ -78,6 +78,7 @@ const SearchInput = () => {
{ account={account} action={} disabled + withLinkToProfile={false} />
diff --git a/packages/pl-fe/src/components/status-action-bar.tsx b/packages/pl-fe/src/components/status-action-bar.tsx index 413173f89..0554dc5c8 100644 --- a/packages/pl-fe/src/components/status-action-bar.tsx +++ b/packages/pl-fe/src/components/status-action-bar.tsx @@ -1,8 +1,7 @@ -import { GroupRoles } from 'pl-api'; +import { type CustomEmoji, GroupRoles } from 'pl-api'; import React, { useMemo } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useHistory, useRouteMatch } from 'react-router-dom'; -import { createSelector } from 'reselect'; import { blockAccount } from 'pl-fe/actions/accounts'; import { directCompose, mentionCompose, quoteCompose, replyCompose } from 'pl-fe/actions/compose'; @@ -13,11 +12,9 @@ import { initReport, ReportableEntities } from 'pl-fe/actions/reports'; import { changeSetting } from 'pl-fe/actions/settings'; import { deleteStatus, editStatus, toggleMuteStatus } from 'pl-fe/actions/statuses'; import { deleteFromTimelines } from 'pl-fe/actions/timelines'; -import { useBlockGroupMember } from 'pl-fe/api/hooks/groups/use-block-group-member'; import { useDeleteGroupStatus } from 'pl-fe/api/hooks/groups/use-delete-group-status'; import { useGroup } from 'pl-fe/api/hooks/groups/use-group'; import { useGroupRelationship } from 'pl-fe/api/hooks/groups/use-group-relationship'; -import { useTranslationLanguages } from 'pl-fe/api/hooks/instance/use-translation-languages'; import DropdownMenu from 'pl-fe/components/dropdown-menu'; import StatusActionButton from 'pl-fe/components/status-action-button'; import HStack from 'pl-fe/components/ui/hstack'; @@ -31,7 +28,9 @@ import { useInstance } from 'pl-fe/hooks/use-instance'; import { useOwnAccount } from 'pl-fe/hooks/use-own-account'; import { useSettings } from 'pl-fe/hooks/use-settings'; import { useChats } from 'pl-fe/queries/chats'; -import { RootState } from 'pl-fe/store'; +import { useBlockGroupUserMutation } from 'pl-fe/queries/groups/use-group-blocks'; +import { useCustomEmojis } from 'pl-fe/queries/instance/use-custom-emojis'; +import { useTranslationLanguages } from 'pl-fe/queries/instance/use-translation-languages'; import { useModalsStore } from 'pl-fe/stores/modals'; import { useStatusMetaStore } from 'pl-fe/stores/status-meta'; import toast from 'pl-fe/toast'; @@ -463,10 +462,7 @@ const DislikeButton: React.FC = ({ ); }; -const getLongerWrench = createSelector( - [(state: RootState) => state.custom_emojis], - (emojis) => emojis.find(({ shortcode }) => shortcode === 'longestest_wrench') || emojis.find(({ shortcode }) => shortcode === 'longest_wrench'), -); +const getLongerWrench = (emojis: Array) => emojis.find(({ shortcode }) => shortcode === 'longestest_wrench') || emojis.find(({ shortcode }) => shortcode === 'longest_wrench'); const WrenchButton: React.FC = ({ status, @@ -481,7 +477,7 @@ const WrenchButton: React.FC = ({ const { openModal } = useModalsStore(); const { showWrenchButton } = useSettings(); - const hasLongerWrench = useAppSelector(getLongerWrench); + const { data: hasLongerWrench } = useCustomEmojis(getLongerWrench); if (!me || withLabels || !features.emojiReacts || !showWrenchButton) return; @@ -590,7 +586,7 @@ const MenuButton: React.FC = ({ const { openModal } = useModalsStore(); const { group } = useGroup((status.group as Group)?.id as string); const deleteGroupStatus = useDeleteGroupStatus(group as Group, status.id); - const blockGroupMember = useBlockGroupMember(group as Group, status.account); + const { mutate: blockGroupMember } = useBlockGroupUserMutation(status.group?.id as string, status.account.id); const { getOrCreateChatByAccountId } = useChats(); const { groupRelationship } = useGroupRelationship(status.group_id || undefined); @@ -762,8 +758,8 @@ const MenuButton: React.FC = ({ message: intl.formatMessage(messages.groupBlockFromGroupMessage, { name: status.account.username }), confirm: intl.formatMessage(messages.groupBlockConfirm), onConfirm: () => { - blockGroupMember([status.account_id], { - onSuccess() { + blockGroupMember(undefined, { + onSuccess: () => { toast.success(intl.formatMessage(messages.blocked, { name: account?.acct })); }, }); diff --git a/packages/pl-fe/src/components/status-content.tsx b/packages/pl-fe/src/components/status-content.tsx index 966889c42..d429f5669 100644 --- a/packages/pl-fe/src/components/status-content.tsx +++ b/packages/pl-fe/src/components/status-content.tsx @@ -2,7 +2,6 @@ import clsx from 'clsx'; import React, { useState, useRef, useLayoutEffect, useMemo, useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; -import { useStatusTranslation } from 'pl-fe/api/hooks/statuses/use-status-translation'; import Icon from 'pl-fe/components/icon'; import Button from 'pl-fe/components/ui/button'; import Stack from 'pl-fe/components/ui/stack'; @@ -10,6 +9,7 @@ import Text from 'pl-fe/components/ui/text'; import Emojify from 'pl-fe/features/emoji/emojify'; import QuotedStatus from 'pl-fe/features/status/containers/quoted-status-container'; import { useSettings } from 'pl-fe/hooks/use-settings'; +import { useStatusTranslation } from 'pl-fe/queries/statuses/use-status-translation'; import { useStatusMetaStore } from 'pl-fe/stores/status-meta'; import { onlyEmoji as isOnlyEmoji } from 'pl-fe/utils/rich-content'; diff --git a/packages/pl-fe/src/components/status.tsx b/packages/pl-fe/src/components/status.tsx index 2a0296326..645355415 100644 --- a/packages/pl-fe/src/components/status.tsx +++ b/packages/pl-fe/src/components/status.tsx @@ -29,6 +29,7 @@ import StatusLanguagePicker from './status-language-picker'; import StatusReactionsBar from './status-reactions-bar'; import StatusReplyMentions from './status-reply-mentions'; import StatusInfo from './statuses/status-info'; +import Tombstone from './tombstone'; const messages = defineMessages({ reblogged_by: { id: 'status.reblogged_by', defaultMessage: '{name} reposted' }, @@ -40,7 +41,6 @@ interface IStatus { status: SelectedStatus; onClick?: () => void; muted?: boolean; - hidden?: boolean; unread?: boolean; onMoveUp?: (statusId: string, featured?: boolean) => void; onMoveDown?: (statusId: string, featured?: boolean) => void; @@ -65,7 +65,6 @@ const Status: React.FC = (props) => { onMoveUp, onMoveDown, muted, - hidden, featured, unread, hideActionBar, @@ -95,7 +94,7 @@ const Status: React.FC = (props) => { // Track height changes we know about to compensate scrolling. useEffect(() => { - didShowCard.current = Boolean(!muted && !hidden && status?.card); + didShowCard.current = Boolean(!muted && status?.card); }, []); const handleClick = (e?: React.MouseEvent) => { @@ -299,16 +298,9 @@ const Status: React.FC = (props) => { if (!status) return null; - if (hidden) { - return ( -
- <> - {actualStatus.account.display_name || actualStatus.account.username} - {actualStatus.content} - -
- ); - } + if (status.deleted) return ( + + ); if (filtered && status.showFiltered !== false) { const minHandlers = muted ? undefined : { diff --git a/packages/pl-fe/src/components/tombstone.tsx b/packages/pl-fe/src/components/tombstone.tsx index d9078a476..a1b20c460 100644 --- a/packages/pl-fe/src/components/tombstone.tsx +++ b/packages/pl-fe/src/components/tombstone.tsx @@ -8,10 +8,11 @@ interface ITombstone { id: string; onMoveUp?: (statusId: string) => void; onMoveDown?: (statusId: string) => void; + deleted?: boolean; } /** Represents a deleted item. */ -const Tombstone: React.FC = ({ id, onMoveUp, onMoveDown }) => { +const Tombstone: React.FC = ({ id, onMoveUp, onMoveDown, deleted }) => { const handlers = { moveUp: () => onMoveUp?.(id), moveDown: () => onMoveDown?.(id), @@ -25,10 +26,9 @@ const Tombstone: React.FC = ({ id, onMoveUp, onMoveDown }) => { tabIndex={0} > - + {deleted + ? + : } diff --git a/packages/pl-fe/src/components/translate-button.tsx b/packages/pl-fe/src/components/translate-button.tsx index 3d8e41198..32eab1807 100644 --- a/packages/pl-fe/src/components/translate-button.tsx +++ b/packages/pl-fe/src/components/translate-button.tsx @@ -1,8 +1,6 @@ import React, { useEffect } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; -import { useTranslationLanguages } from 'pl-fe/api/hooks/instance/use-translation-languages'; -import { useStatusTranslation } from 'pl-fe/api/hooks/statuses/use-status-translation'; import HStack from 'pl-fe/components/ui/hstack'; import Icon from 'pl-fe/components/ui/icon'; import Stack from 'pl-fe/components/ui/stack'; @@ -11,6 +9,8 @@ import { useAppSelector } from 'pl-fe/hooks/use-app-selector'; import { useFeatures } from 'pl-fe/hooks/use-features'; import { useInstance } from 'pl-fe/hooks/use-instance'; import { useSettings } from 'pl-fe/hooks/use-settings'; +import { useTranslationLanguages } from 'pl-fe/queries/instance/use-translation-languages'; +import { useStatusTranslation } from 'pl-fe/queries/statuses/use-status-translation'; import { useStatusMetaStore } from 'pl-fe/stores/status-meta'; import type { Status } from 'pl-fe/normalizers/status'; diff --git a/packages/pl-fe/src/components/upload.tsx b/packages/pl-fe/src/components/upload.tsx index 095407f05..65b238e03 100644 --- a/packages/pl-fe/src/components/upload.tsx +++ b/packages/pl-fe/src/components/upload.tsx @@ -237,7 +237,7 @@ const Upload: React.FC = ({ /> )} -
+
{mediaType === 'video' && (