react-beautiful-dnd#DraggableLocation TypeScript Examples
The following examples show how to use
react-beautiful-dnd#DraggableLocation.
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: util.ts From S2 with MIT License | 7 votes |
moveItem = (
source: SwitcherItem[] = [],
destination: SwitcherItem[] = [],
droppableSource: DraggableLocation,
droppableDestination: DraggableLocation,
): SwitcherState => {
// change order in same column
if (droppableDestination.droppableId === droppableSource.droppableId) {
const updatingDestination = [...destination];
const [removed] = updatingDestination.splice(droppableSource.index, 1);
updatingDestination.splice(droppableDestination.index, 0, removed);
return {
[droppableDestination.droppableId]: updatingDestination,
};
}
// move to other column
const updatingSource = [...source];
const updatingDestination = [...destination];
const [removed] = updatingSource.splice(droppableSource.index, 1);
updatingDestination.splice(droppableDestination.index, 0, removed);
return {
[droppableSource.droppableId]: updatingSource,
[droppableDestination.droppableId]: updatingDestination,
};
}
Example #2
Source File: draggables.ts From taskcafe with MIT License | 6 votes |
getAfterDropDraggableList = (
beforeDropDraggables: Array<DraggableElement>,
droppedDraggable: DraggableElement,
isList: boolean,
isSameList: boolean,
destination: DraggableLocation,
) => {
if (isList) {
return moveItemWithinArray(beforeDropDraggables, droppedDraggable, destination.index);
}
return isSameList
? moveItemWithinArray(beforeDropDraggables, droppedDraggable, destination.index)
: insertItemIntoArray(beforeDropDraggables, droppedDraggable, destination.index);
}
Example #3
Source File: draggables.ts From taskcafe with MIT License | 5 votes |
isPositionChanged = (source: DraggableLocation, destination: DraggableLocation) => {
if (!destination) return false;
const isSameList = destination.droppableId === source.droppableId;
const isSamePosition = destination.index === source.index;
return !isSameList || !isSamePosition;
}
Example #4
Source File: groups.ts From TabMerger with GNU General Public License v3.0 | 5 votes |
updateGroupOrder = (payload: { source: DraggableLocation; destination?: DraggableLocation }) => ({
type: GROUPS_ACTIONS.UPDATE_GROUP_ORDER,
payload
})
Example #5
Source File: Board.tsx From knboard with MIT License | 4 votes |
Board = () => {
const detail = useSelector((state: RootState) => state.board.detail);
const error = useSelector((state: RootState) => state.board.detailError);
const columns = useSelector(columnSelectors.selectAll);
const tasksByColumn = useSelector((state: RootState) => state.task.byColumn);
const tasksById = useSelector((state: RootState) => state.task.byId);
const dispatch = useDispatch();
const { id } = useParams();
React.useEffect(() => {
if (id) {
dispatch(fetchBoardById({ boardId: id }));
}
}, [id]);
const onDragEnd = (result: DropResult) => {
// dropped nowhere
if (!result.destination) {
return;
}
const source: DraggableLocation = result.source;
const destination: DraggableLocation = result.destination;
// did not move anywhere - can bail early
if (
source.droppableId === destination.droppableId &&
source.index === destination.index
) {
return;
}
// reordering column
if (result.type === "COLUMN") {
const newOrdered: IColumn[] = reorder(
columns,
source.index,
destination.index
);
dispatch(updateColumns(newOrdered));
return;
}
const data = reorderTasks({
tasksByColumn,
source,
destination,
});
dispatch(updateTasksByColumn(data.tasksByColumn));
};
const detailDataExists = detail?.id.toString() === id;
if (error) {
return <PageError>{error}</PageError>;
}
if (!detailDataExists) {
return <Spinner loading={!detailDataExists} />;
}
return (
<>
<SEO title={detail?.name} />
{columns.length !== 0 ? (
<BoardContainer data-testid="board-container">
<ColumnsBlock>
<DragDropContext onDragEnd={onDragEnd}>
<Droppable
droppableId="board"
type="COLUMN"
direction="horizontal"
>
{(provided: DroppableProvided) => (
<ColumnContainer
ref={provided.innerRef}
{...provided.droppableProps}
>
{columns.map((column: IColumn, index: number) => (
<Column
key={column.id}
id={column.id}
title={column.title}
index={index}
tasks={tasksByColumn[column.id].map(
(taskId) => tasksById[taskId]
)}
/>
))}
{provided.placeholder}
</ColumnContainer>
)}
</Droppable>
</DragDropContext>
</ColumnsBlock>
<RightMargin />
</BoardContainer>
) : (
<EmptyBoard>This board is empty.</EmptyBoard>
)}
</>
);
}