Taichi Masuyama 4 лет назад
Родитель
Сommit
97a923868a

+ 0 - 70
packages/app/src/components/Navbar/SubNavButtons.jsx

@@ -1,70 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import AppContainer from '~/client/services/AppContainer';
-import PageContainer from '~/client/services/PageContainer';
-import { useCurrentPageId } from '~/stores/context';
-import { EditorMode, useEditorMode } from '~/stores/ui';
-import { withUnstatedContainers } from '../UnstatedUtils';
-
-import BookmarkButtons from '../BookmarkButtons';
-import LikeButtons from '../LikeButtons';
-import SubscribeButton from '../SubscribeButton';
-import PageManagement from '../Page/PageManagement';
-
-const SubnavButtons = React.memo((props) => {
-  const {
-    appContainer, pageContainer, isCompactMode,
-  } = props;
-
-  const { data: pageId } = useCurrentPageId();
-  const { data: editorMode } = useEditorMode();
-
-  /* eslint-disable react/prop-types */
-  const PageReactionButtons = ({ pageContainer }) => {
-
-    return (
-      <>
-        <span>
-          <SubscribeButton pageId={pageId} />
-        </span>
-        {pageContainer.isAbleToShowLikeButtons && (
-          <span>
-            <LikeButtons />
-          </span>
-        )}
-        <span>
-          <BookmarkButtons pageId={pageId} />
-        </span>
-      </>
-    );
-  };
-  /* eslint-enable react/prop-types */
-
-  const isViewMode = editorMode === EditorMode.View;
-
-  return (
-    <>
-      {isViewMode && (
-        <>
-          {pageContainer.isAbleToShowPageReactionButtons && <PageReactionButtons appContainer={appContainer} pageContainer={pageContainer} />}
-          {pageContainer.isAbleToShowPageManagement && <PageManagement isCompactMode={isCompactMode} />}
-        </>
-      )}
-    </>
-  );
-});
-
-/**
- * Wrapper component for using unstated
- */
-const SubnavButtonsWrapper = withUnstatedContainers(SubnavButtons, [AppContainer, PageContainer]);
-
-
-SubnavButtons.propTypes = {
-  appContainer: PropTypes.instanceOf(AppContainer).isRequired,
-  pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
-
-  isCompactMode: PropTypes.bool,
-};
-
-export default SubnavButtonsWrapper;

+ 1 - 0
packages/app/src/components/Sidebar/SidebarContents.tsx

@@ -20,6 +20,7 @@ const SidebarContents: FC<Props> = (props: Props) => {
       break;
     case SidebarContentsType.TREE:
       Contents = PageTree;
+      break;
     case SidebarContentsType.TAG:
       Contents = Tag;
       break;

+ 3 - 2
packages/app/src/migrations/20210921173042-add-is-trashed-field.js

@@ -1,10 +1,10 @@
 import mongoose from 'mongoose';
 
-import { getMongoUri, mongoOptions } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
+import getPageModel from '~/server/models/page';
 
 const logger = loggerFactory('growi:migrate:add-column-is-trashed');
-const Page = require('~/server/models/page')();
 
 const LIMIT = 1000;
 
@@ -22,6 +22,7 @@ module.exports = {
   async up(db) {
     logger.info('Apply migration');
     mongoose.connect(getMongoUri(), mongoOptions);
+    const Page = getModelSafely('Page') || getPageModel();
 
     let updateDeletedPageIds = [];
 

+ 2 - 16
packages/app/src/server/models/page.ts

@@ -6,7 +6,6 @@ import mongoose, {
 import mongoosePaginate from 'mongoose-paginate-v2';
 import uniqueValidator from 'mongoose-unique-validator';
 import nodePath from 'path';
-import RE2 from 're2';
 
 import { getOrCreateModel, pagePathUtils } from '@growi/core';
 import loggerFactory from '../../utils/logger';
@@ -113,19 +112,6 @@ const hasSlash = (str: string): boolean => {
   return str.includes('/');
 };
 
-/*
- * Generate RE2 instance for one level lower path
- */
-const generateChildrenRE2 = (path: string): RE2 => {
-  // https://regex101.com/r/laJGzj/1
-  // ex. /any_level1
-  if (isTopPage(path)) return new RE2(/^\/[^/]+$/);
-
-  // https://regex101.com/r/mrDJrx/1
-  // ex. /parent/any_child OR /any_level1
-  return new RE2(`^${path}(\\/[^/]+)\\/?$`);
-};
-
 /*
  * Generate RegExp instance for one level lower path
  */
@@ -300,8 +286,8 @@ schema.statics.findChildrenByParentPathOrIdAndViewer = async function(parentPath
   let queryBuilder: PageQueryBuilder;
   if (hasSlash(parentPathOrId)) {
     const path = parentPathOrId;
-    const regexp = generateChildrenRE2(path);
-    queryBuilder = new PageQueryBuilder(this.find({ path: { $regex: regexp.source } }), true);
+    const regexp = generateChildrenRegExp(path);
+    queryBuilder = new PageQueryBuilder(this.find({ path: { $regex: regexp } }), true);
   }
   else {
     const parentId = parentPathOrId;