mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-24 22:03:54 +00:00

* update: Add type * fix: update import statement for NextApiRequest type * fix: update imports to use type for LexicalEditor and EditorState * Refactor imports to use 'import type' for type-only imports across multiple files - Updated imports in various components and API files to use 'import type' for better clarity and to optimize TypeScript's type checking. - Ensured consistent usage of type imports in files related to chat, dataset, workflow, and user management. - Improved code readability and maintainability by distinguishing between value and type imports. * refactor: remove old ESLint configuration and add new rules - Deleted the old ESLint configuration file from the app project. - Added a new ESLint configuration file with updated rules and settings. - Changed imports to use type-only imports in various files for better clarity and performance. - Updated TypeScript configuration to remove unnecessary options. - Added an ESLint ignore file to exclude build and dependency directories from linting. * fix: update imports to use 'import type' for type-only imports in schema files
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { Box, Tbody } from '@chakra-ui/react';
|
|
import React, { type ReactElement, type ReactNode, useState } from 'react';
|
|
import {
|
|
DragDropContext,
|
|
Droppable,
|
|
type DraggableChildrenFn,
|
|
type DragStart,
|
|
type DropResult,
|
|
type DroppableProvided,
|
|
type DroppableStateSnapshot
|
|
} from 'react-beautiful-dnd';
|
|
export * from 'react-beautiful-dnd';
|
|
|
|
type Props<T = any> = {
|
|
onDragEndCb: (result: T[]) => void;
|
|
renderClone?: DraggableChildrenFn;
|
|
children: ({
|
|
provided,
|
|
snapshot
|
|
}: {
|
|
provided: DroppableProvided;
|
|
snapshot: DroppableStateSnapshot;
|
|
}) => ReactElement<HTMLElement, string>;
|
|
dataList: T[];
|
|
zoom?: number;
|
|
};
|
|
|
|
function DndDrag<T>({ children, renderClone, onDragEndCb, dataList, zoom = 1 }: Props<T>) {
|
|
const [draggingItemHeight, setDraggingItemHeight] = useState(0);
|
|
|
|
const onDragStart = (start: DragStart) => {
|
|
const draggingNode = document.querySelector(`[data-rbd-draggable-id="${start.draggableId}"]`);
|
|
setDraggingItemHeight(draggingNode?.getBoundingClientRect().height || 0);
|
|
};
|
|
|
|
const onDragEnd = (result: DropResult) => {
|
|
if (!result.destination) {
|
|
return;
|
|
}
|
|
setDraggingItemHeight(0);
|
|
|
|
const startIndex = result.source.index;
|
|
const endIndex = result.destination.index;
|
|
|
|
const list = Array.from(dataList);
|
|
const [removed] = list.splice(startIndex, 1);
|
|
list.splice(endIndex, 0, removed);
|
|
|
|
onDragEndCb(list);
|
|
};
|
|
|
|
return (
|
|
<DragDropContext onDragStart={onDragStart} onDragEnd={onDragEnd}>
|
|
<Droppable droppableId="droppable" renderClone={renderClone}>
|
|
{(provided, snapshot) => (
|
|
<>
|
|
{children({ provided, snapshot })}
|
|
{snapshot.isDraggingOver && <Box height={`${draggingItemHeight / zoom}px`} />}
|
|
</>
|
|
)}
|
|
</Droppable>
|
|
</DragDropContext>
|
|
);
|
|
}
|
|
|
|
export default React.memo(DndDrag) as <T>(props: Props<T>) => React.ReactElement;
|