soapbox/src/reducers/me.ts

45 wiersze
1.1 KiB
TypeScript

2024-12-14 00:12:57 +00:00
import { HTTPError } from 'soapbox/api/HTTPError.ts';
import {
AUTH_LOGGED_OUT,
AUTH_ACCOUNT_REMEMBER_SUCCESS,
VERIFY_CREDENTIALS_SUCCESS,
2024-11-10 03:18:55 +00:00
} from '../actions/auth.ts';
import {
ME_FETCH_SUCCESS,
ME_FETCH_FAIL,
ME_FETCH_SKIP,
ME_PATCH_SUCCESS,
2024-11-10 03:18:55 +00:00
} from '../actions/me.ts';
2022-04-04 17:44:05 +00:00
import type { AnyAction } from 'redux';
2024-11-10 03:18:55 +00:00
import type { Me } from 'soapbox/types/soapbox.ts';
2022-04-04 17:44:05 +00:00
const initialState: Me = null;
2024-12-14 00:12:57 +00:00
const handleForbidden = (state: Me, error: unknown) => {
if (error instanceof HTTPError && ([401, 403]).includes(error.response.status)) {
return false;
} else {
return state;
}
};
2022-04-04 17:44:05 +00:00
export default function me(state: Me = initialState, action: AnyAction): Me {
switch (action.type) {
2022-05-11 21:06:35 +00:00
case ME_FETCH_SUCCESS:
case ME_PATCH_SUCCESS:
return action.me.id;
case VERIFY_CREDENTIALS_SUCCESS:
case AUTH_ACCOUNT_REMEMBER_SUCCESS:
return state || action.account.id;
case ME_FETCH_SKIP:
case AUTH_LOGGED_OUT:
return false;
case ME_FETCH_FAIL:
return handleForbidden(state, action.error);
default:
return state;
}
2021-08-03 19:22:51 +00:00
}