hooks.tsx 2.2 KB

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