Skip to content

Commit 8fa22ee

Browse files
removed react-sortabled-hoc, used dnd-kit for sorting
1 parent fa16021 commit 8fa22ee

File tree

1 file changed

+52
-25
lines changed

1 file changed

+52
-25
lines changed

client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx

Lines changed: 52 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ import { getDataSourceTypeConfig } from "./generate";
2323
import { DataSourceTypeConfig, TableColumn } from "./generate/dataSourceCommon";
2424
import { CompConfig } from "./generate/comp";
2525
import { uiCompRegistry } from "comps/uiCompRegistry";
26-
import { arrayMove, SortableContainer, SortableElement, SortableHandle } from "react-sortable-hoc";
2726
import { trans } from "i18n";
2827
import log from "loglevel";
2928
import { Datasource } from "@lowcoder-ee/constants/datasourceConstants";
3029
import DataSourceIcon from "components/DataSourceIcon";
3130
import { messageInstance } from "lowcoder-design/src/components/GlobalInstances";
31+
import { DndContext } from "@dnd-kit/core";
32+
import { SortableContext, useSortable } from "@dnd-kit/sortable";
33+
import { CSS } from "@dnd-kit/utilities";
3234

3335
const OpenDialogButton = styled.span`
3436
&:hover {
@@ -421,20 +423,26 @@ const CustomEditText = (props: {
421423
);
422424
};
423425

424-
const DragHandle = SortableHandle(() => <StyledDragIcon />);
425-
426-
const SortableItem = SortableElement<{
427-
item: RowItem,
428-
form: FormInstance,
429-
}>((props: { item: RowItem; form: FormInstance }) => {
426+
const SortableItem = (props: { item: RowItem; form: FormInstance; index: number }) => {
430427
const { item, form } = props;
431428
const { columnName, columnType, compItems } = item;
432429
const disabled = !Form.useWatch(["columns", columnName, "enabled"], form);
430+
const { attributes, listeners, setNodeRef, transform, transition } = useSortable({
431+
id: String(props.index),
432+
});
433+
433434
return (
434-
<DataRow disabled={disabled}>
435+
<DataRow
436+
ref={setNodeRef}
437+
disabled={disabled}
438+
style={{
439+
transform: CSS.Transform.toString(transform),
440+
transition,
441+
}}
442+
>
435443
<CellName>
436444
<LineWrapper>
437-
<DragHandle />
445+
<StyledDragIcon {...attributes} {...listeners} />
438446
<FormItem
439447
name={["columns", columnName, "enabled"]}
440448
valuePropName="checked"
@@ -477,12 +485,9 @@ const SortableItem = SortableElement<{
477485
</CellRequired>
478486
</DataRow>
479487
);
480-
});
488+
};
481489

482-
const SortableBody = SortableContainer<{
483-
items: RowItem[],
484-
form: FormInstance,
485-
}>((props: { items: RowItem[]; form: FormInstance }) => {
490+
const SortableBody = (props: { items: RowItem[]; form: FormInstance }) => {
486491
return (
487492
<DataBody>
488493
{props.items.map((t, index) => {
@@ -498,7 +503,7 @@ const SortableBody = SortableContainer<{
498503
})}
499504
</DataBody>
500505
);
501-
});
506+
};
502507

503508
function getEmptyText(dataSourceNum: number, tableNum: number, columnNum: number): string {
504509
if (dataSourceNum === 0) {
@@ -581,7 +586,27 @@ const CreateFormBody = (props: { onCreate: CreateHandler }) => {
581586
form.setFieldsValue({ columns: initColumns });
582587
setItems(initItems);
583588
}, [dataSourceTypeConfig, tableStructure]);
589+
590+
const handleDragEnd = (e: { active: { id: string }; over: { id: string } | null }) => {
591+
console.log('handleDragEnd', e);
592+
if (!e.over) {
593+
return;
594+
}
595+
const fromIndex = Number(e.active.id);
596+
const toIndex = Number(e.over.id);
597+
if (fromIndex < 0 || toIndex < 0 || fromIndex === toIndex) {
598+
return;
599+
}
600+
601+
const newData = [...items];
602+
const [movedItem] = newData.splice(fromIndex, 1);
603+
newData.splice(toIndex, 0, movedItem);
604+
605+
setItems(newData);
606+
};
607+
584608
const emptyText = getEmptyText(dataSourceItems.length, tableStructures.length, items.length);
609+
585610
return (
586611
<>
587612
<Form form={form} preserve={false}>
@@ -633,16 +658,18 @@ const CreateFormBody = (props: { onCreate: CreateHandler }) => {
633658
<CellComp $head={true}>{trans("formComp.compType")}</CellComp>
634659
<CellRequired $head={true}>{trans("formComp.required")}</CellRequired>
635660
</HeaderRow>
636-
<SortableBody
637-
items={items}
638-
form={form}
639-
useDragHandle
640-
onSortEnd={({ oldIndex, newIndex }) => {
641-
if (oldIndex !== newIndex) {
642-
setItems(arrayMove(items, oldIndex, newIndex));
643-
}
644-
}}
645-
/>
661+
<DndContext
662+
onDragEnd={handleDragEnd}
663+
>
664+
<SortableContext
665+
items={items.map((_, itemIdx) => String(itemIdx))}
666+
>
667+
<SortableBody
668+
items={items}
669+
form={form}
670+
/>
671+
</SortableContext>
672+
</DndContext>
646673
<ModalFooterWrapper>
647674
<TacoButton
648675
buttonType="primary"

0 commit comments

Comments
 (0)