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(() => {
|
useEffect(() => {
|
||||||
setExpandedFolderIds(_loadExpanded(storageKey));
|
setExpandedFolderIds(_loadExpanded(storageKey));
|
||||||
|
setTreeFilesMap(new Map());
|
||||||
|
setFolders([]);
|
||||||
}, [storageKey]);
|
}, [storageKey]);
|
||||||
|
|
||||||
// ── Folder state ──────────────────────────────────────────────────────
|
// ── 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 ───────────────────────
|
// ── Tree files: lazy-loaded per expanded folder ───────────────────────
|
||||||
const [treeFilesMap, setTreeFilesMap] = useState<Map<string, FileNode[]>>(new Map());
|
const [treeFilesMap, setTreeFilesMap] = useState<Map<string, FileNode[]>>(new Map());
|
||||||
|
|
@ -158,19 +160,18 @@ export function FileProvider({ children }: { children: React.ReactNode }) {
|
||||||
);
|
);
|
||||||
}, [treeFilesMap, loadTreeFiles]);
|
}, [treeFilesMap, loadTreeFiles]);
|
||||||
|
|
||||||
// Load root files on mount
|
// Load root files on mount and on context change
|
||||||
useEffect(() => { loadTreeFiles(''); }, [loadTreeFiles]);
|
useEffect(() => { loadTreeFiles(''); }, [loadTreeFiles, storageKey]);
|
||||||
|
|
||||||
// Load files for initially expanded folders
|
// Load files for expanded folders on mount and context change
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
expandedFolderIds.forEach(id => {
|
expandedFolderIds.forEach(id => {
|
||||||
if (!treeFilesMap.has(id)) {
|
if (!treeFilesMap.has(id)) {
|
||||||
loadTreeFiles(id);
|
loadTreeFiles(id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Only on mount – don't re-run when treeFilesMap changes
|
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, []);
|
}, [storageKey]);
|
||||||
|
|
||||||
const treeFileNodes: FileNode[] = useMemo(() => {
|
const treeFileNodes: FileNode[] = useMemo(() => {
|
||||||
const result: FileNode[] = [];
|
const result: FileNode[] = [];
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,24 @@ export const FilesPage: React.FC = () => {
|
||||||
await Promise.all([_tableRefetch(), refreshTreeFiles(), refreshFolders()]);
|
await Promise.all([_tableRefetch(), refreshTreeFiles(), refreshFolders()]);
|
||||||
}, [_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) ────────────────────────
|
// ── Folder nodes for tree (real folders only) ────────────────────────
|
||||||
const folderNodes = useMemo(() => {
|
const folderNodes = useMemo(() => {
|
||||||
return folders.map(f => ({
|
return folders.map(f => ({
|
||||||
|
|
@ -386,6 +404,8 @@ export const FilesPage: React.FC = () => {
|
||||||
onDeleteFiles={_handleDeleteTreeFiles}
|
onDeleteFiles={_handleDeleteTreeFiles}
|
||||||
onDeleteFolders={_handleDeleteTreeFolders}
|
onDeleteFolders={_handleDeleteTreeFolders}
|
||||||
onDownloadFolder={handleDownloadFolder}
|
onDownloadFolder={handleDownloadFolder}
|
||||||
|
onScopeChange={_handleScopeChange}
|
||||||
|
onNeutralizeToggle={_handleNeutralizeToggle}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue