feat: services table with dnd
This commit is contained in:
38
src/utils/lexorank/generation.ts
Normal file
38
src/utils/lexorank/generation.ts
Normal file
@ -0,0 +1,38 @@
|
||||
import { LexoRank } from "lexorank";
|
||||
|
||||
export function getNewLexorank(
|
||||
left?: LexoRank | null,
|
||||
right?: LexoRank | null
|
||||
): LexoRank {
|
||||
if (right) {
|
||||
if (left) return left?.between(right);
|
||||
return right.between(LexoRank.min());
|
||||
}
|
||||
if (left) {
|
||||
return left.between(LexoRank.max());
|
||||
}
|
||||
return LexoRank.middle();
|
||||
}
|
||||
|
||||
export const getNewDndLexorank = <T>(
|
||||
sourceIdx: number,
|
||||
targetIdx: number,
|
||||
items: T[],
|
||||
key: keyof T
|
||||
): string => {
|
||||
let leftIndex = targetIdx;
|
||||
let rightIndex = targetIdx + 1;
|
||||
if (targetIdx < sourceIdx) {
|
||||
leftIndex = targetIdx - 1;
|
||||
rightIndex = targetIdx;
|
||||
}
|
||||
|
||||
const leftLexorank: LexoRank | null =
|
||||
leftIndex >= 0 ? LexoRank.parse(items[leftIndex][key] as string) : null;
|
||||
const rightLexorank: LexoRank | null =
|
||||
rightIndex < items.length
|
||||
? LexoRank.parse(items[rightIndex][key] as string)
|
||||
: null;
|
||||
|
||||
return getNewLexorank(leftLexorank, rightLexorank).toString();
|
||||
};
|
||||
Reference in New Issue
Block a user