fixed udb rbac

This commit is contained in:
ValueOn AG 2026-04-12 10:43:31 +02:00
parent 0f551423b2
commit 3803ebb274
2 changed files with 27 additions and 6 deletions

View file

@ -89,6 +89,8 @@ export function FileProvider({ children }: { children: React.ReactNode }) {
useEffect(() => {
setExpandedFolderIds(_loadExpanded(storageKey));
setTreeFilesMap(new Map());
setFolders([]);
}, [storageKey]);
// ── Folder state ──────────────────────────────────────────────────────
@ -108,7 +110,7 @@ export function FileProvider({ children }: { children: React.ReactNode }) {
}
}, []);
useEffect(() => { refreshFolders(); }, [refreshFolders]);
useEffect(() => { refreshFolders(); }, [refreshFolders, storageKey]);
// ── Tree files: lazy-loaded per expanded folder ───────────────────────
const [treeFilesMap, setTreeFilesMap] = useState<Map<string, FileNode[]>>(new Map());
@ -158,19 +160,18 @@ export function FileProvider({ children }: { children: React.ReactNode }) {
);
}, [treeFilesMap, loadTreeFiles]);
// Load root files on mount
useEffect(() => { loadTreeFiles(''); }, [loadTreeFiles]);
// Load root files on mount and on context change
useEffect(() => { loadTreeFiles(''); }, [loadTreeFiles, storageKey]);
// Load files for initially expanded folders
// Load files for expanded folders on mount and context change
useEffect(() => {
expandedFolderIds.forEach(id => {
if (!treeFilesMap.has(id)) {
loadTreeFiles(id);
}
});
// Only on mount don't re-run when treeFilesMap changes
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}, [storageKey]);
const treeFileNodes: FileNode[] = useMemo(() => {
const result: FileNode[] = [];

View file

@ -120,6 +120,24 @@ export const FilesPage: React.FC = () => {
await Promise.all([_tableRefetch(), refreshTreeFiles(), refreshFolders()]);
}, [_tableRefetch, refreshTreeFiles, refreshFolders]);
const _handleScopeChange = useCallback(async (fileId: string, newScope: string) => {
try {
await api.patch(`/api/files/${fileId}/scope`, { scope: newScope });
await Promise.all([refreshTreeFiles(), _tableRefetch()]);
} catch (err) {
console.error('Failed to update scope:', err);
}
}, [refreshTreeFiles, _tableRefetch]);
const _handleNeutralizeToggle = useCallback(async (fileId: string, newValue: boolean) => {
try {
await api.patch(`/api/files/${fileId}/neutralize`, { neutralize: newValue });
await Promise.all([refreshTreeFiles(), _tableRefetch()]);
} catch (err) {
console.error('Failed to toggle neutralize:', err);
}
}, [refreshTreeFiles, _tableRefetch]);
// ── Folder nodes for tree (real folders only) ────────────────────────
const folderNodes = useMemo(() => {
return folders.map(f => ({
@ -386,6 +404,8 @@ export const FilesPage: React.FC = () => {
onDeleteFiles={_handleDeleteTreeFiles}
onDeleteFolders={_handleDeleteTreeFolders}
onDownloadFolder={handleDownloadFolder}
onScopeChange={_handleScopeChange}
onNeutralizeToggle={_handleNeutralizeToggle}
/>
</div>