page.tsx 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import useSWR, { SWRResponse } from 'swr';
  2. import { apiv3Get } from '~/client/util/apiv3-client';
  3. import { IPage, IPageHasId } from '~/interfaces/page';
  4. import { IPagingResult } from '~/interfaces/paging-result';
  5. import { apiGet } from '../client/util/apiv1-client';
  6. import { IPageTagsInfo } from '../interfaces/pageTagsInfo';
  7. import { IPageInfo } from '../interfaces/page-info';
  8. import { useIsGuestUser } from './context';
  9. export const useSWRxPageByPath = (path: string, initialData?: IPageHasId): SWRResponse<IPageHasId, Error> => {
  10. return useSWR(
  11. ['/page', path],
  12. (endpoint, path) => apiv3Get(endpoint, { path }).then(result => result.data.page),
  13. {
  14. fallbackData: initialData,
  15. },
  16. );
  17. };
  18. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  19. export const useSWRxRecentlyUpdated = (): SWRResponse<(IPageHasId)[], Error> => {
  20. return useSWR(
  21. '/pages/recent',
  22. endpoint => apiv3Get<{ pages:(IPageHasId)[] }>(endpoint).then(response => response.data?.pages),
  23. );
  24. };
  25. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  26. export const useSWRxPageList = (
  27. path: string,
  28. pageNumber?: number,
  29. ): SWRResponse<IPagingResult<IPageHasId>, Error> => {
  30. const page = pageNumber || 1;
  31. return useSWR(
  32. `/pages/list?path=${path}&page=${page}`,
  33. endpoint => apiv3Get<{pages: IPageHasId[], totalCount: number, limit: number}>(endpoint).then((response) => {
  34. return {
  35. items: response.data.pages,
  36. totalCount: response.data.totalCount,
  37. limit: response.data.limit,
  38. };
  39. }),
  40. );
  41. };
  42. export const useSWRPageInfo = (pageId: string | null): SWRResponse<IPageInfo, Error> => {
  43. return useSWR(pageId != null ? `/page/info?pageId=${pageId}` : null, endpoint => apiv3Get(endpoint).then((response) => {
  44. return {
  45. sumOfLikers: response.data.sumOfLikers,
  46. likerIds: response.data.likerIds,
  47. seenUserIds: response.data.seenUserIds,
  48. sumOfSeenUsers: response.data.sumOfSeenUsers,
  49. isSeen: response.data.isSeen,
  50. isLiked: response.data?.isLiked,
  51. };
  52. }));
  53. };
  54. export const useSWRTagsInfo = (pageId: string | null | undefined): SWRResponse<IPageTagsInfo, Error> => {
  55. const key = pageId == null ? null : `/pages.getPageTag?pageId=${pageId}`;
  56. return useSWR(key, endpoint => apiGet(endpoint).then((response: IPageTagsInfo) => {
  57. return {
  58. tags: response.tags,
  59. };
  60. }));
  61. };
  62. type GetSubscriptionStatusResult = { subscribing: boolean };
  63. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  64. export const useSWRxSubscriptionStatus = <Data, Error>(pageId: string): SWRResponse<{status: boolean | null}, Error> => {
  65. const { data: isGuestUser } = useIsGuestUser();
  66. const key = isGuestUser === false ? ['/page/subscribe', pageId] : null;
  67. return useSWR(
  68. key,
  69. (endpoint, pageId) => apiv3Get<GetSubscriptionStatusResult>(endpoint, { pageId }).then((response) => {
  70. return {
  71. status: response.data.subscribing,
  72. };
  73. }),
  74. );
  75. };
  76. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  77. export const useSWRxPageInfo = <Data, Error>(pageId: string | undefined): SWRResponse<IPageInfo, Error> => {
  78. return useSWR(
  79. pageId != null ? ['/page/info', pageId] : null,
  80. (endpoint, pageId) => apiv3Get(endpoint, { pageId }).then(response => response.data),
  81. );
  82. };