Просмотр исходного кода

Import new toastr and fix return type of statics method

https://youtrack.weseek.co.jp/issue/GW-7910
- Import toastr from new module
- Update return type of BookmarkFolderModel static method to Promise
- Define type of variable bookmarkFolder in createByParameters method
- Add conditional query if parentId null in findFolderAndChildren method
- Define type of parentFolder and bookmarkFolders in findFolderAndChildren method
- Add error exception if bookmarkFolder update return null
- Update grw-foldertree-triangle-btn mixins-button implementation
Mudana-Grune 3 лет назад
Родитель
Сommit
c4ccd46ce7

+ 1 - 1
packages/app/src/components/Bookmarks/BookmarkFolderMenu.tsx

@@ -7,8 +7,8 @@ import {
   DropdownItem, DropdownMenu, UncontrolledDropdown,
 } from 'reactstrap';
 
-import { toastError, toastSuccess } from '~/client/util/apiNotification';
 import { apiv3Post } from '~/client/util/apiv3-client';
+import { toastError, toastSuccess } from '~/client/util/toastr';
 import { useSWRBookmarkInfo } from '~/stores/bookmark';
 import { useSWRxBookamrkFolderAndChild } from '~/stores/bookmark-folder';
 import { useSWRxCurrentPage } from '~/stores/page';

+ 2 - 2
packages/app/src/components/Bookmarks/BookmarkFolderMenuItem.tsx

@@ -6,8 +6,8 @@ import {
   DropdownMenu, DropdownToggle, UncontrolledDropdown,
 } from 'reactstrap';
 
-import { toastError, toastSuccess } from '~/client/util/apiNotification';
 import { apiv3Post } from '~/client/util/apiv3-client';
+import { toastError, toastSuccess } from '~/client/util/toastr';
 import { BookmarkFolderItems } from '~/interfaces/bookmark-info';
 import { useSWRBookmarkInfo } from '~/stores/bookmark';
 import { useSWRxBookamrkFolderAndChild } from '~/stores/bookmark-folder';
@@ -145,7 +145,7 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
       toggle={toggleHandler}
       onMouseLeave={onMouseLeaveHandler}
     >
-      <div className='d-flex justify-content-start  grw-bookmark-folder-menu-item-title'>
+      <div className='d-flex justify-content-start grw-bookmark-folder-menu-item-title'>
         <input
           type="radio"
           checked={isSelected}

+ 31 - 14
packages/app/src/server/models/bookmark-folder.ts

