remote-latest-page.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { useMemo, useCallback } from 'react';
  2. import { SWRResponse } from 'swr';
  3. import { IUser } from '~/interfaces/user';
  4. import { useRevisionIdHackmdSynced, useHasDraftOnHackmd } from './hackmd';
  5. import { useStaticSWR } from './use-static-swr';
  6. export const useRemoteRevisionId = (initialData?: string): SWRResponse<string, Error> => {
  7. return useStaticSWR<string, Error>('remoteRevisionId', initialData);
  8. };
  9. export const useRemoteRevisionBody = (initialData?: string): SWRResponse<string, Error> => {
  10. return useStaticSWR<string, Error>('remoteRevisionBody', initialData);
  11. };
  12. export const useRemoteRevisionLastUpdateUser = (initialData?: IUser): SWRResponse<IUser, Error> => {
  13. return useStaticSWR<IUser, Error>('remoteRevisionLastUpdateUser', initialData);
  14. };
  15. export const useRemoteRevisionLastUpdatedAt = (initialData?: Date): SWRResponse<Date, Error> => {
  16. return useStaticSWR<Date, Error>('remoteRevisionLastUpdatedAt', initialData);
  17. };
  18. type RemoteRevisionData = {
  19. remoteRevisionId: string,
  20. remoteRevisionBody: string,
  21. remoteRevisionLastUpdateUser: IUser,
  22. remoteRevisionLastUpdatedAt: Date,
  23. revisionIdHackmdSynced: string,
  24. hasDraftOnHackmd: boolean,
  25. }
  26. // set remote data all at once
  27. export const useSetRemoteLatestPageData = (): { setRemoteLatestPageData: (pageData: RemoteRevisionData) => void } => {
  28. const { mutate: mutateRemoteRevisionId } = useRemoteRevisionId();
  29. const { mutate: mutateRemoteRevisionBody } = useRemoteRevisionBody();
  30. const { mutate: mutateRemoteRevisionLastUpdateUser } = useRemoteRevisionLastUpdateUser();
  31. const { mutate: mutateRemoteRevisionLastUpdatedAt } = useRemoteRevisionLastUpdatedAt();
  32. const { mutate: mutateRevisionIdHackmdSynced } = useRevisionIdHackmdSynced();
  33. const { mutate: mutateHasDraftOnHackmd } = useHasDraftOnHackmd();
  34. const setRemoteLatestPageData = useCallback((remoteRevisionData: RemoteRevisionData) => {
  35. const {
  36. remoteRevisionId, remoteRevisionBody, remoteRevisionLastUpdateUser, remoteRevisionLastUpdatedAt, revisionIdHackmdSynced, hasDraftOnHackmd,
  37. } = remoteRevisionData;
  38. mutateRemoteRevisionId(remoteRevisionId);
  39. mutateRemoteRevisionBody(remoteRevisionBody);
  40. mutateRemoteRevisionLastUpdateUser(remoteRevisionLastUpdateUser);
  41. mutateRemoteRevisionLastUpdatedAt(remoteRevisionLastUpdatedAt);
  42. mutateRevisionIdHackmdSynced(revisionIdHackmdSynced);
  43. mutateHasDraftOnHackmd(hasDraftOnHackmd);
  44. // eslint-disable-next-line max-len
  45. }, [mutateHasDraftOnHackmd, mutateRemoteRevisionBody, mutateRemoteRevisionId, mutateRemoteRevisionLastUpdateUser, mutateRemoteRevisionLastUpdatedAt, mutateRevisionIdHackmdSynced]);
  46. return useMemo(() => {
  47. return {
  48. setRemoteLatestPageData,
  49. };
  50. }, [setRemoteLatestPageData]);
  51. };