fixed udb rbac
This commit is contained in:
parent
0f551423b2
commit
3803ebb274
2 changed files with 27 additions and 6 deletions
|
|
@ -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[] = [];
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue