import React, { useEffect } from 'react';
import {
selectIsInPreview,
selectLocalPeerName,
selectLocalPeerRoleName,
selectRoleChangeRequest,
useCustomEvent,
useHMSActions,
useHMSStore,
} from '@100mslive/react-sdk';
import { Flex, Text } from '../../..';
// @ts-ignore: No implicit Any
import { PreviewControls, PreviewTile } from '../Preview/PreviewJoin';
import { RequestPrompt } from './RequestPrompt';
import { useRoomLayoutPreviewScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
import { useMyMetadata } from '../hooks/useMetadata';
// @ts-ignore: No implicit Any
import { ROLE_CHANGE_DECLINED } from '../../common/constants';
export const RoleChangeRequestModal = () => {
const hmsActions = useHMSActions();
const { updateMetaData } = useMyMetadata();
const isPreview = useHMSStore(selectIsInPreview);
const currentRole = useHMSStore(selectLocalPeerRoleName);
const roleChangeRequest = useHMSStore(selectRoleChangeRequest);
const name = useHMSStore(selectLocalPeerName);
const { sendEvent } = useCustomEvent({ type: ROLE_CHANGE_DECLINED });
const { elements = {} } = useRoomLayoutPreviewScreen();
const { virtual_background } = elements || {};
useEffect(() => {
if (!roleChangeRequest?.role) {
return;
}
(async () => {
await hmsActions.preview({ asRole: roleChangeRequest.role.name });
})();
}, [hmsActions, roleChangeRequest, currentRole, updateMetaData]);
if (!roleChangeRequest?.role) {
return null;
}
const body = (
<>
Setup your audio and video before joining
>
);
return (
{
if (!value) {
hmsActions.rejectChangeRole(roleChangeRequest);
sendEvent({ ...roleChangeRequest, peerName: name }, { peerId: roleChangeRequest.requestedBy?.id });
await hmsActions.cancelMidCallPreview();
await hmsActions.lowerLocalPeerHand();
}
}}
body={body}
onAction={async () => {
await hmsActions.acceptChangeRole(roleChangeRequest);
await updateMetaData({ prevRole: currentRole });
await hmsActions.lowerLocalPeerHand();
}}
actionText="Accept"
disableActions={!isPreview}
/>
);
};