Rework sidebar pages

* Move sidebar pages from workspace to space level
* Replace array sorting with lexicographical fractional indexing
* Fixes and updates
This commit is contained in:
Philipinho
2024-04-16 21:55:24 +01:00
parent f1bdce1662
commit df9110268c
35 changed files with 775 additions and 982 deletions

View File

@ -1,15 +1,25 @@
import { useMutation, useQuery, UseQueryResult } from "@tanstack/react-query";
import {
useInfiniteQuery,
useMutation,
useQuery,
UseQueryResult,
} from "@tanstack/react-query";
import {
createPage,
deletePage,
getPageById,
getPages,
getSidebarPages,
getRecentChanges,
getSpacePageOrder,
updatePage,
movePage,
} from "@/features/page/services/page-service";
import { IPage, IWorkspacePageOrder } from "@/features/page/types/page.types";
import {
IMovePage,
IPage,
SidebarPagesParams,
} from "@/features/page/types/page.types";
import { notifications } from "@mantine/notifications";
import { IPagination } from "@/lib/types.ts";
const RECENT_CHANGES_KEY = ["recentChanges"];
@ -22,16 +32,6 @@ export function usePageQuery(pageId: string): UseQueryResult<IPage, Error> {
});
}
export function useGetPagesQuery(
spaceId: string,
): UseQueryResult<IPage[], Error> {
return useQuery({
queryKey: ["pages", spaceId],
queryFn: () => getPages(spaceId),
staleTime: 5 * 60 * 1000,
});
}
export function useRecentChangesQuery(): UseQueryResult<IPage[], Error> {
return useQuery({
queryKey: RECENT_CHANGES_KEY,
@ -44,6 +44,9 @@ export function useCreatePageMutation() {
return useMutation<IPage, Error, Partial<IPage>>({
mutationFn: (data) => createPage(data),
onSuccess: (data) => {},
onError: (error) => {
notifications.show({ message: "Failed to create page", color: "red" });
},
});
}
@ -60,16 +63,37 @@ export function useDeletePageMutation() {
onSuccess: () => {
notifications.show({ message: "Page deleted successfully" });
},
});
}
export default function useSpacePageOrder(
spaceId: string,
): UseQueryResult<IWorkspacePageOrder> {
return useQuery({
queryKey: ["page-order", spaceId],
queryFn: async () => {
return await getSpacePageOrder(spaceId);
onError: (error) => {
notifications.show({ message: "Failed to delete page", color: "red" });
},
});
}
export function useMovePageMutation() {
return useMutation<void, Error, IMovePage>({
mutationFn: (data) => movePage(data),
});
}
export function useGetSidebarPagesQuery(
data: SidebarPagesParams,
): UseQueryResult<IPagination<IPage>, Error> {
return useQuery({
queryKey: ["sidebar-pages", data],
queryFn: () => getSidebarPages(data),
});
}
export function useGetRootSidebarPagesQuery(data: SidebarPagesParams) {
return useInfiniteQuery({
queryKey: ["root-sidebar-pages", data.spaceId],
queryFn: async ({ pageParam }) => {
return getSidebarPages({ spaceId: data.spaceId, page: pageParam });
},
initialPageParam: 1,
getPreviousPageParam: (firstPage) =>
firstPage.meta.hasPrevPage ? firstPage.meta.page - 1 : undefined,
getNextPageParam: (lastPage) =>
lastPage.meta.hasNextPage ? lastPage.meta.page + 1 : undefined,
});
}