32 lines
937 B
TypeScript
32 lines
937 B
TypeScript
|
import { createAction } from '@reduxjs/toolkit';
|
||
|
|
||
|
import type { PIPMediaProps } from 'mastodon/reducers/picture_in_picture';
|
||
|
import { createAppAsyncThunk } from 'mastodon/store/typed_functions';
|
||
|
|
||
|
interface DeployParams {
|
||
|
statusId: string;
|
||
|
accountId: string;
|
||
|
playerType: 'audio' | 'video';
|
||
|
props: PIPMediaProps;
|
||
|
}
|
||
|
|
||
|
export const removePictureInPicture = createAction('pip/remove');
|
||
|
|
||
|
export const deployPictureInPictureAction =
|
||
|
createAction<DeployParams>('pip/deploy');
|
||
|
|
||
|
export const deployPictureInPicture = createAppAsyncThunk(
|
||
|
'pip/deploy',
|
||
|
(args: DeployParams, { dispatch, getState }) => {
|
||
|
const { statusId } = args;
|
||
|
|
||
|
// Do not open a player for a toot that does not exist
|
||
|
|
||
|
// @ts-expect-error state.statuses is not yet typed
|
||
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
||
|
if (getState().hasIn(['statuses', statusId])) {
|
||
|
dispatch(deployPictureInPictureAction(args));
|
||
|
}
|
||
|
},
|
||
|
);
|