feat: frontend Actions Tab with structured API, assign/create/remove dialogs (Task 3.3)

- ActionsTab rewritten with master/detail layout (mirrors FiltersTab)
- New AssignActionDialog and CreateActionDialog components
- ActionConfig type extended with active, used_by_jails, source_file, has_local_override
- New API functions: fetchActions, fetchAction, updateAction, createAction, deleteAction, assignActionToJail, removeActionFromJail
- useActionConfig updated to use new structured endpoints
- index.ts barrel exports updated
This commit is contained in:
2026-03-13 19:21:58 +01:00
parent f7cc130432
commit 6e35c5d269
9 changed files with 861 additions and 77 deletions

View File

@@ -3,7 +3,7 @@
*/
import { useCallback, useEffect, useRef, useState } from "react";
import { fetchParsedAction, updateParsedAction } from "../api/config";
import { fetchAction, updateAction } from "../api/config";
import type { ActionConfig, ActionConfigUpdate } from "../types/config";
export interface UseActionConfigResult {
@@ -37,7 +37,7 @@ export function useActionConfig(name: string): UseActionConfigResult {
setLoading(true);
setError(null);
fetchParsedAction(name)
fetchAction(name)
.then((data) => {
if (!ctrl.signal.aborted) {
setConfig(data);
@@ -64,7 +64,7 @@ export function useActionConfig(name: string): UseActionConfigResult {
setSaving(true);
setSaveError(null);
try {
await updateParsedAction(name, update);
await updateAction(name, update);
setConfig((prev) =>
prev
? {