diff --git a/apps/client/src/widgets/view_widgets/table_view/dragging.ts b/apps/client/src/widgets/view_widgets/table_view/dragging.ts new file mode 100644 index 000000000..598e5a34a --- /dev/null +++ b/apps/client/src/widgets/view_widgets/table_view/dragging.ts @@ -0,0 +1,24 @@ +import type { Tabulator } from "tabulator-tables"; +import type FNote from "../../../entities/fnote.js"; +import branches from "../../../services/branches.js"; + +export function canReorderRows(parentNote: FNote) { + return !parentNote.hasLabel("sorted"); +} + +export function configureReorderingRows(tabulator: Tabulator) { + tabulator.on("rowMoved", (row) => { + const branchIdsToMove = [ row.getData().branchId ]; + + const prevRow = row.getPrevRow(); + if (prevRow) { + branches.moveAfterBranch(branchIdsToMove, prevRow.getData().branchId); + return; + } + + const nextRow = row.getNextRow(); + if (nextRow) { + branches.moveBeforeBranch(branchIdsToMove, nextRow.getData().branchId); + } + }); +} diff --git a/apps/client/src/widgets/view_widgets/table_view/index.ts b/apps/client/src/widgets/view_widgets/table_view/index.ts index a16cbb9c5..a3b6d531b 100644 --- a/apps/client/src/widgets/view_widgets/table_view/index.ts +++ b/apps/client/src/widgets/view_widgets/table_view/index.ts @@ -8,9 +8,10 @@ import branches from "../../../services/branches.js"; import type { CommandListenerData, EventData } from "../../../components/app_context.js"; import type { Attribute } from "../../../services/attribute_parser.js"; import note_create from "../../../services/note_create.js"; -import {Tabulator, SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MenuModule} from 'tabulator-tables'; +import {Tabulator, SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MenuModule, MoveRowsModule} from 'tabulator-tables'; import "tabulator-tables/dist/css/tabulator_bootstrap5.min.css"; import { applyHeaderMenu } from "./header-menu.js"; +import { canReorderRows, configureReorderingRows } from "./dragging.js"; const TPL = /*html*/`