Files
BanGUI/frontend/src/hooks/useJailFileConfig.ts
2026-03-22 10:07:44 +01:00

44 lines
1.2 KiB
TypeScript

/**
* React hook for loading and updating a single parsed jail.d config file.
*/
import { useConfigItem } from "./useConfigItem";
import { fetchParsedJailFile, updateParsedJailFile } from "../api/config";
import type { JailFileConfig, JailFileConfigUpdate } from "../types/config";
export interface UseJailFileConfigResult {
config: JailFileConfig | null;
loading: boolean;
error: string | null;
refresh: () => void;
save: (update: JailFileConfigUpdate) => Promise<void>;
}
/**
* Load one jail.d config file by filename and expose a ``save`` callback for
* partial updates.
*
* @param filename - Filename including extension (e.g. ``"sshd.conf"``).
*/
export function useJailFileConfig(filename: string): UseJailFileConfigResult {
const { data, loading, error, refresh, save } = useConfigItem<
JailFileConfig,
JailFileConfigUpdate
>({
fetchFn: () => fetchParsedJailFile(filename),
saveFn: (update) => updateParsedJailFile(filename, update),
mergeOnSave: (prev, update) =>
update.jails != null && prev
? { ...prev, jails: { ...prev.jails, ...update.jails } }
: prev,
});
return {
config: data,
loading,
error,
refresh,
save,
};
}