import type { MouseEvent as ReactMouseEvent } from 'react'; import type { FC } from '../../../../lib/teact/teact'; import React, { memo, useMemo } from '../../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../../global'; import type { OwnProps as PhotoProps } from '../Photo'; import type { OwnProps as VideoProps } from '../Video'; import { selectIsInSelectMode, selectIsMessageSelected, } from '../../../../global/selectors'; import buildClassName from '../../../../util/buildClassName'; import useLastCallback from '../../../../hooks/useLastCallback'; 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 } = getActions(); const handleMessageSelect = useLastCallback((e: ReactMouseEvent) => { e.stopPropagation(); toggleMessageSelection({ messageId: message.id, withShift: e?.shiftKey }); }); const newProps = useMemo(() => { const { dimensions: dims, onClick } = props; return { ...props, isInSelectMode, isSelected, dimensions: { ...dims, x: 0, y: 0, }, onClick: isInSelectMode ? undefined : 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)); }