UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

137 lines (136 loc) 4.86 kB
/** * DevExtreme (esm/renovation/ui/droppable.js) * Version: 22.1.9 * Build date: Tue Apr 18 2023 * * Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; import _extends from "@babel/runtime/helpers/esm/extends"; var _excluded = ["children", "className", "disabled", "onDragEnter", "onDragLeave", "onDrop"]; import { createVNode, normalizeProps } from "inferno"; import { InfernoEffect, InfernoComponent } from "@devextreme/runtime/inferno"; import { enter, leave, drop } from "../../events/drag"; import eventsEngine from "../../events/core/events_engine"; import { combineClasses } from "../utils/combine_classes"; export var viewFunction = _ref => { var { cssClasses: cssClasses, props: { children: children }, restAttributes: restAttributes, widgetRef: widgetRef } = _ref; return normalizeProps(createVNode(1, "div", cssClasses, children, 0, _extends({}, restAttributes), null, widgetRef)) }; export var DroppableProps = { disabled: false, className: "" }; import { createRef as infernoCreateRef } from "inferno"; export class Droppable extends InfernoComponent { constructor(props) { super(props); this.state = {}; this.widgetRef = infernoCreateRef(); this.dropEventsEffect = this.dropEventsEffect.bind(this); this.dragEnterHandler = this.dragEnterHandler.bind(this); this.dragLeaveHandler = this.dragLeaveHandler.bind(this); this.dropHandler = this.dropHandler.bind(this); this.getEventArgs = this.getEventArgs.bind(this) } createEffects() { return [new InfernoEffect(this.dropEventsEffect, [this.props.disabled, this.props.onDragEnter, this.props.onDragLeave, this.props.onDrop])] } updateEffects() { var _this$_effects$; null === (_this$_effects$ = this._effects[0]) || void 0 === _this$_effects$ ? void 0 : _this$_effects$.update([this.props.disabled, this.props.onDragEnter, this.props.onDragLeave, this.props.onDrop]) } dropEventsEffect() { if (this.props.disabled) { return } eventsEngine.on(this.widgetRef.current, enter, this.dragEnterHandler); eventsEngine.on(this.widgetRef.current, leave, this.dragLeaveHandler); eventsEngine.on(this.widgetRef.current, drop, this.dropHandler); return () => { eventsEngine.off(this.widgetRef.current, enter, this.dragEnterHandler); eventsEngine.off(this.widgetRef.current, leave, this.dragLeaveHandler); eventsEngine.off(this.widgetRef.current, drop, this.dropHandler) } } get cssClasses() { var { className: className, disabled: disabled } = this.props; var classesMap = { [className]: !!className, "dx-droppable": true, "dx-state-disabled": !!disabled }; return combineClasses(classesMap) } dragEnterHandler(event) { var dragEnterArgs = this.getEventArgs(event); var { onDragEnter: onDragEnter } = this.props; null === onDragEnter || void 0 === onDragEnter ? void 0 : onDragEnter(dragEnterArgs) } dragLeaveHandler(event) { var dragLeaveArgs = this.getEventArgs(event); var { onDragLeave: onDragLeave } = this.props; null === onDragLeave || void 0 === onDragLeave ? void 0 : onDragLeave(dragLeaveArgs) } dropHandler(event) { var dropArgs = this.getEventArgs(event); var { onDrop: onDrop } = this.props; null === onDrop || void 0 === onDrop ? void 0 : onDrop(dropArgs) } getEventArgs(e) { return { event: e, itemElement: this.widgetRef.current } } get restAttributes() { var _this$props = this.props, restProps = _objectWithoutPropertiesLoose(_this$props, _excluded); return restProps } render() { var props = this.props; return viewFunction({ props: _extends({}, props), widgetRef: this.widgetRef, cssClasses: this.cssClasses, dragEnterHandler: this.dragEnterHandler, dragLeaveHandler: this.dragLeaveHandler, dropHandler: this.dropHandler, getEventArgs: this.getEventArgs, restAttributes: this.restAttributes }) } } Droppable.defaultProps = DroppableProps;