PromucFlow_constructor/app/client/src/pages/Editor/WidgetCard.tsx

83 lines
2.2 KiB
TypeScript
Raw Normal View History

import React from "react";
import { useDrag, DragSourceMonitor, DragPreviewImage } from "react-dnd";
import blankImage from "../../assets/images/blank.png";
import { WidgetCardProps } from "../../widgets/BaseWidget";
import styled from "styled-components";
2019-09-26 11:11:28 +00:00
import { WidgetIcons } from "../../icons/WidgetIcons";
2019-08-29 11:22:09 +00:00
type CardProps = {
details: WidgetCardProps;
};
2019-08-26 12:41:21 +00:00
2019-08-29 11:22:09 +00:00
export const Wrapper = styled.div`
2019-08-26 12:41:21 +00:00
padding: 10px 5px 10px 5px;
border-radius: ${props => props.theme.radii[1]}px;
2019-09-05 17:47:50 +00:00
background: ${props => props.theme.colors.paneCard};
border: 1px solid ${props => props.theme.colors.paneCard};
color: ${props => props.theme.colors.textOnDarkBG};
2019-11-13 11:34:11 +00:00
height: 72px;
display: flex;
align-items: center;
justify-content: center;
& > div {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
&:hover {
2019-08-26 12:41:21 +00:00
background: #fff;
cursor: grab;
color: ${props => props.theme.colors.textDefault};
2019-09-26 11:11:28 +00:00
svg {
path {
fill: ${props => props.theme.colors.textDefault};
}
rect {
stroke: ${props => props.theme.colors.textDefault};
}
2019-09-26 11:11:28 +00:00
}
}
& i {
font-family: ${props => props.theme.fonts[2]};
font-size: ${props => props.theme.fontSizes[7]}px;
2019-08-26 12:41:21 +00:00
}
`;
2019-08-29 11:22:09 +00:00
export const IconLabel = styled.h5`
2019-08-26 12:41:21 +00:00
text-align: center;
margin: 0;
text-transform: uppercase;
font-weight: ${props => props.theme.fontWeights[1]};
2019-08-26 12:41:21 +00:00
flex-shrink: 1;
font-size: ${props => props.theme.fontSizes[1]}px;
2019-09-06 11:40:00 +00:00
line-height: ${props => props.theme.lineHeights[1]}px;
2019-08-26 12:41:21 +00:00
`;
2019-08-29 11:22:09 +00:00
/* eslint-disable @typescript-eslint/no-unused-vars */
const WidgetCard = (props: CardProps) => {
const [, drag, preview] = useDrag({
item: props.details,
2019-08-26 12:41:21 +00:00
collect: (monitor: DragSourceMonitor) => ({
isDragging: monitor.isDragging(),
}),
});
2019-09-26 11:11:28 +00:00
const iconType: string = props.details.type;
const Icon = WidgetIcons[iconType]();
2019-08-26 12:41:21 +00:00
return (
<React.Fragment>
2019-08-29 11:22:09 +00:00
<DragPreviewImage connect={preview} src={blankImage} />
<Wrapper ref={drag}>
<div>
2019-09-26 11:11:28 +00:00
{Icon}
2019-09-26 11:37:09 +00:00
<IconLabel>{props.details.widgetCardName}</IconLabel>
</div>
</Wrapper>
2019-08-29 11:22:09 +00:00
</React.Fragment>
);
};
2019-08-26 12:41:21 +00:00
export default WidgetCard;