mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-04-30 23:58:11 +02:00
80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import type { TableSortingSettings } from "@/types";
|
|
import type { SortingState } from "@tanstack/react-table";
|
|
import { invoke } from "@tauri-apps/api/core";
|
|
import { useCallback, useEffect, useState } from "react";
|
|
|
|
export function useTableSorting() {
|
|
const [sortingSettings, setSortingSettings] = useState<TableSortingSettings>({
|
|
column: "name",
|
|
direction: "asc",
|
|
});
|
|
const [isLoaded, setIsLoaded] = useState(false);
|
|
|
|
// Load sorting settings on mount
|
|
useEffect(() => {
|
|
const loadSettings = async () => {
|
|
try {
|
|
const settings = await invoke<TableSortingSettings>(
|
|
"get_table_sorting_settings",
|
|
);
|
|
setSortingSettings(settings);
|
|
} catch (error) {
|
|
console.error("Failed to load table sorting settings:", error);
|
|
// Keep default settings if loading fails
|
|
} finally {
|
|
setIsLoaded(true);
|
|
}
|
|
};
|
|
|
|
void loadSettings();
|
|
}, []);
|
|
|
|
// Save sorting settings to disk
|
|
const saveSortingSettings = useCallback(
|
|
async (settings: TableSortingSettings) => {
|
|
try {
|
|
await invoke("save_table_sorting_settings", { sorting: settings });
|
|
setSortingSettings(settings);
|
|
} catch (error) {
|
|
console.error("Failed to save table sorting settings:", error);
|
|
}
|
|
},
|
|
[],
|
|
);
|
|
|
|
// Convert our settings to tanstack table sorting format
|
|
const getTableSorting = useCallback((): SortingState => {
|
|
if (!isLoaded) return [];
|
|
|
|
return [
|
|
{
|
|
id: sortingSettings.column,
|
|
desc: sortingSettings.direction === "desc",
|
|
},
|
|
];
|
|
}, [sortingSettings, isLoaded]);
|
|
|
|
// Update sorting when table state changes
|
|
const updateSorting = useCallback(
|
|
(sorting: SortingState) => {
|
|
if (!isLoaded) return;
|
|
|
|
if (sorting.length > 0) {
|
|
const newSettings: TableSortingSettings = {
|
|
column: sorting[0].id,
|
|
direction: sorting[0].desc ? "desc" : "asc",
|
|
};
|
|
void saveSortingSettings(newSettings);
|
|
}
|
|
},
|
|
[saveSortingSettings, isLoaded],
|
|
);
|
|
|
|
return {
|
|
sortingSettings,
|
|
isLoaded,
|
|
getTableSorting,
|
|
updateSorting,
|
|
};
|
|
}
|