刘光辉
5 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import type { DmsPermissionResource } from '#/api/x/dms/permission';
 
export interface FolderClipboard {
  mode: 'copy' | 'cut';
  source: DmsPermissionResource;
}
 
export interface FolderMenuAvailability {
  canDelete: boolean;
  canMoveDown: boolean;
  canMoveUp: boolean;
  canPaste: boolean;
}
 
export function folderMenuAvailability(
  folder: DmsPermissionResource,
  siblings: DmsPermissionResource[],
  path: DmsPermissionResource[],
  clipboard?: FolderClipboard,
): FolderMenuAvailability {
  const index = siblings.findIndex((item) => item.id === folder.id);
  const source = clipboard?.source;
  const targetContainsSource = !!source && path.some((item) => item.id === source.id);
  const sameParentMove = clipboard?.mode === 'cut' && source?.parentId === folder.id;
 
  return {
    canDelete: !!folder.parentId,
    canMoveDown: index !== -1 && index < siblings.length - 1,
    canMoveUp: index > 0,
    canPaste: !!clipboard && clipboard.source.id !== folder.id && !targetContainsSource && !sameParentMove && !(clipboard.mode === 'cut' && !source?.parentId),
  };
}
 
export function compareFolders(left: DmsPermissionResource, right: DmsPermissionResource) {
  const sortDiff = (left.sortCode ?? Number.MAX_SAFE_INTEGER) - (right.sortCode ?? Number.MAX_SAFE_INTEGER);
  return sortDiff || left.id.localeCompare(right.id);
}