@hello-pangea/dnd
Version:
Beautiful and accessible drag and drop for lists with React
52 lines (46 loc) • 1.17 kB
text/typescript
import type {
DroppableDimension,
Combine,
DraggableDimension,
DraggableDimensionMap,
DisplacementGroups,
DraggableId,
LiftEffect,
} from '../../../../types';
import didStartAfterCritical from '../../../did-start-after-critical';
interface Args {
isMovingForward: boolean;
destination: DroppableDimension;
displaced: DisplacementGroups;
draggables: DraggableDimensionMap;
combine: Combine;
afterCritical: LiftEffect;
}
export default ({
isMovingForward,
destination,
draggables,
combine,
afterCritical,
}: Args): number | null => {
if (!destination.isCombineEnabled) {
return null;
}
const combineId: DraggableId = combine.draggableId;
const combineWith: DraggableDimension = draggables[combineId];
const combineWithIndex: number = combineWith.descriptor.index;
const didCombineWithStartAfterCritical: boolean = didStartAfterCritical(
combineId,
afterCritical,
);
if (didCombineWithStartAfterCritical) {
if (isMovingForward) {
return combineWithIndex;
}
return combineWithIndex - 1;
}
if (isMovingForward) {
return combineWithIndex + 1;
}
return combineWithIndex;
};