pl-fe: Add drive queries
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
@ -5901,7 +5901,7 @@ class PlApiClient {
|
||||
return v.parse(driveFolderSchema, response.json);
|
||||
},
|
||||
|
||||
createFolder: async (name: string, parentId: string) => {
|
||||
createFolder: async (name: string, parentId?: string) => {
|
||||
await this.#getIceshrimpAccessToken();
|
||||
|
||||
const response = await this.request('/api/iceshrimp/drive/folder', {
|
||||
|
||||
@ -679,6 +679,8 @@ const getFeatures = (instance: Instance) => {
|
||||
*/
|
||||
domains: any([instance.pleroma.metadata.multitenancy.enabled]),
|
||||
|
||||
drive: v.software === ICESHRIMP_NET,
|
||||
|
||||
/**
|
||||
* Ability to edit profile information.
|
||||
* @see PATCH /api/v1/accounts/update_credentials
|
||||
|
||||
96
packages/pl-fe/src/queries/drive/use-drive-folder.ts
Normal file
96
packages/pl-fe/src/queries/drive/use-drive-folder.ts
Normal file
@ -0,0 +1,96 @@
|
||||
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useClient } from 'pl-fe/hooks/use-client';
|
||||
import { useFeatures } from 'pl-fe/hooks/use-features';
|
||||
|
||||
import type { DriveFolder } from 'pl-api';
|
||||
|
||||
const useDriveFolder = (folderId?: string) => {
|
||||
const client = useClient();
|
||||
const features = useFeatures();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['drive', 'folders', folderId],
|
||||
queryFn: () => folderId ? client.drive.getFolder(folderId) : client.drive.getDrive(),
|
||||
enabled: features.drive,
|
||||
});
|
||||
};
|
||||
|
||||
const useCreateDriveFolder = () => {
|
||||
const client = useClient();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationKey: ['drive', 'folders'],
|
||||
mutationFn: ({ name, parentId }: { name: string; parentId?: string }) => client.drive.createFolder(name, parentId),
|
||||
onSuccess: (folder) => {
|
||||
queryClient.setQueryData(['drive', 'folders', folder.id], folder);
|
||||
queryClient.invalidateQueries({ queryKey: ['drive', 'folders', folder.parent_id || undefined], exact: true });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const useUpdateDriveFolder = (folderId: string) => {
|
||||
const client = useClient();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationKey: ['drive', 'folders'],
|
||||
mutationFn: (name: string) => client.drive.updateFolder(folderId, name),
|
||||
onSuccess: (folder) => {
|
||||
queryClient.setQueryData(['drive', 'folders', folder.id], folder);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const useDeleteDriveFolder = (folderId: string) => {
|
||||
const client = useClient();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
let previousParentId: string | null;
|
||||
|
||||
return useMutation({
|
||||
mutationKey: ['drive', 'folders'],
|
||||
mutationFn: () => {
|
||||
const oldFolder = queryClient.getQueryData<DriveFolder>(['drive', 'folders', folderId]);
|
||||
if (oldFolder) {
|
||||
previousParentId = oldFolder.parent_id;
|
||||
} else {
|
||||
previousParentId = null;
|
||||
}
|
||||
return client.drive.deleteFolder(folderId);
|
||||
},
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['drive', 'folders', folderId], exact: true });
|
||||
if (previousParentId) queryClient.invalidateQueries({ queryKey: ['drive', 'folders', previousParentId || undefined], exact: true });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const useMoveDriveFolder = (folderId: string) => {
|
||||
const client = useClient();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
let previousParentId: string | null;
|
||||
|
||||
return useMutation({
|
||||
mutationKey: ['drive', 'folders'],
|
||||
mutationFn: (targetFolderId: string) => {
|
||||
const oldFolder = queryClient.getQueryData<DriveFolder>(['drive', 'folders', folderId]);
|
||||
if (oldFolder) {
|
||||
previousParentId = oldFolder.parent_id;
|
||||
} else {
|
||||
previousParentId = null;
|
||||
}
|
||||
return client.drive.moveFolder(folderId, targetFolderId);
|
||||
},
|
||||
onSuccess: (_, targetFolderId) => {
|
||||
queryClient.invalidateQueries({ queryKey: ['drive', 'folders', folderId], exact: true });
|
||||
queryClient.invalidateQueries({ queryKey: ['drive', 'folders', targetFolderId], exact: true });
|
||||
if (previousParentId) queryClient.invalidateQueries({ queryKey: ['drive', 'folders', previousParentId || undefined], exact: true });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export { useDriveFolder, useCreateDriveFolder, useUpdateDriveFolder, useDeleteDriveFolder, useMoveDriveFolder };
|
||||
Reference in New Issue
Block a user