2024-08-04 07:09:52 -07:00
|
|
|
import { getClient } from '../api';
|
2022-06-15 13:11:36 -07:00
|
|
|
|
|
|
|
import { importFetchedPoll } from './importer';
|
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
import type { Poll } from 'pl-api';
|
2024-08-28 04:41:08 -07:00
|
|
|
import type { AppDispatch, RootState } from 'pl-fe/store';
|
2022-06-15 13:11:36 -07:00
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
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;
|
2022-06-15 13:11:36 -07:00
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
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;
|
2022-06-15 13:11:36 -07:00
|
|
|
|
2024-08-04 07:09:52 -07:00
|
|
|
const vote = (pollId: string, choices: number[]) =>
|
2022-06-15 13:11:36 -07:00
|
|
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
|
|
|
dispatch(voteRequest());
|
|
|
|
|
2024-08-04 07:09:52 -07:00
|
|
|
return getClient(getState()).polls.vote(pollId, choices).then((data) => {
|
2024-05-11 14:37:37 -07:00
|
|
|
dispatch(importFetchedPoll(data));
|
|
|
|
dispatch(voteSuccess(data));
|
|
|
|
}).catch(err => dispatch(voteFail(err)));
|
2022-06-15 13:11:36 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
const fetchPoll = (pollId: string) =>
|
|
|
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
|
|
|
dispatch(fetchPollRequest());
|
|
|
|
|
2024-08-04 07:09:52 -07:00
|
|
|
return getClient(getState()).polls.getPoll(pollId).then((data) => {
|
2024-08-06 14:19:00 -07:00
|
|
|
dispatch(importFetchedPoll(data));
|
|
|
|
dispatch(fetchPollSuccess(data));
|
|
|
|
}).catch(err => dispatch(fetchPollFail(err)));
|
2022-06-15 13:11:36 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
const voteRequest = () => ({
|
|
|
|
type: POLL_VOTE_REQUEST,
|
|
|
|
});
|
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const voteSuccess = (poll: Poll) => ({
|
2022-06-15 13:11:36 -07:00
|
|
|
type: POLL_VOTE_SUCCESS,
|
|
|
|
poll,
|
|
|
|
});
|
|
|
|
|
2023-10-23 15:22:10 -07:00
|
|
|
const voteFail = (error: unknown) => ({
|
2022-06-15 13:11:36 -07:00
|
|
|
type: POLL_VOTE_FAIL,
|
|
|
|
error,
|
|
|
|
});
|
|
|
|
|
|
|
|
const fetchPollRequest = () => ({
|
|
|
|
type: POLL_FETCH_REQUEST,
|
|
|
|
});
|
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const fetchPollSuccess = (poll: Poll) => ({
|
2022-06-15 13:11:36 -07:00
|
|
|
type: POLL_FETCH_SUCCESS,
|
|
|
|
poll,
|
|
|
|
});
|
|
|
|
|
2023-10-23 15:22:10 -07:00
|
|
|
const fetchPollFail = (error: unknown) => ({
|
2022-06-15 13:11:36 -07:00
|
|
|
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,
|
|
|
|
};
|