Files
projectsend/resources/js/hooks/use-folder-management.ts
ignacionelson 6e47d76ba6 ProjectSend 2.0.0
Client file sharing, rebuilt from the ground up: a private area per
client, resumable uploads, folders, groups and categories, sharing with
expiry dates and download limits, comments, file versions, an activity
log, a REST API, and sixteen languages.

This repository begins here. ProjectSend 2 was developed privately, and
that development history is not published — the previous generation
remains available, with its own history, at projectsend/legacy.

Free software under the GNU General Public License v2, or (at your
option) any later version.
2026-08-14 01:38:12 -03:00

57 lines
1.9 KiB
TypeScript

import { router, useForm } from '@inertiajs/react';
import { type FormEventHandler, useState } from 'react';
import { type Crumb, type FolderRow } from '@/types/portal';
/**
* Creating, renaming and deleting the client's own folders.
*
* Separate from usePortalFiles because a theme can offer file browsing
* without offering folder management, and the permissions that gate it
* (can_create_folders, plus upload permission) are answered per request.
*/
export function useFolderManagement(folder: Crumb | null) {
const [newFolderOpen, setNewFolderOpen] = useState(false);
const createForm = useForm({ name: '', parent_id: folder?.id ?? null });
const createFolder: FormEventHandler = (e) => {
e.preventDefault();
createForm.post(route('my-folders.store'), {
preserveScroll: true,
onSuccess: () => {
createForm.reset('name');
setNewFolderOpen(false);
},
});
};
const [renamingFolder, setRenamingFolder] = useState<FolderRow | null>(null);
const renameForm = useForm({ name: '' });
const startRename = (row: FolderRow) => {
renameForm.setData('name', row.name);
setRenamingFolder(row);
};
const renameFolder: FormEventHandler = (e) => {
e.preventDefault();
if (renamingFolder === null) return;
renameForm.patch(route('my-folders.update', renamingFolder.id), {
preserveScroll: true,
onSuccess: () => setRenamingFolder(null),
});
};
const deleteFolder = (id: number) => router.delete(route('my-folders.destroy', id), { preserveScroll: true });
return {
newFolderOpen,
setNewFolderOpen,
createForm,
createFolder,
renamingFolder,
setRenamingFolder,
startRename,
renameForm,
renameFolder,
deleteFolder,
};
}