bookmark-utils.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import type { IRevision, Ref } from '@growi/core';
  2. import type { BookmarkFolderItems } from '~/interfaces/bookmark-info';
  3. import { apiv3Delete, apiv3Post, apiv3Put } from './apiv3-client';
  4. // Check if bookmark folder item has children
  5. export const hasChildren = (item: BookmarkFolderItems | BookmarkFolderItems[]): boolean => {
  6. if (item === null) {
  7. return false;
  8. }
  9. if (Array.isArray(item)) {
  10. return item.length > 0;
  11. }
  12. return item.children && item.children.length > 0;
  13. };
  14. // Add new folder helper
  15. export const addNewFolder = async(name: string, parent: string | null): Promise<void> => {
  16. await apiv3Post('/bookmark-folder', { name, parent });
  17. };
  18. // Put bookmark to a folder
  19. export const addBookmarkToFolder = async(pageId: string, folderId: string | null): Promise<void> => {
  20. await apiv3Post('/bookmark-folder/add-boookmark-to-folder', { pageId, folderId });
  21. };
  22. // Delete bookmark folder
  23. export const deleteBookmarkFolder = async(bookmarkFolderId: string): Promise<void> => {
  24. await apiv3Delete(`/bookmark-folder/${bookmarkFolderId}`);
  25. };
  26. // Rename page from bookmark item control
  27. export const renamePage = async(pageId: string, revisionId: Ref<IRevision> | undefined, newPagePath: string): Promise<void> => {
  28. await apiv3Put('/pages/rename', { pageId, revisionId, newPagePath });
  29. };
  30. // Update bookmark by isBookmarked status
  31. export const toggleBookmark = async(pageId: string, status: boolean): Promise<void> => {
  32. await apiv3Put('/bookmark-folder/update-bookmark', { pageId, status });
  33. };
  34. // Update Bookmark folder
  35. export const updateBookmarkFolder = async(bookmarkFolderId: string, name: string, parent: string | null, children: BookmarkFolderItems[]): Promise<void> => {
  36. await apiv3Put('/bookmark-folder', {
  37. bookmarkFolderId, name, parent, children,
  38. });
  39. };