pl-fe: drive: allow creating folders

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk
2025-11-24 14:28:47 +01:00
parent f087e35f65
commit f0ca9d0014
3 changed files with 33 additions and 2 deletions

View File

@ -5906,7 +5906,7 @@ class PlApiClient {
const response = await this.request('/api/iceshrimp/drive/folder', {
method: 'POST',
body: { name, parentId },
body: { name, parentId: parentId || null },
});
return v.parse(driveFolderSchema, response.json);

View File

@ -738,12 +738,18 @@
"drive.file.upload.error": "Failed to upload file.",
"drive.file.upload.success": "File uploaded successfully.",
"drive.file.view": "View file",
"drive.folder.create": "Create new folder",
"drive.folder.create.confirm": "Create",
"drive.folder.delete": "Delete folder",
"drive.folder.delete.confirm": "Delete",
"drive.folder.delete.error": "Failed to delete folder.",
"drive.folder.delete.success": "Folder deleted successfully.",
"drive.folder.delete.text": "Are you sure you want to delete this folder? This action cannot be undone.",
"drive.folder.dropdown": "Folder menu",
"drive.folder.new": "New folder",
"drive.folder.new.error": "Failed to create folder.",
"drive.folder.new.placeholder": "Folder name",
"drive.folder.new.success": "Folder created successfully.",
"drive.folder.rename": "Rename folder",
"drive.folder.rename.confirm": "Rename",
"drive.folder.rename.error": "Failed to rename folder.",

View File

@ -12,7 +12,7 @@ import IconButton from 'pl-fe/components/ui/icon-button';
import { MIMETYPE_ICONS } from 'pl-fe/components/upload';
import ColumnLoading from 'pl-fe/features/ui/components/column-loading';
import { useCreateDriveFileMutation, useDeleteDriveFileMutation, useUpdateDriveFileMutation } from 'pl-fe/queries/drive/use-drive-file';
import { useDeleteDriveFolderMutation, useDriveFolderQuery, useUpdateDriveFolderMutation } from 'pl-fe/queries/drive/use-drive-folder';
import { useCreateDriveFolderMutation, useDeleteDriveFolderMutation, useDriveFolderQuery, useUpdateDriveFolderMutation } from 'pl-fe/queries/drive/use-drive-folder';
import { useModalsActions } from 'pl-fe/stores/modals';
import toast from 'pl-fe/toast';
import { download } from 'pl-fe/utils/download';
@ -54,6 +54,10 @@ const messages = defineMessages({
fileUpload: { id: 'drive.file.upload', defaultMessage: 'Upload file' },
fileUploadSuccess: { id: 'drive.file.upload.success', defaultMessage: 'File uploaded successfully.' },
fileUploadError: { id: 'drive.file.upload.error', defaultMessage: 'Failed to upload file.' },
newFolder: { id: 'drive.folder.new', defaultMessage: 'New folder' },
newFolderPlaceholder: { id: 'drive.folder.new.placeholder', defaultMessage: 'Folder name' },
newFolderSuccess: { id: 'drive.folder.new.success', defaultMessage: 'Folder created successfully.' },
newFolderError: { id: 'drive.folder.new.error', defaultMessage: 'Failed to create folder.' },
});
interface IFile {
@ -348,8 +352,11 @@ interface IDrivePage {
const DrivePage: React.FC<IDrivePage> = ({ params }) => {
const intl = useIntl();
const { openModal } = useModalsActions();
const { data, isPending } = useDriveFolderQuery(params?.folderId);
const { mutate: uploadFile } = useCreateDriveFileMutation(params?.folderId);
const { mutate: createFolder } = useCreateDriveFolderMutation();
const items: Menu = [
{
@ -362,6 +369,24 @@ const DrivePage: React.FC<IDrivePage> = ({ params }) => {
});
},
},
{
text: intl.formatMessage(messages.newFolder),
icon: require('@phosphor-icons/core/regular/folder-plus.svg'),
action: () => {
openModal('TEXT_FIELD', {
heading: <FormattedMessage id='drive.folder.create' defaultMessage='Create new folder' />,
placeholder: intl.formatMessage(messages.newFolderPlaceholder),
confirm: <FormattedMessage id='drive.folder.create.confirm' defaultMessage='Create' />,
singleLine: true,
onConfirm: (value: string) => {
createFolder({ name: value, parentId: params?.folderId }, {
onSuccess: () => toast.success(messages.newFolderSuccess),
onError: () => toast.error(messages.newFolderError),
});
},
});
},
},
];
if (isPending) {