import React, { useRef, useState, useEffect, useCallback } from 'react'; import PropTypes from 'prop-types'; import { usePopup } from '../../../utils/hooks/usePopup'; import { formatManagementTableDate } from '../../../utils/helpers/'; import { PageStore } from '../../../utils/stores/'; import { PopupMain } from '../../_shared'; import { MaterialIcon } from '../../_shared/material-icon/MaterialIcon'; function ManageItemTitle(props) { if (void 0 !== props.title && void 0 !== props.url) { return ( {props.title} ); } if (void 0 !== props.title) { return props.title; } if (void 0 !== props.url) { return props.url; } return N/A; } export function ManageItemDate(props) { if (void 0 !== props.date) { return formatManagementTableDate(new Date(Date.parse(props.date))); } return N/A; } function ManageItemMediaAuthor(props) { if (void 0 !== props.name && void 0 !== props.url) { return ( {props.name} ); } if (void 0 !== props.name) { return props.name; } if (void 0 !== props.url) { return props.url; } return N/A; } function ManageItemMediaActions(props) { const [popupContentRef, PopupContent, PopupTrigger] = usePopup(); const [isOpenPopup, setIsOpenPopup] = useState(false); function onPopupShow() { setIsOpenPopup(true); } function onPopupHide() { setIsOpenPopup(false); } function onCancel() { popupContentRef.current.tryToHide(); if ('function' === typeof props.onCancel) { props.onCancel(); } } function onProceed() { popupContentRef.current.tryToHide(); if ('function' === typeof props.onProceed) { props.onProceed(); } } const positionState = { updating: false, pending: 0 }; const onWindowResize = useCallback(function () { if (positionState.updating) { positionState.pending = positionState.pending + 1; } else { positionState.updating = true; const popupElem = props.containerRef.current.querySelector('.popup'); if (popupElem) { const containerClientRect = props.containerRef.current.getBoundingClientRect(); popupElem.style.position = 'fixed'; popupElem.style.left = containerClientRect.x + 'px'; if (document.body.offsetHeight < 32 + popupElem.offsetHeight + window.scrollY + containerClientRect.top) { popupElem.style.top = containerClientRect.y - popupElem.offsetHeight + 'px'; } else { popupElem.style.top = containerClientRect.y + containerClientRect.height + 'px'; } } setTimeout(() => { positionState.updating = false; if (positionState.pending) { positionState.pending = 0; onWindowResize(); } }, 8); } }, []); useEffect(() => { if (isOpenPopup) { PageStore.on('window_scroll', onWindowResize); PageStore.on('window_resize', onWindowResize); onWindowResize(); } else { PageStore.removeListener('window_scroll', onWindowResize); PageStore.removeListener('window_resize', onWindowResize); } }, [isOpenPopup]); return (
Media removal {"You're willing to remove media" + (void 0 !== props.title ? ' "' + props.title + '"' : '')}?

); } export function ManageMediaItem(props) { const actionsContainerRef = useRef(null); const [selected, setSelected] = useState(false); function onRowCheck() { setSelected(!selected); } function onClickProceed() { if ('function' === typeof props.onProceedRemoval) { props.onProceedRemoval(props.token); } } useEffect(() => { if ('function' === typeof props.onCheckRow) { props.onCheckRow(props.token, selected); } }, [selected]); useEffect(() => { setSelected(props.selectedRow); }, [props.selectedRow]); return (
{props.hideDeleteAction ? null : ( )}
{void 0 === props.media_type ? N/A : props.media_type}
{void 0 === props.encoding_status ? N/A : props.encoding_status}
{void 0 === props.state ? N/A : props.state}
{void 0 === props.is_reviewed ? ( N/A ) : props.is_reviewed ? ( ) : ( )}
{void 0 === props.featured ? ( N/A ) : props.featured ? ( ) : ( '-' )}
{void 0 === props.reported_times ? ( N/A ) : 0 === props.reported_times ? ( - ) : ( {props.reported_times} {'time' + (1 < props.reported_times ? 's' : '')} )}
); } ManageMediaItem.propTypes = { thumbnail_url: PropTypes.string, token: PropTypes.string, title: PropTypes.string, url: PropTypes.string, author_name: PropTypes.string, author_url: PropTypes.string, add_date: PropTypes.string, media_type: PropTypes.string, encoding_status: PropTypes.string, state: PropTypes.string, is_reviewed: PropTypes.bool, featured: PropTypes.bool, reported_times: PropTypes.number, onCheckRow: PropTypes.func, selectedRow: PropTypes.bool.isRequired, hideDeleteAction: PropTypes.bool.isRequired, };