From b76ec8f12003cd7b0690690b17cd2dc4b3338a1e Mon Sep 17 00:00:00 2001 From: Crauzer <0xcrauzer@proton.me> Date: Tue, 16 Jun 2026 21:11:21 +0200 Subject: [PATCH] refactor(library): dedrill reorderDisabled --- src/modules/library/api/useLibraryContent.ts | 3 --- src/modules/library/api/useRootModDnd.ts | 5 +++-- src/modules/library/api/useSortableModDnd.ts | 10 +++------- src/modules/library/api/useUnifiedDnd.ts | 13 ++++--------- src/modules/library/components/LibraryContent.tsx | 3 --- .../library/components/SortableFolderCard.tsx | 5 ++++- .../library/components/SortableFolderRow.tsx | 7 +++++-- src/modules/library/components/SortableModCard.tsx | 4 ++-- src/modules/library/components/SortableModList.tsx | 5 +---- src/modules/library/components/UnifiedDndGrid.tsx | 12 +++--------- src/stores/libraryFilter.ts | 5 +++++ 11 files changed, 30 insertions(+), 42 deletions(-) diff --git a/src/modules/library/api/useLibraryContent.ts b/src/modules/library/api/useLibraryContent.ts index ef5adc01..444a2a9f 100644 --- a/src/modules/library/api/useLibraryContent.ts +++ b/src/modules/library/api/useLibraryContent.ts @@ -60,9 +60,7 @@ export function useLibraryContent({ const selectMode = useLibrarySelectionStore((s) => s.selectMode); const isSearching = searchQuery.length > 0; - const isPrioritySort = sort.field === "priority"; const dndDisabled = isSearching || isPatcherActive || hasActiveFilters || selectMode; - const reorderDisabled = !isPrioritySort; const isFlatMode = isSearching || hasActiveFilters; const folderMap = useMemo(() => { @@ -140,7 +138,6 @@ export function useLibraryContent({ return { viewMode, dndDisabled, - reorderDisabled, selectMode, contentView, detailsMod, diff --git a/src/modules/library/api/useRootModDnd.ts b/src/modules/library/api/useRootModDnd.ts index b268d886..7c6eb95a 100644 --- a/src/modules/library/api/useRootModDnd.ts +++ b/src/modules/library/api/useRootModDnd.ts @@ -4,16 +4,17 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import type { InstalledMod } from "@/lib/tauri"; import { hasOrderChanged, resolveFolderId } from "@/modules/library/utils"; +import { useReorderDisabled } from "@/stores"; import { useMoveModToFolder } from "./useMoveMod"; interface UseRootModDndArgs { rootMods: InstalledMod[]; onReorder: (modIds: string[]) => void; - reorderDisabled: boolean; } -export function useRootModDnd({ rootMods, onReorder, reorderDisabled }: UseRootModDndArgs) { +export function useRootModDnd({ rootMods, onReorder }: UseRootModDndArgs) { + const reorderDisabled = useReorderDisabled(); const moveModToFolder = useMoveModToFolder(); const rootModIds = useMemo(() => rootMods.map((m) => m.id), [rootMods]); diff --git a/src/modules/library/api/useSortableModDnd.ts b/src/modules/library/api/useSortableModDnd.ts index 6ed172a1..49b09ec9 100644 --- a/src/modules/library/api/useSortableModDnd.ts +++ b/src/modules/library/api/useSortableModDnd.ts @@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import type { InstalledMod } from "@/lib/tauri"; import { REMOVE_FROM_FOLDER_ID } from "@/modules/library/utils"; +import { useReorderDisabled } from "@/stores"; import { useMoveModToFolder } from "./useMoveMod"; @@ -13,15 +14,10 @@ interface UseSortableModDndArgs { mods: InstalledMod[]; onReorder: (modIds: string[]) => void; folderId?: string; - reorderDisabled?: boolean; } -export function useSortableModDnd({ - mods, - onReorder, - folderId, - reorderDisabled, -}: UseSortableModDndArgs) { +export function useSortableModDnd({ mods, onReorder, folderId }: UseSortableModDndArgs) { + const reorderDisabled = useReorderDisabled(); const moveModToFolder = useMoveModToFolder(); const propsOrder = useMemo(() => mods.map((m) => m.id), [mods]); diff --git a/src/modules/library/api/useUnifiedDnd.ts b/src/modules/library/api/useUnifiedDnd.ts index 61f1d379..e1bab0b6 100644 --- a/src/modules/library/api/useUnifiedDnd.ts +++ b/src/modules/library/api/useUnifiedDnd.ts @@ -14,6 +14,7 @@ import { REMOVE_FROM_FOLDER_ID, resolveFolderId, } from "@/modules/library/utils"; +import { useReorderDisabled } from "@/stores"; import { useFolderDnd } from "./useFolderDnd"; import { useMoveModToFolder, useReorderFolderMods } from "./useMoveMod"; @@ -24,16 +25,10 @@ interface UseUnifiedDndArgs { rootMods: InstalledMod[]; modsByFolder: Map; onReorder: (modIds: string[]) => void; - reorderDisabled: boolean; } -export function useUnifiedDnd({ - folders, - rootMods, - modsByFolder, - onReorder, - reorderDisabled, -}: UseUnifiedDndArgs) { +export function useUnifiedDnd({ folders, rootMods, modsByFolder, onReorder }: UseUnifiedDndArgs) { + const reorderDisabled = useReorderDisabled(); const { localOrder: modLocalOrder, orderedRootMods, @@ -42,7 +37,7 @@ export function useUnifiedDnd({ handleDragOver: handleModDragOver, handleDragEnd: handleModDragEnd, handleDragCancel: handleModDragCancel, - } = useRootModDnd({ rootMods, onReorder, reorderDisabled }); + } = useRootModDnd({ rootMods, onReorder }); const { folderLocalOrder, diff --git a/src/modules/library/components/LibraryContent.tsx b/src/modules/library/components/LibraryContent.tsx index 3a41ccc9..8588bb18 100644 --- a/src/modules/library/components/LibraryContent.tsx +++ b/src/modules/library/components/LibraryContent.tsx @@ -27,7 +27,6 @@ export function LibraryContent({ const { viewMode, dndDisabled, - reorderDisabled, selectMode, contentView, detailsMod, @@ -118,7 +117,6 @@ export function LibraryContent({ reorderFolderMods.mutate({ folderId: contentView.folder.id, modIds }) } disabled={dndDisabled} - reorderDisabled={reorderDisabled} onViewDetails={setDetailsMod} onEditMetadata={setEditMod} className={`${gridClass(viewMode)} stagger-enter mt-4`} @@ -152,7 +150,6 @@ export function LibraryContent({ modsByFolder={contentView.modsByFolder} viewMode={viewMode} dndDisabled={dndDisabled} - reorderDisabled={reorderDisabled} onReorder={(modIds) => reorderMods.mutate(modIds)} onViewDetails={setDetailsMod} onEditMetadata={setEditMod} diff --git a/src/modules/library/components/SortableFolderCard.tsx b/src/modules/library/components/SortableFolderCard.tsx index e76ef952..52fc3d22 100644 --- a/src/modules/library/components/SortableFolderCard.tsx +++ b/src/modules/library/components/SortableFolderCard.tsx @@ -3,6 +3,7 @@ import { CSS } from "@dnd-kit/utilities"; import type { CSSProperties } from "react"; import type { InstalledMod, LibraryFolder } from "@/lib/tauri"; +import { useReorderDisabled } from "@/stores"; import { FolderCard } from "./FolderCard"; @@ -19,8 +20,10 @@ export function SortableFolderCard({ mods, sortDisabled, }: SortableFolderCardProps) { + const reorderDisabled = useReorderDisabled(); + const disabled = sortDisabled || reorderDisabled; const { attributes, listeners, setNodeRef, transform, transition, isDragging, isOver } = - useSortable({ id: sortableId, disabled: sortDisabled ? { draggable: true } : false }); + useSortable({ id: sortableId, disabled: disabled ? { draggable: true } : false }); const style: CSSProperties = { transform: CSS.Translate.toString(transform), diff --git a/src/modules/library/components/SortableFolderRow.tsx b/src/modules/library/components/SortableFolderRow.tsx index 928624ce..6b6634bc 100644 --- a/src/modules/library/components/SortableFolderRow.tsx +++ b/src/modules/library/components/SortableFolderRow.tsx @@ -4,6 +4,7 @@ import { GripVertical } from "lucide-react"; import type { CSSProperties } from "react"; import type { InstalledMod, LibraryFolder } from "@/lib/tauri"; +import { useReorderDisabled } from "@/stores"; import { FolderRow } from "./FolderRow"; @@ -24,8 +25,10 @@ export function SortableFolderRow({ onViewDetails, onEditMetadata, }: SortableFolderRowProps) { + const reorderDisabled = useReorderDisabled(); + const disabled = sortDisabled || reorderDisabled; const { attributes, listeners, setNodeRef, transform, transition, isDragging, isOver } = - useSortable({ id: sortableId, disabled: sortDisabled ? { draggable: true } : false }); + useSortable({ id: sortableId, disabled: disabled ? { draggable: true } : false }); const style: CSSProperties = { transform: CSS.Translate.toString(transform), @@ -45,7 +48,7 @@ export function SortableFolderRow({
)}
- {!sortDisabled && ( + {!disabled && (
void; onEditMetadata?: (mod: InstalledMod) => void; } @@ -18,10 +18,10 @@ interface SortableModCardProps { export function SortableModCard({ mod, viewMode, - reorderDisabled, onViewDetails, onEditMetadata, }: SortableModCardProps) { + const reorderDisabled = useReorderDisabled(); const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: mod.id, disabled: reorderDisabled ? { droppable: true } : false, diff --git a/src/modules/library/components/SortableModList.tsx b/src/modules/library/components/SortableModList.tsx index 8c7e4ff1..5bf240df 100644 --- a/src/modules/library/components/SortableModList.tsx +++ b/src/modules/library/components/SortableModList.tsx @@ -41,7 +41,6 @@ interface SortableModListProps { viewMode: "grid" | "list"; onReorder: (modIds: string[]) => void; disabled?: boolean; - reorderDisabled?: boolean; onViewDetails?: (mod: InstalledMod) => void; onEditMetadata?: (mod: InstalledMod) => void; className?: string; @@ -53,7 +52,6 @@ export function SortableModList({ viewMode, onReorder, disabled, - reorderDisabled, onViewDetails, onEditMetadata, className, @@ -68,7 +66,7 @@ export function SortableModList({ handleDragOver, handleDragEnd, handleDragCancel, - } = useSortableModDnd({ mods, onReorder, folderId, reorderDisabled }); + } = useSortableModDnd({ mods, onReorder, folderId }); const sensors = useSensors( useSensor(PointerSensor, { activationConstraint: { distance: 8 } }), @@ -111,7 +109,6 @@ export function SortableModList({ key={mod.id} mod={mod} viewMode={viewMode} - reorderDisabled={reorderDisabled} onViewDetails={onViewDetails} onEditMetadata={onEditMetadata} /> diff --git a/src/modules/library/components/UnifiedDndGrid.tsx b/src/modules/library/components/UnifiedDndGrid.tsx index 5f5d0f1d..34553e30 100644 --- a/src/modules/library/components/UnifiedDndGrid.tsx +++ b/src/modules/library/components/UnifiedDndGrid.tsx @@ -28,7 +28,6 @@ interface UnifiedDndGridProps { modsByFolder: Map; viewMode: "grid" | "list"; dndDisabled: boolean; - reorderDisabled: boolean; onReorder: (modIds: string[]) => void; onViewDetails?: (mod: InstalledMod) => void; onEditMetadata?: (mod: InstalledMod) => void; @@ -40,7 +39,6 @@ export function UnifiedDndGrid({ modsByFolder, viewMode, dndDisabled, - reorderDisabled, onReorder, onViewDetails, onEditMetadata, @@ -69,7 +67,6 @@ export function UnifiedDndGrid({ rootMods={rootMods} modsByFolder={modsByFolder} viewMode={viewMode} - reorderDisabled={reorderDisabled} onReorder={onReorder} onViewDetails={onViewDetails} onEditMetadata={onEditMetadata} @@ -132,7 +129,6 @@ interface DndGridProps { rootMods: InstalledMod[]; modsByFolder: Map; viewMode: "grid" | "list"; - reorderDisabled: boolean; onReorder: (modIds: string[]) => void; onViewDetails?: (mod: InstalledMod) => void; onEditMetadata?: (mod: InstalledMod) => void; @@ -143,7 +139,6 @@ function DndGrid({ rootMods, modsByFolder, viewMode, - reorderDisabled, onReorder, onViewDetails, onEditMetadata, @@ -161,7 +156,7 @@ function DndGrid({ handleDragOver, handleDragEnd, handleDragCancel, - } = useUnifiedDnd({ folders, rootMods, modsByFolder, onReorder, reorderDisabled }); + } = useUnifiedDnd({ folders, rootMods, modsByFolder, onReorder }); const sensors = useSensors( useSensor(PointerSensor, { activationConstraint: { distance: 8 } }), @@ -196,7 +191,7 @@ function DndGrid({ sortableId={sortableId} folder={folder} mods={folderMods} - sortDisabled={reorderDisabled || isDraggingMod || isDraggingFolderMod} + sortDisabled={isDraggingMod || isDraggingFolderMod} onViewDetails={onViewDetails} onEditMetadata={onEditMetadata} /> @@ -208,7 +203,7 @@ function DndGrid({ sortableId={sortableId} folder={folder} mods={folderMods} - sortDisabled={reorderDisabled || isDraggingMod || isDraggingFolderMod} + sortDisabled={isDraggingMod || isDraggingFolderMod} /> ); })} @@ -218,7 +213,6 @@ function DndGrid({ key={mod.id} mod={mod} viewMode={viewMode} - reorderDisabled={reorderDisabled} onViewDetails={onViewDetails} onEditMetadata={onEditMetadata} /> diff --git a/src/stores/libraryFilter.ts b/src/stores/libraryFilter.ts index fabd8bae..8d82aa0d 100644 --- a/src/stores/libraryFilter.ts +++ b/src/stores/libraryFilter.ts @@ -82,3 +82,8 @@ export function useHasActiveFilters() { s.showOnlyEnabled, ); } + +/** Reordering only applies in priority sort; any other sort imposes its own order. */ +export function useReorderDisabled() { + return useLibraryFilterStore((s) => s.sort.field !== "priority"); +}