* dip * dip * scroll * fixes * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * dip * solve for canvas glitches * dip * dip * dip * adjust scroll speed * dip * dip(code clean up) * dip * dip * ---dip * dip * dip * dip * middle ware for dropping multiple widgets. * adding scroll to drag for canvas selection. * fixing drag disabled and modal widget(detach from layout) drops * firefox and safari fixes * rebase conflicts. * fixing broken specs. * fixing specs and adding jest tests. * show border and disable resize when multiple widgets are selected. * selection box grab cursor * merge conflicts. * code clean up * fixing specs. * fixed a bug and failed specs. * fixing rerenders. * code clean up * code review comments * always have the drag point inside the widget. * fetching snap spaces instead of calculating. * remove widget_move action * fixing bugs with add widget parent height updation. * fixing specs. * List widget conflict fixes. * fixing canvas drop persistence. * Adding click to drag for modals and fixing few issues.
54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
import { PositionedContainerProps } from "components/designSystems/appsmith/PositionedContainer";
|
|
import { Layers } from "constants/Layers";
|
|
import { DroppableWidgets } from "constants/WidgetConstants";
|
|
import { useMemo } from "react";
|
|
import { AppState } from "reducers";
|
|
import { getSelectedWidgets } from "selectors/ui";
|
|
import { useSelector } from "store";
|
|
|
|
export const usePositionedContainerZIndex = (
|
|
props: PositionedContainerProps,
|
|
) => {
|
|
const droppableWidget = DroppableWidgets.includes(props.widgetType);
|
|
const isDragging = useSelector(
|
|
(state: AppState) => state.ui.widgetDragResize.isDragging,
|
|
);
|
|
const selectedWidgets = useSelector(getSelectedWidgets);
|
|
const isThisWidgetDragging =
|
|
isDragging && selectedWidgets.includes(props.widgetId);
|
|
|
|
const zIndex = useMemo(() => {
|
|
if (isDragging) {
|
|
// dragging mode use cases
|
|
if (!isThisWidgetDragging && droppableWidget) {
|
|
return Layers.positionedWidget + 1;
|
|
} else {
|
|
// all non container widgets should go last into the background to not interfere with mouse move
|
|
// since it is not technically dragged but just drawn on canvas as the mouse moves.
|
|
return -1;
|
|
}
|
|
} else {
|
|
// common use case when nothing is dragged
|
|
|
|
return props.focused
|
|
? Layers.focusedWidget
|
|
: props.selected
|
|
? Layers.selectedWidget
|
|
: Layers.positionedWidget;
|
|
}
|
|
}, [
|
|
isDragging,
|
|
isThisWidgetDragging,
|
|
droppableWidget,
|
|
props.selected,
|
|
props.focused,
|
|
]);
|
|
|
|
const zIndicesObj = useMemo(() => {
|
|
const onHoverZIndex = isDragging ? zIndex : Layers.positionedWidget + 1;
|
|
return { zIndex, onHoverZIndex };
|
|
}, [isDragging, zIndex]);
|
|
|
|
return zIndicesObj;
|
|
};
|