Trash.hooks.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { useEffect, useMemo, useState } from 'react';
  2. import { TrashController } from '$app/stores/effects/workspace/trash/controller';
  3. import { TrashPB } from '@/services/backend';
  4. export function useLoadTrash() {
  5. const [trash, setTrash] = useState<TrashPB[]>([]);
  6. const controller = useMemo(() => {
  7. return new TrashController();
  8. }, []);
  9. useEffect(() => {
  10. void (async () => {
  11. const trash = await controller.getTrash();
  12. setTrash(trash);
  13. })();
  14. }, [controller]);
  15. useEffect(() => {
  16. controller.subscribe({
  17. onTrashChanged: (trash) => {
  18. setTrash(trash);
  19. },
  20. });
  21. return () => {
  22. controller.dispose();
  23. };
  24. }, [controller]);
  25. return {
  26. trash,
  27. };
  28. }
  29. export function useTrashActions() {
  30. const [restoreAllDialogOpen, setRestoreAllDialogOpen] = useState(false);
  31. const [deleteAllDialogOpen, setDeleteAllDialogOpen] = useState(false);
  32. const controller = useMemo(() => {
  33. return new TrashController();
  34. }, []);
  35. useEffect(() => {
  36. return () => {
  37. controller.dispose();
  38. };
  39. }, [controller]);
  40. const onClickRestoreAll = () => {
  41. setRestoreAllDialogOpen(true);
  42. };
  43. const onClickDeleteAll = () => {
  44. setDeleteAllDialogOpen(true);
  45. };
  46. const closeDislog = () => {
  47. setRestoreAllDialogOpen(false);
  48. setDeleteAllDialogOpen(false);
  49. };
  50. return {
  51. onPutback: async (id: string) => {
  52. await controller.putback(id);
  53. },
  54. onDelete: async (ids: string[]) => {
  55. await controller.delete(ids);
  56. },
  57. onDeleteAll: async () => {
  58. await controller.deleteAll();
  59. },
  60. onRestoreAll: async () => {
  61. await controller.restoreAll();
  62. },
  63. onClickRestoreAll,
  64. onClickDeleteAll,
  65. restoreAllDialogOpen,
  66. deleteAllDialogOpen,
  67. closeDislog,
  68. };
  69. }