import * as React from 'react'; import * as classNames from 'classnames'; import {HTMLProps, SFC} from 'react'; import {compose, defaultProps, setDisplayName, withHandlers, withStateHandlers} from 'recompose'; import {Button, Icon, Img, ImgModal, Modal, ModalBody, ModalFooter} from './'; import {Image} from './models'; export interface ImageThumbnailState { modalOpen: boolean; } export interface ImageThumbnailInternalProps extends ImageThumbnailExternalProps, Partial { toggleModal?: () => ImageThumbnailState; handleRemoveButtonClick?: () => void; } export interface ImageThumbnailExternalProps extends HTMLProps { image: Image; imageAlt?: string; imageClassName?: string; noModal?: boolean; noRemoveButton?: boolean; onClickRemoveButton?: (image: Image) => void; } const enhance = compose( setDisplayName('ImgThumbnail'), defaultProps>({ imageAlt: '', imageClassName: '', noModal: false, noRemoveButton: false, toggleModal: () => { return null; }, onClickRemoveButton: () => { return null; }, }), withStateHandlers( {modalOpen: false}, {toggleModal: ({modalOpen}) => () => ({modalOpen: !modalOpen})}, ), withHandlers({ handleRemoveButtonClick: (props: ImageThumbnailInternalProps) => () => { props.onClickRemoveButton(props.image); }, }), ); export const ImgThumbnail: SFC = enhance(({ className, image, imageClassName, imageAlt, modalOpen, noModal, noRemoveButton, handleRemoveButtonClick, toggleModal, onClickRemoveButton, onLoad, onError, ...otherProps}) => { const anchorProps = noModal ? {} : { ...otherProps, href: 'javascript:void(0)', onClick: toggleModal, }; return ( {imageAlt} {!noRemoveButton && ( )} ); }) as any;