react-dnd-html5-backend#getEmptyImage JavaScript Examples
The following examples show how to use
react-dnd-html5-backend#getEmptyImage.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DraggableSource.js From wix-style-react with MIT License | 6 votes |
componentDidMount() {
if (this.props.connectDragPreview) {
this.props.connectDragPreview(getEmptyImage(), {
captureDraggingState: true,
});
}
this.updateDiff();
this.updateItemWidth();
}
Example #2
Source File: Item.js From wix-style-react with MIT License | 6 votes |
componentDidMount() {
// use empty image as a drag preview so browsers don't draw it
// and we can draw whatever we want on the custom drag layer instead.
this.props.connectDragPreview(getEmptyImage(), {
// IE fallback: specify that we'd rather screenshot the node
// when it already knows it's being dragged so we can hide it with CSS.
captureDraggingState: true,
});
}
Example #3
Source File: index.js From strapi-molecules with MIT License | 4 votes |
DraggedItem = ({
componentFieldName,
componentUid,
doesPreviousFieldContainErrorsAndIsOpen,
fields,
hasErrors,
hasMinError,
isFirst,
isReadOnly,
isOpen,
moveCollapse,
onClickToggle,
removeCollapse,
schema,
toggleCollapses,
dataForCurrentVersion,
isVersionCurrent,
// Retrieved from the select function
moveComponentField,
removeRepeatableField,
triggerFormValidation,
checkFormErrors,
displayedValue,
}) => {
const { setIsDraggingComponent, unsetIsDraggingComponent } = useEditView();
const dragRef = useRef(null);
const dropRef = useRef(null);
const [showForm, setShowForm] = useState(false);
useEffect(() => {
if (isOpen || !isVersionCurrent) {
setShowForm(true);
}
}, [isOpen]);
useEffect(() => {
if (!isVersionCurrent) {
setShowForm(true);
}
}, [isVersionCurrent]);
const [, drop] = useDrop({
accept: ItemTypes.COMPONENT,
canDrop() {
return false;
},
hover(item, monitor) {
if (!dropRef.current) {
return;
}
const dragPath = item.originalPath;
const hoverPath = componentFieldName;
const fullPathToComponentArray = dragPath.split(".");
const dragIndexString = fullPathToComponentArray
.slice()
.splice(-1)
.join("");
const hoverIndexString = hoverPath.split(".").splice(-1).join("");
const pathToComponentArray = fullPathToComponentArray.slice(
0,
fullPathToComponentArray.length - 1,
);
const dragIndex = parseInt(dragIndexString, 10);
const hoverIndex = parseInt(hoverIndexString, 10);
// Don't replace items with themselves
if (dragIndex === hoverIndex) {
return;
}
// Determine rectangle on screen
const hoverBoundingRect = dropRef.current.getBoundingClientRect();
// Get vertical middle
const hoverMiddleY =
(hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
// Determine mouse position
const clientOffset = monitor.getClientOffset();
// Get pixels to the top
const hoverClientY = clientOffset.y - hoverBoundingRect.top;
// Only perform the move when the mouse has crossed half of the items height
// When dragging downwards, only move when the cursor is below 50%
// When dragging upwards, only move when the cursor is above 50%
// Dragging downwards
if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {
return;
}
// Dragging upwards
if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {
return;
}
// Time to actually perform the action in the data
moveComponentField(pathToComponentArray, dragIndex, hoverIndex);
// Time to actually perform the action in the synchronized collapses
moveCollapse(dragIndex, hoverIndex);
// Note: we're mutating the monitor item here!
// Generally it's better to avoid mutations,
// but it's good here for the sake of performance
// to avoid expensive index searches.
item.originalPath = hoverPath;
},
});
const [{ isDragging }, drag, preview] = useDrag({
item: {
type: ItemTypes.COMPONENT,
displayedValue,
originalPath: componentFieldName,
},
begin: () => {
// Close all collapses
toggleCollapses(-1);
// Prevent the relations select from firing requests
setIsDraggingComponent();
},
end: () => {
// Enable the relations select to fire requests
unsetIsDraggingComponent();
// Update the errors
triggerFormValidation();
},
collect: (monitor) => ({
isDragging: monitor.isDragging(),
}),
});
useEffect(() => {
preview(getEmptyImage(), { captureDraggingState: false });
}, [preview]);
const getField = (fieldName) =>
get(schema, ["schema", "attributes", fieldName], {});
const getMeta = (fieldName) =>
get(schema, ["metadatas", fieldName, "edit"], {});
// Create the refs
// We need 1 for the drop target
// 1 for the drag target
const refs = {
dragRef: drag(dragRef),
dropRef: drop(dropRef),
};
return (
<>
<Banner
componentFieldName={componentFieldName}
hasErrors={hasErrors}
hasMinError={hasMinError}
isFirst={isFirst}
displayedValue={displayedValue}
doesPreviousFieldContainErrorsAndIsOpen={
doesPreviousFieldContainErrorsAndIsOpen
}
isDragging={isDragging}
isOpen={isVersionCurrent ? isOpen : true}
isReadOnly={isReadOnly}
onClickToggle={onClickToggle}
onClickRemove={() => {
removeRepeatableField(componentFieldName);
removeCollapse();
}}
ref={refs}
/>
<Collapse
isOpen={isVersionCurrent ? isOpen : true}
style={{ backgroundColor: "#FAFAFB" }}
onExited={() => setShowForm(false)}
>
{!isDragging && (
<FormWrapper
hasErrors={hasErrors}
isOpen={isVersionCurrent ? isOpen : true}
isReadOnly={isReadOnly}
>
{showForm &&
fields.map((fieldRow, key) => {
return (
<div className="row" key={key}>
{fieldRow.map((field) => {
const currentField = getField(field.name);
const isComponent =
get(currentField, "type", "") === "component";
const keys = `${componentFieldName}.${field.name}`;
if (isComponent) {
const componentUid = currentField.component;
const metas = getMeta(field.name);
return (
<FieldComponent
componentUid={componentUid}
isRepeatable={currentField.repeatable}
key={field.name}
label={metas.label}
isNested
name={keys}
max={currentField.max}
min={currentField.min}
/>
);
}
return (
<div key={field.name} className={`col-${field.size}`}>
<Inputs
autoFocus={false}
componentUid={componentUid}
keys={keys}
layout={schema}
name={field.name}
onBlur={hasErrors ? checkFormErrors : null}
dataForCurrentVersion={dataForCurrentVersion}
isVersionCurrent={isVersionCurrent}
/>
</div>
);
})}
</div>
);
})}
</FormWrapper>
)}
</Collapse>
</>
);
}