import { forwardRef, useRef, useState } from 'react';
import {
getFormHeaderClasses,
getModalContainerClasses,
getModalFormClasses,
MODAL_CLOSE_BUTTON_CLASSES,
MODAL_OVERFLOW_DIVIDER_CLASSES
} from '../StreamManagerModalTheme';
import { BREAKPOINTS, STREAM_ACTION_NAME } from '../../../../constants';
import { Close } from '../../../../assets/icons';
import { clsm } from '../../../../utils';
import { MODAL_TYPE, useModal } from '../../../../contexts/Modal';
import { streamManager as $streamManagerContent } from '../../../../content';
import { useResponsiveDevice } from '../../../../contexts/ResponsiveDevice';
import { useStreamManagerActions } from '../../../../contexts/StreamManagerActions';
import Button from '../../../../components/Button';
import Modal from '../../../../components/Modal';
import ResponsivePanel from '../../../../components/ResponsivePanel';
import Spinner from '../../../../components/Spinner';
import useMediaQuery from '../../../../hooks/useMediaQuery';
import useResizeObserver from '../../../../hooks/useResizeObserver';
import useScrollListener from '../../../../../src/pages/StreamManager/streamManagerCards/StreamManagerActions/StreamManagerActionForms/AmazonProduct/useScrollListener';
const $content = $streamManagerContent;
const StreamManagerActionModal = forwardRef((_, ref) => {
const { closeModal, content, handleConfirm, handleSave, isModalOpen, type } =
useModal();
const { actionName, title, confirmText, streamManagerActionContent } =
content || {};
const {
getStreamManagerActionData,
isSendingStreamAction,
handleResetAmazonProductData
} = useStreamManagerActions();
const { isMobileView, isLandscape } = useResponsiveDevice();
const [isContentOverflowing, setIsContentOverflowing] = useState(false);
const streamManagerActionData = getStreamManagerActionData();
const mainContentRef = useRef();
const prefersDarkColorScheme = useMediaQuery('(prefers-color-scheme: dark)');
const buttonClasses = clsm(['relative', 'w-auto', 'md:w-full']);
const isAmazonProductStreamAction =
actionName === STREAM_ACTION_NAME.AMAZON_PRODUCT;
// list of stream actions that should only submit when submit button is clicked
const shouldSubmitOnButtonClick = [
STREAM_ACTION_NAME.AMAZON_PRODUCT
].includes(actionName);
useScrollListener(actionName, mainContentRef, setIsContentOverflowing);
useResizeObserver(
mainContentRef,
(entry) => {
if (entry) {
const { scrollHeight, clientHeight } = entry.target;
setIsContentOverflowing(scrollHeight > clientHeight);
}
},
isModalOpen
);
const save = () => handleSave(streamManagerActionData);
const send = (e) => {
e.preventDefault();
if (!shouldSubmitOnButtonClick) handleConfirm(streamManagerActionData);
};
const submitOnButtonClick = () => {
if (shouldSubmitOnButtonClick) handleConfirm(streamManagerActionData);
};
const onClose = () => {
actionName === STREAM_ACTION_NAME.AMAZON_PRODUCT &&
handleResetAmazonProductData();
closeModal();
};
const renderStreamManagerAction = (children) => (
<>
{
/**
* We mount/unmount the responsive panel to skip the enter and exit
* animations when switching between desktop and mobile views
*/
isMobileView && (