@@ -26,12 +26,12 @@ export interface BookmarkFolderDocument extends Document {
 }
 
 export interface BookmarkFolderModel extends Model<BookmarkFolderDocument>{
-  createByParameters(params: IBookmarkFolder): BookmarkFolderDocument
-  findFolderAndChildren(user: Types.ObjectId | string, parentId?: Types.ObjectId | string): BookmarkFolderItems[]
+  createByParameters(params: IBookmarkFolder): Promise<BookmarkFolderDocument>
+  findFolderAndChildren(user: Types.ObjectId | string, parentId?: Types.ObjectId | string): Promise<BookmarkFolderItems[] | null>
   findChildFolderById(parentBookmarkFolder: Types.ObjectId | string): Promise<BookmarkFolderDocument[]>
-  deleteFolderAndChildren(bookmarkFolderId: Types.ObjectId | string): {deletedCount: number}
-  updateBookmarkFolder(bookmarkFolderId: string, name: string, parent: string): BookmarkFolderDocument | null
-  insertOrUpdateBookmarkedPage(pageId: IPageHasId, userId: Types.ObjectId | string, folderId: string)
+  deleteFolderAndChildren(bookmarkFolderId: Types.ObjectId | string): Promise<{deletedCount: number}>
+  updateBookmarkFolder(bookmarkFolderId: string, name: string, parent: string): Promise<BookmarkFolderDocument>
+  insertOrUpdateBookmarkedPage(pageId: IPageHasId, userId: Types.ObjectId | string, folderId: string): Promise<BookmarkFolderDocument>
 }
 
 const bookmarkFolderSchema = new Schema<BookmarkFolderDocument, BookmarkFolderModel>({
@@ -57,10 +57,10 @@ bookmarkFolderSchema.virtual('children', {
 
 bookmarkFolderSchema.statics.createByParameters = async function(params: IBookmarkFolder): Promise<BookmarkFolderDocument> {
   const { name, owner, parent } = params;
-  let bookmarkFolder;
+  let bookmarkFolder: BookmarkFolderDocument;
 
   if (parent == null) {
-    bookmarkFolder = await this.create({ name, owner }) as unknown as BookmarkFolderDocument;
+    bookmarkFolder = await this.create({ name, owner });
   }
   else {
     // Check if parent folder id is valid and parent folder exists
@@ -73,7 +73,7 @@ bookmarkFolderSchema.statics.createByParameters = async function(params: IBookma
     if (parentFolder == null) {
       throw new InvalidParentBookmarkFolderError('Parent folder not found');
     }
-    bookmarkFolder = await this.create({ name, owner, parent:  parentFolder._id }) as unknown as BookmarkFolderDocument;
+    bookmarkFolder = await this.create({ name, owner, parent:  parentFolder._id });
   }
 
   return bookmarkFolder;
@@ -84,8 +84,23 @@ bookmarkFolderSchema.statics.findFolderAndChildren = async function(
     parentId?: Types.ObjectId | string,
 ): Promise<BookmarkFolderItems[]> {
 
-  const parentFolder = await this.findById(parentId) as unknown as BookmarkFolderDocument;
-  const bookmarkFolders = await this.find({ owner: userId, parent: parentFolder })
+  let parentFolder: BookmarkFolderDocument | null;
+  let query = {};
+  // Load child bookmark folders
+  if (parentId != null) {
+    parentFolder = await this.findById(parentId);
+    if (parentFolder != null) {
+      query = { owner: userId, parent: parentFolder };
+    }
+    else {
+      throw new InvalidParentBookmarkFolderError('Parent folder not found');
+    }
+  }
+  // Load initial / root bookmark folders
+  else {
+    query = { owner: userId, parent: null };
+  }
+  const bookmarkFolders: BookmarkFolderItems[] = await this.find(query)
     .populate({ path: 'children' })
     .populate({
       path: 'bookmarks',
@@ -94,7 +109,7 @@ bookmarkFolderSchema.statics.findFolderAndChildren = async function(
         path: 'page',
         model: 'Page',
       },
-    }).exec() as unknown as BookmarkFolderItems[];
+    });
   return bookmarkFolders;
 };
 
@@ -128,19 +143,21 @@ bookmarkFolderSchema.statics.deleteFolderAndChildren = async function(bookmarkFo
 };
 
 bookmarkFolderSchema.statics.updateBookmarkFolder = async function(bookmarkFolderId: string, name: string, parent: string):
- Promise<BookmarkFolderDocument | null> {
-
+ Promise<BookmarkFolderDocument> {
   const parentFolder = await this.findById(parent);
   const updateFields = {
     name, parent: parentFolder?._id || null,
   };
   const bookmarkFolder = await this.findByIdAndUpdate(bookmarkFolderId, { $set: updateFields }, { new: true });
+  if (bookmarkFolder == null) {
+    throw new Error('Update bookmark folder failed');
+  }
   return bookmarkFolder;
 
 };
 
 bookmarkFolderSchema.statics.insertOrUpdateBookmarkedPage = async function(pageId: IPageHasId, userId: Types.ObjectId | string, folderId: string):
-Promise<BookmarkFolderDocument | null> {
+Promise<BookmarkFolderDocument> {
 
   // Create bookmark or update existing
   const bookmarkedPage = await Bookmark.findOneAndUpdate({ page: pageId, user: userId }, { page: pageId, user: userId }, { new: true, upsert: true });

+ 1 - 1
packages/app/src/server/routes/apiv3/bookmark-folder.ts

@@ -55,7 +55,7 @@ module.exports = (crowi) => {
     const _parentId = parentId ?? null;
     try {
       const bookmarkFolders = await BookmarkFolder.findFolderAndChildren(req.user?._id, _parentId);
-      const bookmarkFolderItems = bookmarkFolders.map(bookmarkFolder => ({
+      const bookmarkFolderItems = bookmarkFolders?.map(bookmarkFolder => ({
         _id: bookmarkFolder._id,
         name: bookmarkFolder.name,
         parent: bookmarkFolder.parent,

+ 1 - 1
packages/preset-themes/src/styles/island.scss

@@ -131,7 +131,7 @@ $color-themelight: rgba(183, 226, 219, 1);
     // Foldertree
     .grw-foldertree {
       .grw-foldertree-triangle-btn {
-        @include mixins.button-outline-svg-icon-variant($gray-400, $bgcolor-sidebar);
+        @include mixins-buttons.button-outline-svg-icon-variant($gray-400, $bgcolor-sidebar);
       }
     }
   }