import { MouseEvent as ReactMouseEvent } from 'react'; import React, { FC, useCallback, useMemo, memo, } from '../../../../lib/teact/teact'; import { getDispatch, withGlobal } from '../../../../lib/teact/teactn'; import { OwnProps as PhotoProps } from '../Photo'; import { OwnProps as VideoProps } from '../Video'; import buildClassName from '../../../../util/buildClassName'; import { selectIsInSelectMode, selectIsMessageSelected, } from '../../../../modules/selectors'; type OwnProps = PhotoProps & VideoProps; type StateProps = { isInSelectMode?: boolean; isSelected?: boolean; }; export default function withSelectControl(WrappedComponent: FC) { const ComponentWithSelectControl: FC = (props) => { const { isInSelectMode, isSelected, message, dimensions, } = props; const { toggleMessageSelection } = getDispatch(); const handleMessageSelect = useCallback((e: ReactMouseEvent) => { e.stopPropagation(); toggleMessageSelection({ messageId: message.id, withShift: e?.shiftKey }); }, [toggleMessageSelection, message]); const newProps = useMemo(() => { return { ...props, isInSelectMode, isSelected, dimensions: { ...props.dimensions, x: 0, y: 0, }, onClick: isInSelectMode ? undefined : props.onClick, }; }, [props, isInSelectMode, isSelected]); return (
{isInSelectMode && (
{isSelected && ( )}
)} {/* eslint-disable-next-line react/jsx-props-no-spreading */}
); }; return memo(withGlobal( (global, ownProps) => { const { message } = ownProps; return { isInSelectMode: selectIsInSelectMode(global), isSelected: selectIsMessageSelected(global, message.id), }; }, )(ComponentWithSelectControl)); }