hooks.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { useCallback, useState } from 'react';
  2. import type { Nullable, IPagePopulatedToShowRevision, IUserHasId } from '@growi/core';
  3. import { useRouter } from 'next/router';
  4. import { createPage, exist } from '~/client/services/page-operation';
  5. import { toastError } from '~/client/util/toastr';
  6. export const useOnNewButtonClicked = (
  7. isLoading: boolean,
  8. currentPage?: IPagePopulatedToShowRevision | null,
  9. ): {
  10. onClickHandler: () => Promise<void>,
  11. isPageCreating: boolean
  12. } => {
  13. const router = useRouter();
  14. const [isPageCreating, setIsPageCreating] = useState(false);
  15. const onClickHandler = useCallback(async() => {
  16. if (isLoading) return;
  17. try {
  18. setIsPageCreating(true);
  19. const parentPath = currentPage == null
  20. ? '/'
  21. : currentPage.path;
  22. const params = {
  23. isSlackEnabled: false,
  24. slackChannels: '',
  25. grant: 4,
  26. // grant: currentPage?.grant || 1,
  27. // grantUserGroupId: currentPage?.grantedGroup?._id,
  28. shouldGeneratePath: true,
  29. };
  30. const response = await createPage(parentPath, '', params);
  31. router.push(`${response.page.id}#edit`);
  32. }
  33. catch (err) {
  34. toastError(err);
  35. }
  36. finally {
  37. setIsPageCreating(false);
  38. }
  39. }, [currentPage, isLoading, router]);
  40. return { onClickHandler, isPageCreating };
  41. };
  42. export const useOnTodaysButtonClicked = (
  43. todaysPath: string,
  44. currentUser?: Nullable<IUserHasId> | undefined,
  45. ): {
  46. onClickHandler: () => Promise<void>,
  47. isPageCreating: boolean
  48. } => {
  49. const router = useRouter();
  50. const [isPageCreating, setIsPageCreating] = useState(false);
  51. const onClickHandler = useCallback(async() => {
  52. if (currentUser == null) {
  53. return;
  54. }
  55. try {
  56. setIsPageCreating(true);
  57. // TODO: get grant, grantUserGroupId data from parent page
  58. // https://redmine.weseek.co.jp/issues/133892
  59. const params = {
  60. isSlackEnabled: false,
  61. slackChannels: '',
  62. grant: 4,
  63. };
  64. const res = await exist(JSON.stringify([todaysPath]));
  65. if (!res.pages[todaysPath]) {
  66. await createPage(todaysPath, '', params);
  67. }
  68. router.push(`${todaysPath}#edit`);
  69. }
  70. catch (err) {
  71. toastError(err);
  72. }
  73. finally {
  74. setIsPageCreating(false);
  75. }
  76. }, [currentUser, router, todaysPath]);
  77. return { onClickHandler, isPageCreating };
  78. };