page.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import useSWR, { SWRResponse } from 'swr';
  2. import { Types } from 'mongoose';
  3. import { apiv3Get } from '~/client/util/apiv3-client';
  4. import { HasObjectId } from '~/interfaces/has-object-id';
  5. import { IPage } from '~/interfaces/page';
  6. import { IPagingResult } from '~/interfaces/paging-result';
  7. import { useIsGuestUser } from './context';
  8. export const useSWRxPageByPath = (path: string, initialData?: IPage): SWRResponse<IPage & HasObjectId, Error> => {
  9. return useSWR(
  10. ['/page', path],
  11. (endpoint, path) => apiv3Get(endpoint, { path }).then(result => result.data.page),
  12. {
  13. fallbackData: initialData,
  14. },
  15. );
  16. };
  17. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  18. export const useSWRxRecentlyUpdated = (): SWRResponse<(IPage & HasObjectId)[], Error> => {
  19. return useSWR(
  20. '/pages/recent',
  21. endpoint => apiv3Get<{ pages:(IPage & HasObjectId)[] }>(endpoint).then(response => response.data?.pages),
  22. );
  23. };
  24. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  25. export const useSWRxPageList = (
  26. path: string,
  27. pageNumber?: number,
  28. ): SWRResponse<IPagingResult<IPage>, Error> => {
  29. const page = pageNumber || 1;
  30. return useSWR(
  31. `/pages/list?path=${path}&page=${page}`,
  32. endpoint => apiv3Get<{pages: IPage[], totalCount: number, limit: number}>(endpoint).then((response) => {
  33. return {
  34. items: response.data.pages,
  35. totalCount: response.data.totalCount,
  36. limit: response.data.limit,
  37. };
  38. }),
  39. );
  40. };
  41. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  42. export const useSWRxSubscriptionStatus = <Data, Error>(pageId: Types.ObjectId): SWRResponse<{status: boolean | null}, Error> => {
  43. const { data: isGuestUser } = useIsGuestUser();
  44. const key = isGuestUser === false ? ['/page/subscribe', pageId] : null;
  45. return useSWR(
  46. key,
  47. (endpoint, pageId) => apiv3Get(endpoint, { pageId }).then((response) => {
  48. return {
  49. status: response.data.subscribing,
  50. };
  51. }),
  52. );
  53. };