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 a1dd33ae9..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 {
@@ -2214,11 +2214,8 @@ class PlApiClient {
* Requires features{@link Features['statusDislikes']}.
* @see {@link https://github.com/friendica/friendica/blob/2024.06-rc/doc/API-Friendica.md#get-apifriendicastatusesiddisliked_by}
*/
- getDislikedBy: async (statusId: string) => {
- const response = await this.request(`/api/friendica/statuses/${statusId}/disliked_by`);
-
- return v.parse(filteredArray(accountSchema), response.json);
- },
+ getDislikedBy: async (statusId: string) =>
+ this.#paginatedGet(`/api/v1/statuses/${statusId}/disliked_by`, {}, accountSchema),
/**
* Marks the given status as disliked by this user
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/lib/features.ts b/packages/pl-api/lib/features.ts
index 7c97b291d..d261f3b18 100644
--- a/packages/pl-api/lib/features.ts
+++ b/packages/pl-api/lib/features.ts
@@ -257,6 +257,7 @@ const getFeatures = (instance: Instance) => {
announcements: any([
v.software === FIREFISH,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA,
v.software === TAKAHE && gte(v.version, '0.7.0'),
@@ -283,6 +284,7 @@ const getFeatures = (instance: Instance) => {
* see POST /api/v1/bite
*/
bites: any([
+ v.software === ICESHRIMP_NET,
v.software === TOKI,
instance.api_versions['bites.pleroma.pl-api'] >= 1,
]),
@@ -309,6 +311,7 @@ const getFeatures = (instance: Instance) => {
v.software === FIREFISH,
v.software === GOTOSOCIAL,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === FRIENDICA,
v.software === MASTODON,
v.software === MITRA && gte(v.version, '3.3.0'),
@@ -325,6 +328,7 @@ const getFeatures = (instance: Instance) => {
bots: any([
v.software === GOTOSOCIAL,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA,
]),
@@ -359,6 +363,7 @@ const getFeatures = (instance: Instance) => {
v.software === FRIENDICA,
v.software === GOTOSOCIAL && gte(v.version, '0.17.0'),
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PIXELFED,
v.software === PLEROMA,
@@ -439,6 +444,7 @@ const getFeatures = (instance: Instance) => {
v.software === FRIENDICA,
v.software === GOTOSOCIAL,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === MITRA,
v.software === PIXELFED,
@@ -455,6 +461,7 @@ const getFeatures = (instance: Instance) => {
v.software === FIREFISH,
v.software === FRIENDICA && gte(v.version, '2022.12.0'),
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === MITRA,
v.software === TAKAHE && gte(v.version, '0.8.0'),
@@ -527,6 +534,7 @@ const getFeatures = (instance: Instance) => {
v.software === FRIENDICA,
v.software === GOTOSOCIAL,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === TAKAHE && gte(v.version, '0.6.1'),
v.software === TOKI,
@@ -563,6 +571,7 @@ const getFeatures = (instance: Instance) => {
*/
filtersV2: any([
v.software === GOTOSOCIAL && gte(v.version, '0.16.0'),
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
]),
@@ -624,6 +633,7 @@ const getFeatures = (instance: Instance) => {
*/
frontendConfigurations: any([
v.software === DITTO,
+ v.software === ICESHRIMP_NET,
v.software === PLEROMA,
]),
@@ -750,6 +760,7 @@ const getFeatures = (instance: Instance) => {
v.software === FRIENDICA,
v.software === GOTOSOCIAL,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA,
]),
@@ -820,6 +831,7 @@ const getFeatures = (instance: Instance) => {
mediaV2: any([
v.software === FIREFISH,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === MITRA,
v.software === PLEROMA,
@@ -850,6 +862,7 @@ const getFeatures = (instance: Instance) => {
v.software === FRIENDICA,
v.software === GOTOSOCIAL && gte(v.version, '0.16.0'),
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === MITRA,
v.software === PIXELFED,
@@ -865,6 +878,7 @@ const getFeatures = (instance: Instance) => {
v.software === FIREFISH,
v.software === GOTOSOCIAL && gte(v.version, '0.16.0'),
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA,
v.software === TAKAHE,
@@ -903,6 +917,7 @@ const getFeatures = (instance: Instance) => {
notificationsIncludeTypes: any([
v.software === FIREFISH,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA && gte(v.version, '2.5.0'),
v.software === TAKAHE && gte(v.version, '0.6.2'),
@@ -965,6 +980,7 @@ const getFeatures = (instance: Instance) => {
polls: any([
v.software === FIREFISH,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === TAKAHE && gte(v.version, '0.8.0'),
v.software === GOTOSOCIAL,
@@ -1014,6 +1030,7 @@ const getFeatures = (instance: Instance) => {
v.software === DITTO,
v.software === GOTOSOCIAL,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === MITRA,
v.software === PLEROMA,
@@ -1037,6 +1054,7 @@ const getFeatures = (instance: Instance) => {
v.software === FRIENDICA,
v.software === GOTOSOCIAL,
v.software === ICESHRIMP,
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA,
v.software === TAKAHE,
@@ -1048,6 +1066,7 @@ const getFeatures = (instance: Instance) => {
* @see POST /api/v1/statuses
*/
quotePosts: any([
+ v.software === ICESHRIMP_NET,
v.software === FRIENDICA && gte(v.version, '2023.3.0'),
v.software === PLEROMA && [REBASED, AKKOMA].includes(v.build!) && gte(v.version, '2.5.0'),
instance.api_versions['quote_posting.pleroma.pl-api'] >= 1,
@@ -1059,6 +1078,7 @@ const getFeatures = (instance: Instance) => {
* @see POST /api/v1/statuses/:id/reblog
*/
reblogVisibility: any([
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA,
]),
@@ -1074,6 +1094,7 @@ const getFeatures = (instance: Instance) => {
* @see POST /api/v1/accounts/:id/remove_from_followers
*/
removeFromFollowers: any([
+ v.software === ICESHRIMP_NET,
v.software === MASTODON,
v.software === PLEROMA && gte(v.version, '2.5.0'),
v.software === PLEROMA && v.build === AKKOMA,
diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json
index 61b7cfa3b..7816f8a90 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.1",
+ "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/heroku.yml b/packages/pl-fe/heroku.yml
deleted file mode 100644
index 8eec25b9c..000000000
--- a/packages/pl-fe/heroku.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-build:
- docker:
- web: Dockerfile
diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json
index 3f07f1f6f..565a1171b 100644
--- a/packages/pl-fe/package.json
+++ b/packages/pl-fe/package.json
@@ -39,29 +39,29 @@
],
"dependencies": {
"@emoji-mart/data": "^1.2.1",
- "@floating-ui/react": "^0.26.27",
+ "@floating-ui/react": "^0.26.28",
"@fontsource/inter": "^5.1.0",
"@fontsource/noto-sans-javanese": "^5.1.0",
"@fontsource/roboto-mono": "^5.1.0",
"@fontsource/tajawal": "^5.1.0",
- "@lexical/clipboard": "^0.20.0",
- "@lexical/code": "^0.20.0",
- "@lexical/hashtag": "^0.20.0",
- "@lexical/link": "^0.20.0",
- "@lexical/list": "^0.20.0",
- "@lexical/react": "^0.20.0",
- "@lexical/rich-text": "^0.20.0",
- "@lexical/selection": "^0.20.0",
- "@lexical/utils": "^0.20.0",
+ "@lexical/clipboard": "^0.21.0",
+ "@lexical/code": "^0.21.0",
+ "@lexical/hashtag": "^0.21.0",
+ "@lexical/link": "^0.21.0",
+ "@lexical/list": "^0.21.0",
+ "@lexical/react": "^0.21.0",
+ "@lexical/rich-text": "^0.21.0",
+ "@lexical/selection": "^0.21.0",
+ "@lexical/utils": "^0.21.0",
"@mkljczk/lexical-remark": "^0.4.0",
"@mkljczk/react-hotkeys": "^1.2.2",
"@reach/combobox": "^0.18.0",
"@reach/rect": "^0.18.0",
"@reach/tabs": "^0.18.0",
"@reduxjs/toolkit": "^2.0.1",
- "@sentry/browser": "^8.33.0",
- "@sentry/react": "^8.33.0",
- "@tabler/icons": "^3.21.0",
+ "@sentry/browser": "^8.42.0",
+ "@sentry/react": "^8.42.0",
+ "@tabler/icons": "^3.24.0",
"@tailwindcss/aspect-ratio": "^0.4.2",
"@tailwindcss/forms": "^0.5.9",
"@tailwindcss/typography": "^0.5.15",
@@ -69,7 +69,7 @@
"@tanstack/react-virtual": "^3.10.9",
"@twemoji/svg": "^15.0.0",
"@uidotdev/usehooks": "^2.4.1",
- "@vitejs/plugin-react": "^4.3.2",
+ "@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.20",
"blurhash": "^2.0.5",
"bowser": "^2.11.0",
@@ -86,22 +86,22 @@
"flexsearch": "^0.7.43",
"fuzzysort": "^3.1.0",
"graphemesplit": "^2.4.4",
- "html-react-parser": "^5.1.18",
- "immutable": "^5.0.2",
+ "html-react-parser": "^5.1.19",
+ "immutable": "^5.0.3",
"intersection-observer": "^0.12.2",
"intl-messageformat": "^10.5.14",
"intl-pluralrules": "^2.0.1",
"isomorphic-dompurify": "^2.16.0",
"leaflet": "^1.8.0",
- "lexical": "^0.20.0",
+ "lexical": "^0.21.0",
"line-awesome": "^1.3.0",
"localforage": "^1.10.0",
"lodash": "^4.17.21",
"mini-css-extract-plugin": "^2.9.1",
"multiselect-react-dropdown": "^2.0.25",
- "mutative": "^1.0.11",
+ "mutative": "^1.1.0",
"path-browserify": "^1.0.1",
- "pl-api": "^1.0.0-rc.1",
+ "pl-api": "^1.0.0-rc.4",
"postcss": "^8.4.47",
"process": "^0.11.10",
"punycode": "^2.1.1",
@@ -114,12 +114,12 @@
"react-error-boundary": "^4.1.2",
"react-helmet-async": "^2.0.5",
"react-hot-toast": "^2.4.0",
- "react-inlinesvg": "^4.0.0",
+ "react-inlinesvg": "^4.1.5",
"react-intl": "^6.7.0",
"react-motion": "^0.5.2",
"react-redux": "^9.0.4",
"react-router-dom": "^5.3.4",
- "react-router-dom-v5-compat": "^6.26.2",
+ "react-router-dom-v5-compat": "^6.28.0",
"react-router-scroll-4": "^1.0.0-beta.2",
"react-simple-pull-to-refresh": "^1.3.3",
"react-sparklines": "^1.7.0",
@@ -132,40 +132,41 @@
"sass": "^1.79.4",
"stringz": "^2.1.0",
"tiny-queue": "^0.2.1",
- "tslib": "^2.7.0",
- "type-fest": "^4.26.1",
- "typescript": "^5.6.2",
+ "tslib": "^2.8.1",
+ "type-fest": "^4.30.0",
+ "typescript": "^5.7.2",
"util": "^0.12.5",
"valibot": "^0.42.1",
- "vite": "^5.4.8",
- "vite-plugin-compile-time": "^0.2.1",
+ "vite": "^6.0.2",
+ "vite-plugin-compile-time": "^0.3.2",
"vite-plugin-html": "^3.2.2",
"vite-plugin-require": "^1.2.14",
- "vite-plugin-static-copy": "^1.0.6",
- "zustand": "^5.0.1",
- "zustand-mutative": "^1.0.5"
+ "vite-plugin-static-copy": "^2.2.0",
+ "zustand": "^5.0.2",
+ "zustand-mutative": "^1.1.0"
},
"devDependencies": {
- "@formatjs/cli": "^6.2.12",
+ "@formatjs/cli": "^6.3.11",
"@jedmao/redux-mock-store": "^3.0.5",
- "@stylistic/eslint-plugin": "^2.8.0",
+ "@sentry/types": "^8.42.0",
+ "@stylistic/eslint-plugin": "^2.11.0",
"@testing-library/jest-dom": "^6.5.0",
"@testing-library/react": "^16.0.1",
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/user-event": "^14.5.2",
"@types/leaflet": "^1.9.12",
- "@types/lodash": "^4.17.9",
+ "@types/lodash": "^4.17.13",
"@types/path-browserify": "^1.0.3",
- "@types/react": "^18.3.11",
+ "@types/react": "^18.3.13",
"@types/react-color": "^3.0.12",
- "@types/react-dom": "^18.3.0",
+ "@types/react-dom": "^18.3.1",
"@types/react-motion": "^0.0.40",
"@types/react-router-dom": "^5.3.3",
"@types/react-sparklines": "^1.7.5",
"@types/react-swipeable-views": "^0.13.5",
"@types/redux-mock-store": "^1.0.6",
- "@typescript-eslint/eslint-plugin": "^8.14.0",
- "@typescript-eslint/parser": "^8.8.0",
+ "@typescript-eslint/eslint-plugin": "^8.17.0",
+ "@typescript-eslint/parser": "^8.17.0",
"eslint": "^8.57.1",
"eslint-import-resolver-typescript": "^3.6.3",
"eslint-plugin-compat": "^6.0.1",
@@ -178,17 +179,17 @@
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-tailwindcss": "^3.17.4",
"fake-indexeddb": "^6.0.0",
- "globals": "^15.10.0",
- "husky": "^9.1.6",
- "jsdom": "^24.0.0",
+ "globals": "^15.13.0",
+ "husky": "^9.1.7",
+ "jsdom": "^25.0.1",
"lint-staged": ">=10",
- "rollup-plugin-bundle-stats": "^4.16.0",
+ "rollup-plugin-bundle-stats": "^4.17.0",
"stylelint": "^16.9.0",
"stylelint-config-standard-scss": "^12.0.0",
- "tailwindcss": "^3.4.13",
+ "tailwindcss": "^3.4.16",
"vite-plugin-checker": "^0.8.0",
- "vite-plugin-pwa": "^0.20.5",
- "vitest": "^2.1.1"
+ "vite-plugin-pwa": "^0.21.1",
+ "vitest": "^2.1.8"
},
"resolutions": {
"@types/react": "^18.3.11",
diff --git a/packages/pl-fe/src/actions/about.test.ts b/packages/pl-fe/src/actions/about.test.ts
deleted file mode 100644
index edc1c939c..000000000
--- a/packages/pl-fe/src/actions/about.test.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-// import MockAdapter from 'axios-mock-adapter';
-import { Map as ImmutableMap } from 'immutable';
-
-// import { staticClient } from 'pl-fe/api';
-import { mockStore } from 'pl-fe/jest/test-helpers';
-
-import {
- FETCH_ABOUT_PAGE_REQUEST,
- // FETCH_ABOUT_PAGE_SUCCESS,
- FETCH_ABOUT_PAGE_FAIL,
- fetchAboutPage,
-} from './about';
-
-describe('fetchAboutPage()', () => {
- // it('creates the expected actions on success', () => {
-
- // const mock = new MockAdapter(staticClient);
-
- // mock.onGet('/instance/about/index.html')
- // .reply(200, '
Hello world
');
-
- // const expectedActions = [
- // { type: FETCH_ABOUT_PAGE_REQUEST, slug: 'index' },
- // { type: FETCH_ABOUT_PAGE_SUCCESS, slug: 'index', html: 'Hello world
' },
- // ];
- // const store = mockStore(ImmutableMap());
-
- // return store.dispatch(fetchAboutPage()).then(() => {
- // expect(store.getActions()).toEqual(expectedActions);
- // });
- // });
-
- it('creates the expected actions on failure', () => {
- const expectedActions = [
- { type: FETCH_ABOUT_PAGE_REQUEST, slug: 'asdf' },
- { type: FETCH_ABOUT_PAGE_FAIL, slug: 'asdf', error: new Error('Request failed with status code 404') },
- ];
- const store = mockStore(ImmutableMap());
-
- return store.dispatch(fetchAboutPage('asdf')).catch(() => {
- expect(store.getActions()).toEqual(expectedActions);
- });
- });
-});
diff --git a/packages/pl-fe/src/actions/about.ts b/packages/pl-fe/src/actions/about.ts
deleted file mode 100644
index abc74c13b..000000000
--- a/packages/pl-fe/src/actions/about.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { staticFetch } from '../api';
-
-import type { AppDispatch, RootState } from 'pl-fe/store';
-
-const FETCH_ABOUT_PAGE_REQUEST = 'FETCH_ABOUT_PAGE_REQUEST' as const;
-const FETCH_ABOUT_PAGE_SUCCESS = 'FETCH_ABOUT_PAGE_SUCCESS' as const;
-const FETCH_ABOUT_PAGE_FAIL = 'FETCH_ABOUT_PAGE_FAIL' as const;
-
-interface FetchAboutPageRequestAction {
- type: typeof FETCH_ABOUT_PAGE_REQUEST;
- slug: string;
- locale?: string;
-}
-
-interface FetchAboutPageSuccessAction {
- type: typeof FETCH_ABOUT_PAGE_SUCCESS;
- slug: string;
- locale?: string;
- html: string;
-}
-
-interface FetchAboutPageFailAction {
- type: typeof FETCH_ABOUT_PAGE_FAIL;
- slug: string;
- locale?: string;
- error: unknown;
-}
-
-const fetchAboutPage = (slug = 'index', locale?: string) => (dispatch: AppDispatch, getState: () => RootState) => {
- dispatch({ type: FETCH_ABOUT_PAGE_REQUEST, slug, locale });
-
- const filename = `${slug}${locale ? `.${locale}` : ''}.html`;
- return staticFetch(`/instance/about/${filename}`)
- .then(({ data: html }) => {
- dispatch({ type: FETCH_ABOUT_PAGE_SUCCESS, slug, locale, html });
- return html;
- })
- .catch(error => {
- dispatch({ type: FETCH_ABOUT_PAGE_FAIL, slug, locale, error });
- throw error;
- });
-};
-
-type AboutAction =
- | FetchAboutPageRequestAction
- | FetchAboutPageSuccessAction
- | FetchAboutPageFailAction;
-
-export {
- fetchAboutPage,
- FETCH_ABOUT_PAGE_REQUEST,
- FETCH_ABOUT_PAGE_SUCCESS,
- FETCH_ABOUT_PAGE_FAIL,
- type AboutAction,
-};
diff --git a/packages/pl-fe/src/actions/accounts.test.ts b/packages/pl-fe/src/actions/accounts.test.ts
index ef59f6708..8b6b5f10b 100644
--- a/packages/pl-fe/src/actions/accounts.test.ts
+++ b/packages/pl-fe/src/actions/accounts.test.ts
@@ -4,23 +4,17 @@ import { __stub } from 'pl-fe/api';
import { buildInstance, buildRelationship } from 'pl-fe/jest/factory';
import { mockStore, rootState } from 'pl-fe/jest/test-helpers';
import { normalizeAccount } from 'pl-fe/normalizers/account';
-import { ListRecord, ReducerRecord } from 'pl-fe/reducers/user-lists';
import {
- authorizeFollowRequest,
blockAccount,
createAccount,
- expandFollowRequests,
fetchAccount,
fetchAccountByUsername,
- fetchFollowRequests,
fetchRelationships,
muteAccount,
removeFromFollowers,
- subscribeAccount,
unblockAccount,
unmuteAccount,
- unsubscribeAccount,
} from './accounts';
let store: ReturnType;
@@ -940,240 +934,3 @@ describe('fetchRelationships()', () => {
});
});
});
-
-describe('fetchFollowRequests()', () => {
- describe('when logged out', () => {
- beforeEach(() => {
- const state = { ...rootState, me: null };
- store = mockStore(state);
- });
-
- it('should do nothing', async() => {
- await store.dispatch(fetchFollowRequests());
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('when logged in', () => {
- beforeEach(() => {
- const state = { ...rootState, me: '123' };
- store = mockStore(state);
- });
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '123',
- relationships: ImmutableMap(),
- };
-
- store = mockStore(state);
-
- __stub((mock) => {
- mock.onGet('/api/v1/follow_requests').reply(200, [], {
- link: '; rel=\'prev\'',
- });
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'FOLLOW_REQUESTS_FETCH_REQUEST' },
- { type: 'ACCOUNTS_IMPORT', accounts: [] },
- {
- type: 'FOLLOW_REQUESTS_FETCH_SUCCESS',
- accounts: [],
- next: null,
- },
- ];
- await store.dispatch(fetchFollowRequests());
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/follow_requests').networkError();
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'FOLLOW_REQUESTS_FETCH_REQUEST' },
- { type: 'FOLLOW_REQUESTS_FETCH_FAIL', error: new Error('Network Error') },
- ];
- await store.dispatch(fetchFollowRequests());
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-});
-
-describe('expandFollowRequests()', () => {
- describe('when logged out', () => {
- beforeEach(() => {
- const state = { ...rootState, me: null };
- store = mockStore(state);
- });
-
- it('should do nothing', async() => {
- await store.dispatch(expandFollowRequests());
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('when logged in', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '123',
- user_lists: ReducerRecord({
- follow_requests: ListRecord({
- next: 'next_url',
- }),
- }),
- };
- store = mockStore(state);
- });
-
- describe('when the url is null', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '123',
- user_lists: ReducerRecord({
- follow_requests: ListRecord({
- next: null,
- }),
- }),
- };
- store = mockStore(state);
- });
-
- it('should do nothing', async() => {
- await store.dispatch(expandFollowRequests());
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('next_url').reply(200, [], {
- link: '; rel=\'prev\'',
- });
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'FOLLOW_REQUESTS_EXPAND_REQUEST' },
- { type: 'ACCOUNTS_IMPORT', accounts: [] },
- {
- type: 'FOLLOW_REQUESTS_EXPAND_SUCCESS',
- accounts: [],
- next: null,
- },
- ];
- await store.dispatch(expandFollowRequests());
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('next_url').networkError();
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'FOLLOW_REQUESTS_EXPAND_REQUEST' },
- { type: 'FOLLOW_REQUESTS_EXPAND_FAIL', error: new Error('Network Error') },
- ];
- await store.dispatch(expandFollowRequests());
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-});
-
-describe('authorizeFollowRequest()', () => {
- const id = '1';
-
- describe('when logged out', () => {
- beforeEach(() => {
- const state = { ...rootState, me: null };
- store = mockStore(state);
- });
-
- it('should do nothing', async() => {
- await store.dispatch(authorizeFollowRequest(id));
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('when logged in', () => {
- beforeEach(() => {
- const state = { ...rootState, me: '123' };
- store = mockStore(state);
- });
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onPost(`/api/v1/follow_requests/${id}/authorize`).reply(200);
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'FOLLOW_REQUEST_AUTHORIZE_REQUEST', id },
- { type: 'FOLLOW_REQUEST_AUTHORIZE_SUCCESS', id },
- ];
- await store.dispatch(authorizeFollowRequest(id));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onPost(`/api/v1/follow_requests/${id}/authorize`).networkError();
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'FOLLOW_REQUEST_AUTHORIZE_REQUEST', id },
- { type: 'FOLLOW_REQUEST_AUTHORIZE_FAIL', id, error: new Error('Network Error') },
- ];
- await store.dispatch(authorizeFollowRequest(id));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/actions/accounts.ts b/packages/pl-fe/src/actions/accounts.ts
index 902e56995..0e32c425d 100644
--- a/packages/pl-fe/src/actions/accounts.ts
+++ b/packages/pl-fe/src/actions/accounts.ts
@@ -1,12 +1,8 @@
import {
PLEROMA,
type UpdateNotificationSettingsParams,
- type Account,
type CreateAccountParams,
- type PaginatedResponse,
- type PlApiClient,
type Relationship,
- type Token,
} from 'pl-api';
import { Entities } from 'pl-fe/entity-store/entities';
@@ -18,63 +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';
-import type { Me } from 'pl-fe/types/pl-fe';
-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 FOLLOW_REQUESTS_FETCH_REQUEST = 'FOLLOW_REQUESTS_FETCH_REQUEST' as const;
-const FOLLOW_REQUESTS_FETCH_SUCCESS = 'FOLLOW_REQUESTS_FETCH_SUCCESS' as const;
-const FOLLOW_REQUESTS_FETCH_FAIL = 'FOLLOW_REQUESTS_FETCH_FAIL' as const;
-
-const FOLLOW_REQUESTS_EXPAND_REQUEST = 'FOLLOW_REQUESTS_EXPAND_REQUEST' as const;
-const FOLLOW_REQUESTS_EXPAND_SUCCESS = 'FOLLOW_REQUESTS_EXPAND_SUCCESS' as const;
-const FOLLOW_REQUESTS_EXPAND_FAIL = 'FOLLOW_REQUESTS_EXPAND_FAIL' as const;
-
-const FOLLOW_REQUEST_AUTHORIZE_REQUEST = 'FOLLOW_REQUEST_AUTHORIZE_REQUEST' as const;
-const FOLLOW_REQUEST_AUTHORIZE_SUCCESS = 'FOLLOW_REQUEST_AUTHORIZE_SUCCESS' as const;
-const FOLLOW_REQUEST_AUTHORIZE_FAIL = 'FOLLOW_REQUEST_AUTHORIZE_FAIL' as const;
-
-const FOLLOW_REQUEST_REJECT_REQUEST = 'FOLLOW_REQUEST_REJECT_REQUEST' as const;
-const FOLLOW_REQUEST_REJECT_SUCCESS = 'FOLLOW_REQUEST_REJECT_SUCCESS' as const;
-const FOLLOW_REQUEST_REJECT_FAIL = 'FOLLOW_REQUEST_REJECT_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 BIRTHDAY_REMINDERS_FETCH_REQUEST = 'BIRTHDAY_REMINDERS_FETCH_REQUEST' as const;
-const BIRTHDAY_REMINDERS_FETCH_SUCCESS = 'BIRTHDAY_REMINDERS_FETCH_SUCCESS' as const;
-const BIRTHDAY_REMINDERS_FETCH_FAIL = 'BIRTHDAY_REMINDERS_FETCH_FAIL' as const;
const maybeRedirectLogin = (error: { response: PlfeResponse }, history?: History) => {
// The client is unauthorized - redirect to login.
@@ -85,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) => {
@@ -123,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));
});
};
@@ -144,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 {
@@ -162,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] }));
@@ -205,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) =>
@@ -218,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) => {
@@ -240,8 +125,6 @@ const muteAccount = (accountId: string, notifications?: boolean, duration = 0) =
const client = getClient(getState);
- dispatch(muteAccountRequest(accountId));
-
const params: Record = {
notifications,
};
@@ -266,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) =>
@@ -278,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;
@@ -318,120 +189,6 @@ const fetchRelationships = (accountIds: string[]) =>
.then(response => dispatch(importEntities({ relationships: response })));
};
-const fetchFollowRequests = () =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- if (!isLoggedIn(getState)) return null;
-
- dispatch(fetchFollowRequestsRequest());
-
- return getClient(getState()).myAccount.getFollowRequests()
- .then(response => {
- dispatch(importEntities({ accounts: response.items }));
- dispatch(fetchFollowRequestsSuccess(response.items, response.next));
- })
- .catch(error => dispatch(fetchFollowRequestsFail(error)));
- };
-
-const fetchFollowRequestsRequest = () => ({
- type: FOLLOW_REQUESTS_FETCH_REQUEST,
-});
-
-const fetchFollowRequestsSuccess = (accounts: Array, next: (() => Promise>) | null) => ({
- type: FOLLOW_REQUESTS_FETCH_SUCCESS,
- accounts,
- next,
-});
-
-const fetchFollowRequestsFail = (error: unknown) => ({
- type: FOLLOW_REQUESTS_FETCH_FAIL,
- error,
-});
-
-const expandFollowRequests = () =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- if (!isLoggedIn(getState)) return null;
-
- const next = getState().user_lists.follow_requests.next;
-
- if (next === null) return null;
-
- dispatch(expandFollowRequestsRequest());
-
- return next().then(response => {
- dispatch(importEntities({ accounts: response.items }));
- dispatch(expandFollowRequestsSuccess(response.items, response.next));
- }).catch(error => dispatch(expandFollowRequestsFail(error)));
- };
-
-const expandFollowRequestsRequest = () => ({
- type: FOLLOW_REQUESTS_EXPAND_REQUEST,
-});
-
-const expandFollowRequestsSuccess = (accounts: Array, next: (() => Promise>) | null) => ({
- type: FOLLOW_REQUESTS_EXPAND_SUCCESS,
- accounts,
- next,
-});
-
-const expandFollowRequestsFail = (error: unknown) => ({
- type: FOLLOW_REQUESTS_EXPAND_FAIL,
- error,
-});
-
-const authorizeFollowRequest = (accountId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- if (!isLoggedIn(getState)) return null;
-
- dispatch(authorizeFollowRequestRequest(accountId));
-
- return getClient(getState()).myAccount.acceptFollowRequest(accountId)
- .then(() => dispatch(authorizeFollowRequestSuccess(accountId)))
- .catch(error => dispatch(authorizeFollowRequestFail(accountId, error)));
- };
-
-const authorizeFollowRequestRequest = (accountId: string) => ({
- type: FOLLOW_REQUEST_AUTHORIZE_REQUEST,
- accountId,
-});
-
-const authorizeFollowRequestSuccess = (accountId: string) => ({
- type: FOLLOW_REQUEST_AUTHORIZE_SUCCESS,
- accountId,
-});
-
-const authorizeFollowRequestFail = (accountId: string, error: unknown) => ({
- type: FOLLOW_REQUEST_AUTHORIZE_FAIL,
- accountId,
- error,
-});
-
-const rejectFollowRequest = (accountId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- if (!isLoggedIn(getState)) return;
-
- dispatch(rejectFollowRequestRequest(accountId));
-
- return getClient(getState()).myAccount.rejectFollowRequest(accountId)
- .then(() => dispatch(rejectFollowRequestSuccess(accountId)))
- .catch(error => dispatch(rejectFollowRequestFail(accountId, error)));
- };
-
-const rejectFollowRequestRequest = (accountId: string) => ({
- type: FOLLOW_REQUEST_REJECT_REQUEST,
- accountId,
-});
-
-const rejectFollowRequestSuccess = (accountId: string) => ({
- type: FOLLOW_REQUEST_REJECT_SUCCESS,
- accountId,
-});
-
-const rejectFollowRequestFail = (accountId: string, error: unknown) => ({
- type: FOLLOW_REQUEST_REJECT_FAIL,
- accountId,
- error,
-});
-
const pinAccount = (accountId: string) =>
(dispatch: AppDispatch, getState: () => RootState) => {
if (!isLoggedIn(getState)) return dispatch(noOp);
@@ -450,253 +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;
});
- };
-
-interface BirthdayRemindersFetchRequestAction {
- type: typeof BIRTHDAY_REMINDERS_FETCH_REQUEST;
- day: number;
- month: number;
- accountId: Me;
-}
-
-interface BirthdayRemindersFetchSuccessAction {
- type: typeof BIRTHDAY_REMINDERS_FETCH_SUCCESS;
- day: number;
- month: number;
- accountId: string;
- accounts: Array;
-}
-
-interface BirthdayRemindersFetchFailAction {
- type: typeof BIRTHDAY_REMINDERS_FETCH_FAIL;
- day: number;
- month: number;
- accountId: Me;
-}
-
-const fetchBirthdayReminders = (month: number, day: number) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- if (!isLoggedIn(getState)) return;
-
- const me = getState().me as string;
-
- dispatch({ type: BIRTHDAY_REMINDERS_FETCH_REQUEST, day, month, accountId: me });
-
- return getClient(getState).accounts.getBirthdays(day, month).then(response => {
- dispatch(importEntities({ accounts: response }));
- dispatch({
- type: BIRTHDAY_REMINDERS_FETCH_SUCCESS,
- accounts: response,
- day,
- month,
- accountId: me,
- });
- }).catch(() => {
- dispatch({ type: BIRTHDAY_REMINDERS_FETCH_FAIL, day, month, accountId: me });
- });
- };
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
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | ReturnType
- | NotificationSettingsRequestAction
- | NotificationSettingsSuccessAction
- | NotificationSettingsFailAction
- | ReturnType
- | ReturnType
- | ReturnType
- | AccountSearchRequestAction
- | AccountSearchSuccessAction
- | AccountSearchFailAction
- | AccountLookupRequestAction
- | AccountLookupSuccessAction
- | AccountLookupFailAction
- | BirthdayRemindersFetchSuccessAction
- | BirthdayRemindersFetchRequestAction
- | BirthdayRemindersFetchFailAction
+ | 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,
- FOLLOW_REQUESTS_FETCH_REQUEST,
- FOLLOW_REQUESTS_FETCH_SUCCESS,
- FOLLOW_REQUESTS_FETCH_FAIL,
- FOLLOW_REQUESTS_EXPAND_REQUEST,
- FOLLOW_REQUESTS_EXPAND_SUCCESS,
- FOLLOW_REQUESTS_EXPAND_FAIL,
- FOLLOW_REQUEST_AUTHORIZE_REQUEST,
- FOLLOW_REQUEST_AUTHORIZE_SUCCESS,
- FOLLOW_REQUEST_AUTHORIZE_FAIL,
- FOLLOW_REQUEST_REJECT_REQUEST,
- FOLLOW_REQUEST_REJECT_SUCCESS,
- FOLLOW_REQUEST_REJECT_FAIL,
- NOTIFICATION_SETTINGS_REQUEST,
- NOTIFICATION_SETTINGS_SUCCESS,
- NOTIFICATION_SETTINGS_FAIL,
- BIRTHDAY_REMINDERS_FETCH_REQUEST,
- BIRTHDAY_REMINDERS_FETCH_SUCCESS,
- BIRTHDAY_REMINDERS_FETCH_FAIL,
createAccount,
fetchAccount,
fetchAccountByUsername,
@@ -706,17 +245,11 @@ export {
unmuteAccount,
removeFromFollowers,
fetchRelationships,
- fetchFollowRequests,
- expandFollowRequests,
- authorizeFollowRequest,
- rejectFollowRequest,
pinAccount,
unpinAccount,
updateNotificationSettings,
- fetchPinnedAccounts,
accountSearch,
accountLookup,
- fetchBirthdayReminders,
biteAccount,
type AccountsAction,
};
diff --git a/packages/pl-fe/src/actions/admin.ts b/packages/pl-fe/src/actions/admin.ts
index ee97042b0..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,
@@ -410,13 +263,7 @@ export {
approveUser,
deleteStatus,
toggleStatusSensitivity,
- tagUser,
- untagUser,
- setTags,
setBadges,
- promoteToAdmin,
- promoteToModerator,
- demoteToUser,
setRole,
setUserIndexQuery,
fetchUserIndex,
diff --git a/packages/pl-fe/src/actions/aliases.ts b/packages/pl-fe/src/actions/aliases.ts
index 764363007..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,84 +65,35 @@ 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,
- fetchAliasesSuggestionsReady,
clearAliasesSuggestions,
changeAliasesSuggestions,
addToAliases,
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 a0d6da0bc..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,13 +350,10 @@ 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,
- rememberAuthAccount,
loadCredentials,
logIn,
logOut,
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 3d8fb8fed..85918e0ad 100644
--- a/packages/pl-fe/src/actions/compose.ts
+++ b/packages/pl-fe/src/actions/compose.ts
@@ -13,14 +13,13 @@ import { useSettingsStore } from 'pl-fe/stores/settings';
import toast from 'pl-fe/toast';
import { isLoggedIn } from 'pl-fe/utils/auth';
-import { chooseEmoji } from './emojis';
import { importEntities } from './importer';
-import { rememberLanguageUse } from './languages';
import { uploadFile, updateMedia } from './media';
+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';
@@ -66,8 +65,6 @@ const COMPOSE_LANGUAGE_ADD = 'COMPOSE_LANGUAGE_ADD' as const;
const COMPOSE_LANGUAGE_DELETE = 'COMPOSE_LANGUAGE_DELETE' as const;
const COMPOSE_FEDERATED_CHANGE = 'COMPOSE_FEDERATED_CHANGE' as const;
-const COMPOSE_EMOJI_INSERT = 'COMPOSE_EMOJI_INSERT' as const;
-
const COMPOSE_UPLOAD_CHANGE_REQUEST = 'COMPOSE_UPLOAD_UPDATE_REQUEST' as const;
const COMPOSE_UPLOAD_CHANGE_SUCCESS = 'COMPOSE_UPLOAD_UPDATE_SUCCESS' as const;
const COMPOSE_UPLOAD_CHANGE_FAIL = 'COMPOSE_UPLOAD_UPDATE_FAIL' as const;
@@ -303,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, {
@@ -346,7 +343,6 @@ const submitCompose = (composeId: string, opts: SubmitComposeOpts = {}) =>
const compose = state.compose[composeId]!;
-
const status = compose.text;
const media = compose.media_attachments;
const statusId = compose.id;
@@ -384,7 +380,8 @@ const submitCompose = (composeId: string, opts: SubmitComposeOpts = {}) =>
useModalsStore.getState().closeModal('COMPOSE');
if (compose.language && !statusId) {
- dispatch(rememberLanguageUse(compose.language));
+ useSettingsStore.getState().rememberLanguageUse(compose.language);
+ dispatch(saveSettings());
}
const idempotencyKey = compose.idempotencyKey;
@@ -435,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) => {
@@ -598,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));
};
@@ -636,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);
@@ -686,7 +680,8 @@ const selectComposeSuggestion = (composeId: string, position: number, token: str
completion = isNativeEmoji(suggestion) ? suggestion.native : suggestion.colons;
startPosition = position - 1;
- dispatch(chooseEmoji(suggestion));
+ useSettingsStore.getState().rememberEmojiUse(suggestion);
+ dispatch(saveSettings());
} else if (typeof suggestion === 'string' && suggestion[0] === '#') {
completion = suggestion;
startPosition = position - 1;
@@ -783,14 +778,6 @@ const deleteComposeLanguage = (composeId: string, value: Language) => ({
value,
});
-const insertEmojiCompose = (composeId: string, position: number, emoji: Emoji, needsSpace: boolean) => ({
- type: COMPOSE_EMOJI_INSERT,
- composeId,
- position,
- emoji,
- needsSpace,
-});
-
const addPoll = (composeId: string) => ({
type: COMPOSE_POLL_ADD,
composeId,
@@ -977,7 +964,6 @@ type ComposeAction =
| ReturnType
| ReturnType
| ReturnType
- | ReturnType
| ReturnType
| ReturnType
| ReturnType
@@ -1028,7 +1014,6 @@ export {
COMPOSE_MODIFIED_LANGUAGE_CHANGE,
COMPOSE_LANGUAGE_ADD,
COMPOSE_LANGUAGE_DELETE,
- COMPOSE_EMOJI_INSERT,
COMPOSE_UPLOAD_CHANGE_REQUEST,
COMPOSE_UPLOAD_CHANGE_SUCCESS,
COMPOSE_UPLOAD_CHANGE_FAIL,
@@ -1050,7 +1035,6 @@ export {
COMPOSE_ADD_SUGGESTED_LANGUAGE,
COMPOSE_FEDERATED_CHANGE,
setComposeToStatus,
- changeCompose,
replyCompose,
cancelReplyCompose,
quoteCompose,
@@ -1059,7 +1043,6 @@ export {
mentionCompose,
directCompose,
directComposeById,
- handleComposeSubmit,
submitCompose,
uploadFile,
uploadCompose,
@@ -1070,11 +1053,7 @@ export {
groupComposeModal,
clearComposeSuggestions,
fetchComposeSuggestions,
- readyComposeSuggestionsEmojis,
- readyComposeSuggestionsAccounts,
selectComposeSuggestion,
- updateSuggestionTags,
- updateTagHistory,
changeComposeSpoilerness,
changeComposeContentType,
changeComposeSpoilerText,
@@ -1083,7 +1062,6 @@ export {
changeComposeModifiedLanguage,
addComposeLanguage,
deleteComposeLanguage,
- insertEmojiCompose,
addPoll,
removePoll,
addSchedule,
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/emojis.ts b/packages/pl-fe/src/actions/emojis.ts
deleted file mode 100644
index b4b949314..000000000
--- a/packages/pl-fe/src/actions/emojis.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { saveSettings } from './settings';
-
-import type { Emoji } from 'pl-fe/features/emoji';
-import type { AppDispatch } from 'pl-fe/store';
-
-const EMOJI_CHOOSE = 'EMOJI_CHOOSE';
-
-const chooseEmoji = (emoji: Emoji) =>
- (dispatch: AppDispatch) => {
- dispatch({
- type: EMOJI_CHOOSE,
- emoji,
- });
-
- dispatch(saveSettings());
- };
-
-export {
- EMOJI_CHOOSE,
- chooseEmoji,
-};
diff --git a/packages/pl-fe/src/actions/events.ts b/packages/pl-fe/src/actions/events.ts
index 944528869..4d122c802 100644
--- a/packages/pl-fe/src/actions/events.ts
+++ b/packages/pl-fe/src/actions/events.ts
@@ -6,45 +6,15 @@ import toast from 'pl-fe/toast';
import { importEntities } from './importer';
import { STATUS_FETCH_SOURCE_FAIL, STATUS_FETCH_SOURCE_REQUEST, STATUS_FETCH_SOURCE_SUCCESS } from './statuses';
-import type { Account, CreateEventParams, Location, MediaAttachment, PaginatedResponse, Status } from 'pl-api';
+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_PARTICIPATIONS_FETCH_REQUEST = 'EVENT_PARTICIPATIONS_FETCH_REQUEST' as const;
-const EVENT_PARTICIPATIONS_FETCH_SUCCESS = 'EVENT_PARTICIPATIONS_FETCH_SUCCESS' as const;
-const EVENT_PARTICIPATIONS_FETCH_FAIL = 'EVENT_PARTICIPATIONS_FETCH_FAIL' as const;
-
-const EVENT_PARTICIPATIONS_EXPAND_REQUEST = 'EVENT_PARTICIPATIONS_EXPAND_REQUEST' as const;
-const EVENT_PARTICIPATIONS_EXPAND_SUCCESS = 'EVENT_PARTICIPATIONS_EXPAND_SUCCESS' as const;
-const EVENT_PARTICIPATIONS_EXPAND_FAIL = 'EVENT_PARTICIPATIONS_EXPAND_FAIL' as const;
-
-const EVENT_PARTICIPATION_REQUESTS_FETCH_REQUEST = 'EVENT_PARTICIPATION_REQUESTS_FETCH_REQUEST' as const;
-const EVENT_PARTICIPATION_REQUESTS_FETCH_SUCCESS = 'EVENT_PARTICIPATION_REQUESTS_FETCH_SUCCESS' as const;
-const EVENT_PARTICIPATION_REQUESTS_FETCH_FAIL = 'EVENT_PARTICIPATION_REQUESTS_FETCH_FAIL' as const;
-
-const EVENT_PARTICIPATION_REQUESTS_EXPAND_REQUEST = 'EVENT_PARTICIPATION_REQUESTS_EXPAND_REQUEST' as const;
-const EVENT_PARTICIPATION_REQUESTS_EXPAND_SUCCESS = 'EVENT_PARTICIPATION_REQUESTS_EXPAND_SUCCESS' as const;
-const EVENT_PARTICIPATION_REQUESTS_EXPAND_FAIL = 'EVENT_PARTICIPATION_REQUESTS_EXPAND_FAIL' as const;
-
-const EVENT_PARTICIPATION_REQUEST_AUTHORIZE_REQUEST = 'EVENT_PARTICIPATION_REQUEST_AUTHORIZE_REQUEST' as const;
-const EVENT_PARTICIPATION_REQUEST_AUTHORIZE_SUCCESS = 'EVENT_PARTICIPATION_REQUEST_AUTHORIZE_SUCCESS' as const;
-const EVENT_PARTICIPATION_REQUEST_AUTHORIZE_FAIL = 'EVENT_PARTICIPATION_REQUEST_AUTHORIZE_FAIL' as const;
-
-const EVENT_PARTICIPATION_REQUEST_REJECT_REQUEST = 'EVENT_PARTICIPATION_REQUEST_REJECT_REQUEST' as const;
-const EVENT_PARTICIPATION_REQUEST_REJECT_SUCCESS = 'EVENT_PARTICIPATION_REQUEST_REJECT_SUCCESS' as const;
-const EVENT_PARTICIPATION_REQUEST_REJECT_FAIL = 'EVENT_PARTICIPATION_REQUEST_REJECT_FAIL' as const;
-
const EVENT_COMPOSE_CANCEL = 'EVENT_COMPOSE_CANCEL' as const;
const EVENT_FORM_SET = 'EVENT_FORM_SET' as const;
@@ -95,8 +65,6 @@ const submitEvent = ({
return;
}
- dispatch(submitEventRequest());
-
const params: CreateEventParams = {
name,
status,
@@ -115,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,
{
@@ -125,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];
@@ -156,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,
{
@@ -174,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,
@@ -198,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));
});
@@ -209,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,
@@ -221,202 +160,6 @@ const leaveEventFail = (error: unknown, statusId: string, previousState: Exclude
previousState,
});
-const fetchEventParticipations = (statusId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- dispatch(fetchEventParticipationsRequest(statusId));
-
- return getClient(getState).events.getEventParticipations(statusId).then(response => {
- dispatch(importEntities({ accounts: response.items }));
- return dispatch(fetchEventParticipationsSuccess(statusId, response.items, response.next));
- }).catch(error => {
- dispatch(fetchEventParticipationsFail(statusId, error));
- });
- };
-
-const fetchEventParticipationsRequest = (statusId: string) => ({
- type: EVENT_PARTICIPATIONS_FETCH_REQUEST,
- statusId,
-});
-
-const fetchEventParticipationsSuccess = (statusId: string, accounts: Array, next: (() => Promise>) | null) => ({
- type: EVENT_PARTICIPATIONS_FETCH_SUCCESS,
- statusId,
- accounts,
- next,
-});
-
-const fetchEventParticipationsFail = (statusId: string, error: unknown) => ({
- type: EVENT_PARTICIPATIONS_FETCH_FAIL,
- statusId,
- error,
-});
-
-const expandEventParticipations = (statusId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- const next = getState().user_lists.event_participations[statusId]?.next || null;
-
- if (next === null) {
- return dispatch(noOp);
- }
-
- dispatch(expandEventParticipationsRequest(statusId));
-
- return next().then(response => {
- dispatch(importEntities({ accounts: response.items }));
- return dispatch(expandEventParticipationsSuccess(statusId, response.items, response.next));
- }).catch(error => {
- dispatch(expandEventParticipationsFail(statusId, error));
- });
- };
-
-const expandEventParticipationsRequest = (statusId: string) => ({
- type: EVENT_PARTICIPATIONS_EXPAND_REQUEST,
- statusId,
-});
-
-const expandEventParticipationsSuccess = (statusId: string, accounts: Array, next: (() => Promise>) | null) => ({
- type: EVENT_PARTICIPATIONS_EXPAND_SUCCESS,
- statusId,
- accounts,
- next,
-});
-
-const expandEventParticipationsFail = (statusId: string, error: unknown) => ({
- type: EVENT_PARTICIPATIONS_EXPAND_FAIL,
- statusId,
- error,
-});
-
-const fetchEventParticipationRequests = (statusId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- dispatch(fetchEventParticipationRequestsRequest(statusId));
-
- return getClient(getState).events.getEventParticipationRequests(statusId).then(response => {
- dispatch(importEntities({ accounts: response.items.map(({ account }) => account) }));
- return dispatch(fetchEventParticipationRequestsSuccess(statusId, response.items, response.next));
- }).catch(error => {
- dispatch(fetchEventParticipationRequestsFail(statusId, error));
- });
- };
-
-const fetchEventParticipationRequestsRequest = (statusId: string) => ({
- type: EVENT_PARTICIPATION_REQUESTS_FETCH_REQUEST,
- statusId,
-});
-
-const fetchEventParticipationRequestsSuccess = (statusId: string, participations: Array<{
- account: Account;
- participation_message: string;
-}>, next: (() => Promise>) | null) => ({
- type: EVENT_PARTICIPATION_REQUESTS_FETCH_SUCCESS,
- statusId,
- participations,
- next,
-});
-
-const fetchEventParticipationRequestsFail = (statusId: string, error: unknown) => ({
- type: EVENT_PARTICIPATION_REQUESTS_FETCH_FAIL,
- statusId,
- error,
-});
-
-const expandEventParticipationRequests = (statusId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- const next = getState().user_lists.event_participation_requests[statusId]?.next || null;
-
- if (next === null) {
- return dispatch(noOp);
- }
-
- dispatch(expandEventParticipationRequestsRequest(statusId));
-
- return next().then(response => {
- dispatch(importEntities({ accounts: response.items.map(({ account }) => account) }));
- return dispatch(expandEventParticipationRequestsSuccess(statusId, response.items, response.next));
- }).catch(error => {
- dispatch(expandEventParticipationRequestsFail(statusId, error));
- });
- };
-
-const expandEventParticipationRequestsRequest = (statusId: string) => ({
- type: EVENT_PARTICIPATION_REQUESTS_EXPAND_REQUEST,
- statusId,
-});
-
-const expandEventParticipationRequestsSuccess = (statusId: string, participations: Array<{
- account: Account;
- participation_message: string;
-}>, next: (() => Promise>) | null) => ({
- type: EVENT_PARTICIPATION_REQUESTS_EXPAND_SUCCESS,
- statusId,
- participations,
- next,
-});
-
-const expandEventParticipationRequestsFail = (statusId: string, error: unknown) => ({
- type: EVENT_PARTICIPATION_REQUESTS_EXPAND_FAIL,
- statusId,
- error,
-});
-
-const authorizeEventParticipationRequest = (statusId: string, accountId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- dispatch(authorizeEventParticipationRequestRequest(statusId, accountId));
-
- return getClient(getState).events.acceptEventParticipationRequest(statusId, accountId).then(() => {
- dispatch(authorizeEventParticipationRequestSuccess(statusId, accountId));
- toast.success(messages.authorized);
- }).catch(error => dispatch(authorizeEventParticipationRequestFail(statusId, accountId, error)));
- };
-
-const authorizeEventParticipationRequestRequest = (statusId: string, accountId: string) => ({
- type: EVENT_PARTICIPATION_REQUEST_AUTHORIZE_REQUEST,
- statusId,
- accountId,
-});
-
-const authorizeEventParticipationRequestSuccess = (statusId: string, accountId: string) => ({
- type: EVENT_PARTICIPATION_REQUEST_AUTHORIZE_SUCCESS,
- statusId,
- accountId,
-});
-
-const authorizeEventParticipationRequestFail = (statusId: string, accountId: string, error: unknown) => ({
- type: EVENT_PARTICIPATION_REQUEST_AUTHORIZE_FAIL,
- statusId,
- accountId,
- error,
-});
-
-const rejectEventParticipationRequest = (statusId: string, accountId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- dispatch(rejectEventParticipationRequestRequest(statusId, accountId));
-
- return getClient(getState).events.rejectEventParticipationRequest(statusId, accountId).then(() => {
- dispatch(rejectEventParticipationRequestSuccess(statusId, accountId));
- toast.success(messages.rejected);
- }).catch(error => dispatch(rejectEventParticipationRequestFail(statusId, accountId, error)));
- };
-
-const rejectEventParticipationRequestRequest = (statusId: string, accountId: string) => ({
- type: EVENT_PARTICIPATION_REQUEST_REJECT_REQUEST,
- statusId,
- accountId,
-});
-
-const rejectEventParticipationRequestSuccess = (statusId: string, accountId: string) => ({
- type: EVENT_PARTICIPATION_REQUEST_REJECT_SUCCESS,
- statusId,
- accountId,
-});
-
-const rejectEventParticipationRequestFail = (statusId: string, accountId: string, error: unknown) => ({
- type: EVENT_PARTICIPATION_REQUEST_REJECT_FAIL,
- statusId,
- accountId,
- error,
-});
-
const fetchEventIcs = (statusId: string) =>
(dispatch: AppDispatch, getState: () => RootState) =>
getClient(getState).events.getEventIcs(statusId);
@@ -490,35 +233,10 @@ const fetchJoinedEvents = () =>
};
type EventsAction =
- | 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
| EventFormSetAction
| { type: typeof RECENT_EVENTS_FETCH_REQUEST }
@@ -529,33 +247,10 @@ 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_PARTICIPATIONS_FETCH_REQUEST,
- EVENT_PARTICIPATIONS_FETCH_SUCCESS,
- EVENT_PARTICIPATIONS_FETCH_FAIL,
- EVENT_PARTICIPATIONS_EXPAND_REQUEST,
- EVENT_PARTICIPATIONS_EXPAND_SUCCESS,
- EVENT_PARTICIPATIONS_EXPAND_FAIL,
- EVENT_PARTICIPATION_REQUESTS_FETCH_REQUEST,
- EVENT_PARTICIPATION_REQUESTS_FETCH_SUCCESS,
- EVENT_PARTICIPATION_REQUESTS_FETCH_FAIL,
- EVENT_PARTICIPATION_REQUESTS_EXPAND_REQUEST,
- EVENT_PARTICIPATION_REQUESTS_EXPAND_SUCCESS,
- EVENT_PARTICIPATION_REQUESTS_EXPAND_FAIL,
- EVENT_PARTICIPATION_REQUEST_AUTHORIZE_REQUEST,
- EVENT_PARTICIPATION_REQUEST_AUTHORIZE_SUCCESS,
- EVENT_PARTICIPATION_REQUEST_AUTHORIZE_FAIL,
- EVENT_PARTICIPATION_REQUEST_REJECT_REQUEST,
- EVENT_PARTICIPATION_REQUEST_REJECT_SUCCESS,
- EVENT_PARTICIPATION_REQUEST_REJECT_FAIL,
EVENT_COMPOSE_CANCEL,
EVENT_FORM_SET,
RECENT_EVENTS_FETCH_REQUEST,
@@ -567,12 +262,6 @@ export {
submitEvent,
joinEvent,
leaveEvent,
- fetchEventParticipations,
- expandEventParticipations,
- fetchEventParticipationRequests,
- expandEventParticipationRequests,
- authorizeEventParticipationRequest,
- rejectEventParticipationRequest,
fetchEventIcs,
cancelEventCompose,
initEventEdit,
diff --git a/packages/pl-fe/src/actions/export-data.ts b/packages/pl-fe/src/actions/export-data.ts
index 9c28c1911..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 16cf7cdb0..7d2cf8b34 100644
--- a/packages/pl-fe/src/actions/interactions.ts
+++ b/packages/pl-fe/src/actions/interactions.ts
@@ -6,14 +6,12 @@ import { isLoggedIn } from 'pl-fe/utils/auth';
import { getClient } from '../api';
-import { fetchRelationships } from './accounts';
import { importEntities } from './importer';
-import type { Account, EmojiReaction, PaginatedResponse, Status } from 'pl-api';
+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;
@@ -21,67 +19,26 @@ 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 REBLOGS_FETCH_REQUEST = 'REBLOGS_FETCH_REQUEST' as const;
-const REBLOGS_FETCH_SUCCESS = 'REBLOGS_FETCH_SUCCESS' as const;
-const REBLOGS_FETCH_FAIL = 'REBLOGS_FETCH_FAIL' as const;
-
-const FAVOURITES_FETCH_REQUEST = 'FAVOURITES_FETCH_REQUEST' as const;
-const FAVOURITES_FETCH_SUCCESS = 'FAVOURITES_FETCH_SUCCESS' as const;
-const FAVOURITES_FETCH_FAIL = 'FAVOURITES_FETCH_FAIL' as const;
-
-const DISLIKES_FETCH_REQUEST = 'DISLIKES_FETCH_REQUEST' as const;
-const DISLIKES_FETCH_SUCCESS = 'DISLIKES_FETCH_SUCCESS' as const;
-const DISLIKES_FETCH_FAIL = 'DISLIKES_FETCH_FAIL' as const;
-
-const REACTIONS_FETCH_REQUEST = 'REACTIONS_FETCH_REQUEST' as const;
-const REACTIONS_FETCH_SUCCESS = 'REACTIONS_FETCH_SUCCESS' as const;
-const REACTIONS_FETCH_FAIL = 'REACTIONS_FETCH_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 FAVOURITES_EXPAND_SUCCESS = 'FAVOURITES_EXPAND_SUCCESS' as const;
-const FAVOURITES_EXPAND_FAIL = 'FAVOURITES_EXPAND_FAIL' as const;
-
-const REBLOGS_EXPAND_SUCCESS = 'REBLOGS_EXPAND_SUCCESS' as const;
-const REBLOGS_EXPAND_FAIL = 'REBLOGS_EXPAND_FAIL' as const;
const noOp = () => new Promise(f => f(undefined));
-type AccountListLink = () => Promise>;
-
const messages = defineMessages({
bookmarkAdded: { id: 'status.bookmarked', defaultMessage: 'Bookmark added.' },
bookmarkRemoved: { id: 'status.unbookmarked', defaultMessage: 'Bookmark removed.' },
@@ -100,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));
});
@@ -112,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));
});
};
@@ -132,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,
@@ -149,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,
@@ -182,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));
});
};
@@ -223,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));
});
};
@@ -248,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) =>
@@ -269,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,
@@ -286,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));
@@ -325,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) => {
@@ -352,229 +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 fetchReblogs = (statusId: string) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- dispatch(fetchReblogsRequest(statusId));
-
- return getClient(getState()).statuses.getRebloggedBy(statusId).then(response => {
- dispatch(importEntities({ accounts: response.items }));
- dispatch(fetchRelationships(response.items.map((item) => item.id)));
- dispatch(fetchReblogsSuccess(statusId, response.items, response.next));
- }).catch(error => {
- dispatch(fetchReblogsFail(statusId, error));
- });
- };
-
-const fetchReblogsRequest = (statusId: string) => ({
- type: REBLOGS_FETCH_REQUEST,
- statusId,
-});
-
-const fetchReblogsSuccess = (statusId: string, accounts: Array, next: AccountListLink | null) => ({
- type: REBLOGS_FETCH_SUCCESS,
- statusId,
- accounts,
- next,
-});
-
-const fetchReblogsFail = (statusId: string, error: unknown) => ({
- type: REBLOGS_FETCH_FAIL,
- statusId,
- error,
-});
-
-const expandReblogs = (statusId: string, next: AccountListLink) =>
- (dispatch: AppDispatch, getState: () => RootState) => {
- next().then(response => {
- dispatch(importEntities({ accounts: response.items }));
- dispatch(fetchRelationships(response.items.map((item) => item.id)));
- dispatch(expandReblogsSuccess(statusId, response.items, response.next));
- }).catch(error => {
- dispatch(expandReblogsFail(statusId, error));
- });
- };
-
-const expandReblogsSuccess = (statusId: string, accounts: Array