import * as React from 'react'; import { MediaPlayer } from '../MediaPlayer/MediaPlayer'; import { ImageViewer } from '../ImageViewer/ImageViewer'; import { faExpand } from '@fortawesome/free-solid-svg-icons'; // import { PDFViewer } from '../PDFViewer/PDFViewer'; import { ERROR_MESSAGES, Creative, playbackQualityList, playbackRateList, CREATIVE_PLAYER, // CreativeStatus } from '../../utility/Constants'; import { Button, Icon, Tooltip, tooltipPosition } from '../../core'; import { faExternalLinkAlt, faVideo, faExclamationCircle, faChevronCircleRight, faChevronCircleLeft, faPencilAlt, faImage } from '@fortawesome/free-solid-svg-icons'; import { faArrowAltCircleLeft, faArrowAltCircleRight, faPlayCircle } from '@fortawesome/free-regular-svg-icons'; import { PlaybackSelector } from './PlaybackSelector'; import { routes } from '../../utility/Routes'; // import { MessageService } from '../../utility/MessageService'; // import pdfjsLib from 'pdfjs-dist/build/pdf'; // import * as pdfjslib from "pdfjs-dist"; // import * as pdfjslib from 'pdfjs-dist'; // import { PDFJSStatic } from 'pdfjs-dist' // import pdfjsLib from 'pdfjs-dist/build/pdf'; // import { MediaIssueReportPrompt } from './MediaIssueReportPrompt'; import { encrypt } from '../../utility/Crypt'; import { MediaCreativeIssueContext } from '../../utility/MediaCreativeIssueContextFactory'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import './creativePlayer.scss'; // import EditCreativeModal from './EditCreativeModal'; // import { UNIVERSAL_SEARCH_READONLY_PARAM } from './Constants'; import IFrameViewer from '../IFrameViewer'; import { useState } from 'react'; import VideoPlayer from './VideoPlayer'; interface ICreativePlayerProps { title?: string; src: string; id: string; type: string; width?: string | number; height?: string | number; toggleMediaStatus: (id: any, status: boolean) => void; thumbnailPath?: string; fullScreenMode?: boolean; onCrossButtonClick?: () => void; playerProps?: { // isPlaying?: boolean; thumbnailStatus?: boolean; setMediaInstanceProgress: (id: any, progress: number) => void; seekToStart: number; }; setPlaybackRate?: (rate: number) => void; playbackRate?: number; setPlaybackQuality?: (quality: number) => void; playbackQuality?: number; onNextPrevClick?: (type: string) => void; mediaList?: any[]; currentMediaIndex?: any; onCreativeEdit?: (payload: any) => void; onReviewThumbnailClick?: () => void; htmlSrc?: any; onPrevMediaClick?: () => void; onNextMediaClick?: () => void; currentMediaCount?: number; totalMediaCount?: number; rotatable?: boolean; showEditIcon?: boolean; controls?: boolean; muted?: boolean; isPlaying?: boolean; handleVideoFullScreen?: () => void; } interface IMediaCreativeIssueContext { global_collection_id: number; media_group: number; creative_quality_codes: any[]; onCreativeDiscard: () => void; onCreativeDiscardSuccess: () => void; context: number; } export enum MediaTypes { video = 'Video', audio = 'audio', image = 'image', document = 'document', iframe = 'Frame', html = 'Html' } export const MediaNotAvailable = () => { return (

