Files
TheGame/packages/metamaps/components/Image.tsx
The Lone Rōnin 9a9deaf727 Metamaps base prototype (#50)
* Metamaps base prototype

Fixed project scaffolding

* Resolved all lint related issues

Resolved all issues related to lint compliance
2020-08-06 15:04:47 -06:00

115 lines
2.6 KiB
TypeScript

import { FC } from 'react';
import { useDrag } from 'react-dnd';
import { connect } from 'react-redux';
import { ImageContainer } from '../styles/Mapping';
export interface ImageProps {
dispatch: any;
id: number;
type: string;
left: number;
top: number;
width: number;
height: number;
selectedItem: number;
resizingItem: boolean;
mouseX: number;
mouseY: number;
url: string;
popup: string;
}
export const ImageComponent: FC<ImageProps> = ({
dispatch,
id,
type,
left,
top,
width,
height,
selectedItem,
resizingItem,
mouseX,
mouseY,
url,
popup,
}) => {
const [, drag] = useDrag({
item: { id, type, left, top }
})
if (selectedItem === id && resizingItem) {
let rleft; let rtop; let rwidth; let rheight;
if (mouseX > left) {
rleft = left;
rwidth = mouseX - left + 5;
} else {
rleft = mouseX - 5;
rwidth = left - mouseX + 5;
}
if (mouseY > top) {
rtop = top;
rheight = mouseY - top + 5;
} else {
rtop = mouseY - 5;
rheight = top - mouseY + 5;
}
dispatch({ type: 'UPDATE_VECTOR', rleft, rtop, rwidth, rheight });
return(
<ImageContainer
ref={drag}
style={{ left: rleft, top: rtop, width: rwidth, height: rheight }}
data-id={id}
data-type={type}
onClick={(e: any) => dispatch({ type: 'RESIZE_ITEM_UPDATE' })}
>
<img id={`image-${id}`} alt={id.toString()}/>
</ImageContainer>
)
} if (url) {
return (
<a href={url}>
<ImageContainer
ref={drag}
style={{ left, top, width, height }}
data-id={id}
data-type={type}
>
<img id={`image-${id}`} alt={id.toString()}/>
</ImageContainer>
</a>
)
}
return (
<ImageContainer
ref={drag}
style={{ left, top, width, height }}
data-id={id}
data-type={type}
>
<img id={`image-${id}`} alt={id.toString()}/>
</ImageContainer>
)
}
export const Image = connect(
(state: any) => ({
selectedItem: state.selectedItem,
resizingItem: state.resizingItem,
mouseX: state.mouseX,
mouseY: state.mouseY,
})
)(ImageComponent);