bigbuffet-rw/packages/pl-fe/src/actions/polls.ts
marcin mikołajczak 966b04fdf0 Call it pl-fe internally
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
2024-08-28 13:41:08 +02:00

79 lines
1.9 KiB
TypeScript

import { getClient } from '../api';
import { importFetchedPoll } from './importer';
import type { Poll } from 'pl-api';
import type { AppDispatch, RootState } from 'pl-fe/store';
const POLL_VOTE_REQUEST = 'POLL_VOTE_REQUEST' as const;
const POLL_VOTE_SUCCESS = 'POLL_VOTE_SUCCESS' as const;
const POLL_VOTE_FAIL = 'POLL_VOTE_FAIL' as const;
const POLL_FETCH_REQUEST = 'POLL_FETCH_REQUEST' as const;
const POLL_FETCH_SUCCESS = 'POLL_FETCH_SUCCESS' as const;
const POLL_FETCH_FAIL = 'POLL_FETCH_FAIL' as const;
const vote = (pollId: string, choices: number[]) =>
(dispatch: AppDispatch, getState: () => RootState) => {
dispatch(voteRequest());
return getClient(getState()).polls.vote(pollId, choices).then((data) => {
dispatch(importFetchedPoll(data));
dispatch(voteSuccess(data));
}).catch(err => dispatch(voteFail(err)));
};
const fetchPoll = (pollId: string) =>
(dispatch: AppDispatch, getState: () => RootState) => {
dispatch(fetchPollRequest());
return getClient(getState()).polls.getPoll(pollId).then((data) => {
dispatch(importFetchedPoll(data));
dispatch(fetchPollSuccess(data));
}).catch(err => dispatch(fetchPollFail(err)));
};
const voteRequest = () => ({
type: POLL_VOTE_REQUEST,
});
const voteSuccess = (poll: Poll) => ({
type: POLL_VOTE_SUCCESS,
poll,
});
const voteFail = (error: unknown) => ({
type: POLL_VOTE_FAIL,
error,
});
const fetchPollRequest = () => ({
type: POLL_FETCH_REQUEST,
});
const fetchPollSuccess = (poll: Poll) => ({
type: POLL_FETCH_SUCCESS,
poll,
});
const fetchPollFail = (error: unknown) => ({
type: POLL_FETCH_FAIL,
error,
});
export {
POLL_VOTE_REQUEST,
POLL_VOTE_SUCCESS,
POLL_VOTE_FAIL,
POLL_FETCH_REQUEST,
POLL_FETCH_SUCCESS,
POLL_FETCH_FAIL,
vote,
fetchPoll,
voteRequest,
voteSuccess,
voteFail,
fetchPollRequest,
fetchPollSuccess,
fetchPollFail,
};