FolderItem.hooks.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { foldersActions, IFolder } from '../../../stores/reducers/folders/slice';
  2. import { useState } from 'react';
  3. import { useAppDispatch } from '../../../stores/store';
  4. import { nanoid } from 'nanoid';
  5. import { pagesActions } from '../../../stores/reducers/pages/slice';
  6. import { ViewLayoutTypePB } from '../../../../services/backend';
  7. export const useFolderEvents = (folder: IFolder) => {
  8. const appDispatch = useAppDispatch();
  9. const [showPages, setShowPages] = useState(false);
  10. const [showFolderOptions, setShowFolderOptions] = useState(false);
  11. const [showNewPageOptions, setShowNewPageOptions] = useState(false);
  12. const [showRenamePopup, setShowRenamePopup] = useState(false);
  13. const onFolderNameClick = () => {
  14. setShowPages(!showPages);
  15. };
  16. const onFolderOptionsClick = () => {
  17. setShowFolderOptions(!showFolderOptions);
  18. };
  19. const onNewPageClick = () => {
  20. setShowNewPageOptions(!showNewPageOptions);
  21. };
  22. const startFolderRename = () => {
  23. closePopup();
  24. setShowRenamePopup(true);
  25. };
  26. const changeFolderTitle = (newTitle: string) => {
  27. appDispatch(foldersActions.renameFolder({ id: folder.id, newTitle }));
  28. };
  29. const closeRenamePopup = () => {
  30. setShowRenamePopup(false);
  31. };
  32. const deleteFolder = () => {
  33. closePopup();
  34. appDispatch(foldersActions.deleteFolder({ id: folder.id }));
  35. };
  36. const duplicateFolder = () => {
  37. closePopup();
  38. appDispatch(foldersActions.addFolder({ id: nanoid(8), title: folder.title }));
  39. };
  40. const closePopup = () => {
  41. setShowFolderOptions(false);
  42. setShowNewPageOptions(false);
  43. };
  44. const onAddNewDocumentPage = () => {
  45. closePopup();
  46. appDispatch(
  47. pagesActions.addPage({
  48. folderId: folder.id,
  49. pageType: ViewLayoutTypePB.Document,
  50. title: 'New Page 1',
  51. id: nanoid(6),
  52. })
  53. );
  54. };
  55. const onAddNewBoardPage = () => {
  56. closePopup();
  57. appDispatch(
  58. pagesActions.addPage({
  59. folderId: folder.id,
  60. pageType: ViewLayoutTypePB.Board,
  61. title: 'New Board 1',
  62. id: nanoid(6),
  63. })
  64. );
  65. };
  66. const onAddNewGridPage = () => {
  67. closePopup();
  68. appDispatch(
  69. pagesActions.addPage({ folderId: folder.id, pageType: ViewLayoutTypePB.Grid, title: 'New Grid 1', id: nanoid(6) })
  70. );
  71. };
  72. return {
  73. showPages,
  74. onFolderNameClick,
  75. showFolderOptions,
  76. onFolderOptionsClick,
  77. showNewPageOptions,
  78. onNewPageClick,
  79. showRenamePopup,
  80. startFolderRename,
  81. changeFolderTitle,
  82. closeRenamePopup,
  83. deleteFolder,
  84. duplicateFolder,
  85. onAddNewDocumentPage,
  86. onAddNewBoardPage,
  87. onAddNewGridPage,
  88. closePopup,
  89. };
  90. };