{ERROR_MESSAGES.mediaNotFoundErrorText}

); }; export const CreativePlayer = (props: ICreativePlayerProps) => { // let PDFJS = pdfjslib.PDFJS; // PDFJS.disableTextLayer = true; // PDFJS.disableWorker = true; const showNewTab = false; const showResSelector = false; // const showPlaybackContainer = false; const { type, title, src, playbackRate, playbackQuality, mediaList = [], showEditIcon = false, controls = false, muted = false, isPlaying = true, handleVideoFullScreen } = props; const [showPlaybackContainer, setShowPlaybackContainer] = React.useState(false); const [showVideoQualityContainer, setShowVideoQualityContainer] = React.useState(false); const [mediaProgressInSeconds, setMediaProgressInSeconds]: any = React.useState(0); const [globalCreativeID,setglobalCreativeID]= React.useState(''); const [collectionCreativeID,setcollectionCreativeID]= React.useState(''); // const [showReportMediaIssueModal, setShowReportMediaIssueModal] = React.useState(false); const playbackRef: any = React.useRef(null); // const [showVideoEditor, setShowVideoEditor] = React.useState(false); // const [isCreativeEditDone] = React.useState(false); const [fullScreen, setfullScreen] = useState(false); const mediaCreativeIssueContext: any = React.useContext( MediaCreativeIssueContext.getInstance().context ) as IMediaCreativeIssueContext; const setMediaInstanceProgressInSeconds = (progress: any) => { setMediaProgressInSeconds(progress); }; React.useEffect(() => { document.addEventListener('click', handleClickOutside); return () => { document.removeEventListener('click', handleClickOutside); }; }); React.useEffect(() => { props.setPlaybackRate && props.setPlaybackRate(1); }, [src]) React.useEffect(() => { if(title?.includes("Global Creative ID")) { setcollectionCreativeID(title?.split("--")[0]); setglobalCreativeID(title?.split("--")[1]); } }, [title]) // const trimCreativeSuccess = () => { // setShowVideoEditor(false); // MessageService.showToastMessage('Your Creative is under process'); // setIsCreaticeEditDone(true); // }; // const creativeEditSave =(payload: any) => { // payload.callback = () => trimCreativeSuccess(); // props.onCreativeEdit && props.onCreativeEdit(payload) // } const handleClickOutside = (event: any): any => { if (playbackRef.current && playbackRef.current.contains(event.target)) { return; } setShowPlaybackContainer(false); setShowVideoQualityContainer(false); }; const setPlaybackRates = (selectedRate: number) => { props.setPlaybackRate && props.setPlaybackRate(selectedRate); setShowPlaybackContainer(false); }; const setPlaybackQuality = (selectedQuality: number) => { props.setPlaybackQuality && props.setPlaybackQuality(selectedQuality); setShowVideoQualityContainer(false); }; const isRadioType = () => { return type === MediaTypes.audio; }; const isVideoType = () => { return type === MediaTypes.video; }; const isImageType = () => { return type === MediaTypes.image; }; const getComponentByMediaType = (creativeType: string, creativeProps: ICreativePlayerProps) => { const { toggleMediaStatus, playerProps } = creativeProps; // const modifiedPlayerProps = { // ...playerProps, // setMediaInstanceProgressInSeconds, // retainVideoPlayedtime: mediaProgressInSeconds // }; switch (creativeType) { case MediaTypes.video: { return ( // { }} // seekToStart={0} // /> ); } case MediaTypes.audio: { return ( { }} seekToStart={0} /> ); } case MediaTypes.image: { return ; } case MediaTypes.document: { // return ; return <> } case MediaTypes.iframe: { return ; } case MediaTypes.html: { return
} default: { return ; } } }; const onPopOutButtonClick = (creativeType: any, creativeProps: ICreativePlayerProps) => { if ([MediaTypes.video, MediaTypes.image].includes(creativeType)) { const { playerProps } = creativeProps; const modifiedPlayerProps = { ...playerProps, setMediaInstanceProgressInSeconds, retainVideoPlayedtime: mediaProgressInSeconds }; window.open( `#${routes.playMedia}?creativeType=${type}&creativeProps=${encrypt( creativeProps )}&modifiedPlayerProps=${encrypt(modifiedPlayerProps)}`, '_blank' ); } else if (src) { window.open(src, '_blank'); setShowVideoQualityContainer(false); setShowPlaybackContainer(false); } else { // MessageService.showToastMessage(ERROR_MESSAGES.MediaNotAvailable); } }; const onReportIssueClick = () => { // setShowReportMediaIssueModal(true); if (mediaCreativeIssueContext.onReportMediaPopupOpen) mediaCreativeIssueContext.onReportMediaPopupOpen(); }; const enableMediaCreativeIssueFunctionality = () => { return title !== 'Similar Ad' && mediaCreativeIssueContext.show; }; const onCloseViewerClick = (data:boolean) => { setfullScreen(data) } // const showEditCreativeOption = (): boolean => { // if ( // (window.location.href.includes(routes.indexingDetailStepOne) || // window.location.href.includes(routes.classificationDetailStep1) || // window.location.href.includes(routes.audit)) && // !window.location.href.includes('component') && // !window.location.href.includes(routes.classificationDetailStep2) && // !( // window.location.href.includes(routes.universalSearch) && // window.location.href.includes(UNIVERSAL_SEARCH_READONLY_PARAM) // ) // ) { // if ( // mediaList?.[props.currentMediaIndex].high_res?.path && // mediaList?.[props.currentMediaIndex].creative_id !== null // ) { // return true; // } // return false; // } // return true; // }; const showReviewThumbnailIcon = () => { if ( window.location.href.includes(routes.audit) && window.location.href.includes(routes.classificationDetailStep1) && !window.location.href.includes('read-only=true') ) { return true; } return false; } // const onCreativeEditClick = () => { // if ( // mediaList[props.currentMediaIndex].status === CreativeStatus.IN_PROGRESS || // isCreativeEditDone === true // ) { // // MessageService.showToastMessage( // // "Creative trimming is under process. You can't trim it unless previous operations is done" // // ); // } else { // // setShowVideoEditor(true); // } // }; // const getCreativePathForEdit = () => { // if (mediaList?.[props.currentMediaIndex].status === CreativeStatus.COMPLETE) { // return mediaList[props.currentMediaIndex].creative_edit_config.original_high_res_path; // } // return mediaList[props.currentMediaIndex].high_res.path; // }; return ( <>
{title ? collectionCreativeID && collectionCreativeID!=''? collectionCreativeID: title : 'New Ad'}
{globalCreativeID && globalCreativeID!=''? globalCreativeID : ''}
{props.currentMediaCount && props.totalMediaCount &&
{props.currentMediaCount} of {props.totalMediaCount}
}
<>
{isVideoType() && showEditIcon && title !== 'Similar Ad' ? ( ) : null} {isVideoType() && showReviewThumbnailIcon() ? ( ) : null} {isRadioType() || isVideoType() && controls ? ( ) : null} {showPlaybackContainer ? (
{ setPlaybackRates(selectedRate); }} selectedOption={playbackRate} headerTitle={Creative.playbackRateHeader} data={playbackRateList} />
) : null} {isImageType() ? ( ):null} {!isImageType() && !controls ? ( ):null} {showResSelector ? ( ) : null} {showVideoQualityContainer ? (
{ setPlaybackQuality(selectedQuality); }} selectedOption={playbackQuality} headerTitle={Creative.playbackQualityHeader} data={playbackQualityList} />
) : null} {showNewTab ? ( ) : null} {enableMediaCreativeIssueFunctionality() ? ( ) : null}
{mediaList?.length > 1 ? (
props.onNextPrevClick && props.onNextPrevClick(CREATIVE_PLAYER.prev)} />
) : ( <> )}
{getComponentByMediaType(type, props)}
{mediaList?.length > 1 ? (
props.onNextPrevClick && props.onNextPrevClick(CREATIVE_PLAYER.next)} />
) : ( <> )}
{/* {enableMediaCreativeIssueFunctionality() && showReportMediaIssueModal ? ( { setShowReportMediaIssueModal(false); mediaCreativeIssueContext.onCreativeDiscard({ global_collection_id: mediaCreativeIssueContext.global_collection_id, context: mediaCreativeIssueContext.context, discard_type, reject_reason, quality_response, successCallback: mediaCreativeIssueContext.onCreativeDiscardSuccess }); }} context={mediaCreativeIssueContext.context} onClose={() => { setShowReportMediaIssueModal(false); }} creativeQualityCodes={mediaCreativeIssueContext.creative_quality_codes || []} /> ) : null} */} {/* {showVideoEditor ? ( { setShowVideoEditor(false); }} src={getCreativePathForEdit()} media={mediaList[props.currentMediaIndex]} onCreativeEdit={creativeEditSave} /> ) : null} */} ); };