mirror of
https://github.com/projectsend/projectsend.git
synced 2026-09-23 03:53:21 +00:00
6e47d76ba6
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.
57 lines
1.9 KiB
TypeScript
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,
|
|
};
|
|
}
|