Make positions possibly negatives (#5690)
Closes https://github.com/twentyhq/twenty/issues/5427
This commit is contained in:
@ -9,6 +9,7 @@ import { useRecordBoardStates } from '@/object-record/record-board/hooks/interna
|
||||
import { useRecordBoardSelection } from '@/object-record/record-board/hooks/useRecordBoardSelection';
|
||||
import { RecordBoardColumn } from '@/object-record/record-board/record-board-column/components/RecordBoardColumn';
|
||||
import { RecordBoardScope } from '@/object-record/record-board/scopes/RecordBoardScope';
|
||||
import { getDraggedRecordPosition } from '@/object-record/record-board/utils/get-dragged-record-position.util';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { TableHotkeyScope } from '@/object-record/record-table/types/TableHotkeyScope';
|
||||
import { DragSelect } from '@/ui/utilities/drag-select/components/DragSelect';
|
||||
@ -107,7 +108,6 @@ export const RecordBoard = ({ recordBoardId }: RecordBoardProps) => {
|
||||
.getLoadable(recordStoreFamilyState(recordBeforeId))
|
||||
.getValue()
|
||||
: null;
|
||||
const recordBeforePosition: number | undefined = recordBefore?.position;
|
||||
|
||||
const recordAfterId =
|
||||
otherRecordsInDestinationColumn[destinationIndexInColumn];
|
||||
@ -116,12 +116,11 @@ export const RecordBoard = ({ recordBoardId }: RecordBoardProps) => {
|
||||
.getLoadable(recordStoreFamilyState(recordAfterId))
|
||||
.getValue()
|
||||
: null;
|
||||
const recordAfterPosition: number | undefined = recordAfter?.position;
|
||||
|
||||
const beforeBoundary = recordBeforePosition ?? 0;
|
||||
const afterBoundary = recordAfterPosition ?? beforeBoundary + 1;
|
||||
|
||||
const draggedRecordPosition = (beforeBoundary + afterBoundary) / 2;
|
||||
const draggedRecordPosition = getDraggedRecordPosition(
|
||||
recordBefore?.position,
|
||||
recordAfter?.position,
|
||||
);
|
||||
|
||||
updateOneRecord({
|
||||
idToUpdate: draggedRecordId,
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
import { getDraggedRecordPosition } from '../get-dragged-record-position.util';
|
||||
|
||||
describe('getDraggedRecordPosition', () => {
|
||||
it('when both records defined and positive, should return the average of the two positions', () => {
|
||||
expect(getDraggedRecordPosition(1, 3)).toBe(2);
|
||||
});
|
||||
|
||||
it('when both records defined and negative, should return the average of the two positions', () => {
|
||||
expect(getDraggedRecordPosition(-3, -1)).toBe(-2);
|
||||
});
|
||||
|
||||
it('when both records defined and one negative, should return the average of the two positions', () => {
|
||||
expect(getDraggedRecordPosition(-1, 3)).toBe(1);
|
||||
});
|
||||
|
||||
it('when only record after, should return the position - 1', () => {
|
||||
expect(getDraggedRecordPosition(undefined, 3)).toBe(2);
|
||||
});
|
||||
|
||||
it('when only record before, should return the position + 1', () => {
|
||||
expect(getDraggedRecordPosition(1, undefined)).toBe(2);
|
||||
});
|
||||
|
||||
it('when both records undefined, should return 1', () => {
|
||||
expect(getDraggedRecordPosition(undefined, undefined)).toBe(1);
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,16 @@
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const getDraggedRecordPosition = (
|
||||
recordBeforePosition?: number,
|
||||
recordAfterPosition?: number,
|
||||
): number => {
|
||||
if (isDefined(recordAfterPosition) && isDefined(recordBeforePosition)) {
|
||||
return (recordBeforePosition + recordAfterPosition) / 2;
|
||||
} else if (isDefined(recordAfterPosition)) {
|
||||
return recordAfterPosition - 1;
|
||||
} else if (isDefined(recordBeforePosition)) {
|
||||
return recordBeforePosition + 1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user