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

download md move to pageManagement from sharelinkManagement

itizawa 5 лет назад
Родитель
Сommit
887362f5bb

+ 0 - 139
src/client/js/components/OutsideShareLinkModal.jsx

@@ -1,139 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-
-import {
-  Modal, ModalHeader, ModalBody,
-} from 'reactstrap';
-
-import { withTranslation } from 'react-i18next';
-
-import { withUnstatedContainers } from './UnstatedUtils';
-
-import AppContainer from '../services/AppContainer';
-import PageContainer from '../services/PageContainer';
-
-import ShareLinkList from './ShareLinkList';
-import ShareLinkForm from './ShareLinkForm';
-
-import { toastSuccess, toastError } from '../util/apiNotification';
-
-class OutsideShareLinkModal extends React.Component {
-
-  constructor() {
-    super();
-    this.state = {
-      shareLinks: [],
-      isOpenShareLinkForm: false,
-    };
-
-    this.toggleShareLinkFormHandler = this.toggleShareLinkFormHandler.bind(this);
-    this.deleteAllLinksButtonHandler = this.deleteAllLinksButtonHandler.bind(this);
-    this.deleteLinkById = this.deleteLinkById.bind(this);
-  }
-
-  componentDidMount() {
-    this.retrieveShareLinks();
-  }
-
-  async retrieveShareLinks() {
-    const { appContainer, pageContainer } = this.props;
-    const { pageId } = pageContainer.state;
-
-    try {
-      const res = await appContainer.apiv3.get('/share-links/', { relatedPage: pageId });
-      const { shareLinksResult } = res.data;
-      this.setState({ shareLinks: shareLinksResult });
-    }
-    catch (err) {
-      toastError(err);
-    }
-
-  }
-
-  toggleShareLinkFormHandler() {
-    this.setState({ isOpenShareLinkForm: !this.state.isOpenShareLinkForm });
-    this.retrieveShareLinks();
-  }
-
-  async deleteAllLinksButtonHandler() {
-    const { t, appContainer, pageContainer } = this.props;
-    const { pageId } = pageContainer.state;
-
-    try {
-      const res = await appContainer.apiv3.delete('/share-links/', { relatedPage: pageId });
-      const count = res.data.n;
-      toastSuccess(t('toaster.remove_share_link', { count }));
-    }
-    catch (err) {
-      toastError(err);
-    }
-
-    this.retrieveShareLinks();
-  }
-
-  async deleteLinkById(shareLinkId) {
-    const { t, appContainer } = this.props;
-
-    try {
-      const res = await appContainer.apiv3Delete(`/share-links/${shareLinkId}`);
-      const { deletedShareLink } = res.data;
-      toastSuccess(t('toaster.remove_share_link_success', { shareLinkId: deletedShareLink._id }));
-    }
-    catch (err) {
-      toastError(err);
-    }
-
-    this.retrieveShareLinks();
-  }
-
-  render() {
-    const { t } = this.props;
-
-    return (
-      <Modal size="xl" isOpen={this.props.isOpen} toggle={this.props.onClose}>
-        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-primary text-light">{t('share_links.Shere this page link to public')}
-        </ModalHeader>
-        <ModalBody>
-          <div className="container">
-            <h3 className="grw-modal-head  d-flex  pb-2">
-              { t('share_links.share_link_list') }
-              <button className="btn btn-danger ml-auto " type="button" onClick={this.deleteAllLinksButtonHandler}>{t('delete_all')}</button>
-            </h3>
-
-            <div>
-              <ShareLinkList
-                shareLinks={this.state.shareLinks}
-                onClickDeleteButton={this.deleteLinkById}
-              />
-              <button
-                className="btn btn-outline-secondary d-block mx-auto px-5 mb-3"
-                type="button"
-                onClick={this.toggleShareLinkFormHandler}
-              >
-                {this.state.isOpenShareLinkForm ? t('Close') : t('New')}
-              </button>
-              {this.state.isOpenShareLinkForm && <ShareLinkForm onCloseForm={this.toggleShareLinkFormHandler} />}
-            </div>
-          </div>
-        </ModalBody>
-      </Modal>
-    );
-  }
-
-}
-
-/**
- * Wrapper component for using unstated
- */
-const ModalControlWrapper = withUnstatedContainers(OutsideShareLinkModal, [AppContainer, PageContainer]);
-
-OutsideShareLinkModal.propTypes = {
-  t: PropTypes.func.isRequired, //  i18next
-  appContainer: PropTypes.instanceOf(AppContainer).isRequired,
-  pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
-
-  isOpen: PropTypes.bool.isRequired,
-  onClose: PropTypes.func.isRequired,
-};
-
-export default withTranslation()(ModalControlWrapper);

+ 38 - 0
src/client/js/components/Page/PageManagement.jsx

@@ -2,6 +2,7 @@ import React, { useState } from 'react';
 import PropTypes from 'prop-types';
 import { UncontrolledTooltip } from 'reactstrap';
 import { withTranslation } from 'react-i18next';
+import urljoin from 'url-join';
 
 import { isTopPage } from '@commons/util/path-utils';
 import { withUnstatedContainers } from '../UnstatedUtils';
@@ -58,6 +59,36 @@ const PageManagement = (props) => {
   }
 
 
+  // TODO GW-2746 bulk export pages
+  // async function getArchivePageData() {
+  //   try {
+  //     const res = await appContainer.apiv3Get('page/count-children-pages', { pageId });
+  //     setTotalPages(res.data.dummy);
+  //   }
+  //   catch (err) {
+  //     setErrorMessage(t('export_bulk.failed_to_count_pages'));
+  //   }
+  // }
+
+  async function exportPageHandler(format) {
+    const { pageId, revisionId } = pageContainer.state;
+    const url = new URL(urljoin(window.location.origin, '_api/v3/page/export', pageId));
+    url.searchParams.append('format', format);
+    url.searchParams.append('revisionId', revisionId);
+    window.location.href = url.href;
+  }
+
+  // TODO GW-2746 create api to bulk export pages
+  // function openArchiveModalHandler() {
+  //   setIsArchiveCreateModalShown(true);
+  //   getArchivePageData();
+  // }
+
+  // TODO GW-2746 create api to bulk export pages
+  // function closeArchiveCreateModalHandler() {
+  //   setIsArchiveCreateModalShown(false);
+  // }
+
   function renderDropdownItemForNotTopPage() {
     return (
       <>
@@ -67,6 +98,13 @@ const PageManagement = (props) => {
         <button className="dropdown-item" type="button" onClick={openPageDuplicateModalHandler}>
           <i className="icon-fw icon-docs"></i> { t('Duplicate') }
         </button>
+        <button type="button" className="dropdown-item" onClick={() => { exportPageHandler('md') }}>
+          <i className="icon-fw icon-cloud-download"></i>{t('export_bulk.export_page_markdown')}
+        </button>
+        {/* TODO GW-2746 create api to bulk export pages */}
+        {/* <button className="dropdown-item" type="button" onClick={openArchiveModalHandler}>
+          <i className="icon-fw"></i>{t('Create Archive Page')}
+        </button> */}
         <div className="dropdown-divider"></div>
       </>
     );

+ 0 - 19
src/client/js/components/Page/PageShareManagement.jsx

@@ -7,7 +7,6 @@ import { withUnstatedContainers } from '../UnstatedUtils';
 
 import AppContainer from '../../services/AppContainer';
 import PageContainer from '../../services/PageContainer';
-import OutsideShareLinkModal from '../OutsideShareLinkModal';
 
 // TODO GW-2746 bulk export pages
 // import ArchiveCreateModal from '../ArchiveCreateModal';
@@ -20,21 +19,12 @@ const PageShareManagement = (props) => {
   const { path, pageId } = pageContainer.state;
   const { currentUser } = appContainer;
 
-  const [isOutsideShareLinkModalShown, setIsOutsideShareLinkModalShown] = useState(false);
 
   // TODO GW-2746 bulk export pages
   // const [isArchiveCreateModalShown, setIsArchiveCreateModalShown] = useState(false);
   // const [totalPages, setTotalPages] = useState(null);
   // const [errorMessage, setErrorMessage] = useState(null);
 
-  function openOutsideShareLinkModalHandler() {
-    setIsOutsideShareLinkModalShown(true);
-  }
-
-  function closeOutsideShareLinkModalHandler() {
-    setIsOutsideShareLinkModalShown(false);
-  }
-
   // TODO GW-2746 bulk export pages
   // async function getArchivePageData() {
   //   try {
@@ -73,11 +63,6 @@ const PageShareManagement = (props) => {
 
     return (
       <>
-        <OutsideShareLinkModal
-          isOpen={isOutsideShareLinkModalShown}
-          onClose={closeOutsideShareLinkModalHandler}
-        />
-
         {/* TODO GW-2746 bulk export pages */}
         {/* <ArchiveCreateModal
           isOpen={isArchiveCreateModalShown}
@@ -126,10 +111,6 @@ const PageShareManagement = (props) => {
     <>
       {currentUser == null ? renderGuestUser() : renderCurrentUser()}
       <div className="dropdown-menu dropdown-menu-right">
-        <button className="dropdown-item" type="button" onClick={openOutsideShareLinkModalHandler}>
-          <i className="icon-fw icon-link"></i>{t('share_links.Shere this page link to public')}
-          <span className="ml-2 badge badge-info badge-pill">{pageContainer.state.shareLinksNumber}</span>
-        </button>
         <button type="button" className="dropdown-item" onClick={() => { exportPageHandler('md') }}>
           <span>{t('export_bulk.export_page_markdown')}</span>
         </button>

+ 1 - 1
src/client/js/components/ShareLink/ShareLink.jsx

@@ -8,7 +8,7 @@ import AppContainer from '../../services/AppContainer';
 import PageContainer from '../../services/PageContainer';
 
 import ShareLinkList from '../ShareLinkList';
-import ShareLinkForm from '../ShareLinkForm';
+import ShareLinkForm from './ShareLinkForm';
 
 import { toastSuccess, toastError } from '../../util/apiNotification';
 

+ 4 - 4
src/client/js/components/ShareLinkForm.jsx → src/client/js/components/ShareLink/ShareLinkForm.jsx

@@ -6,12 +6,12 @@ import dateFnsFormat from 'date-fns/format';
 import parse from 'date-fns/parse';
 
 import { isInteger } from 'core-js/fn/number';
-import { withUnstatedContainers } from './UnstatedUtils';
+import { withUnstatedContainers } from '../UnstatedUtils';
 
-import { toastSuccess, toastError } from '../util/apiNotification';
+import { toastSuccess, toastError } from '../../util/apiNotification';
 
-import AppContainer from '../services/AppContainer';
-import PageContainer from '../services/PageContainer';
+import AppContainer from '../../services/AppContainer';
+import PageContainer from '../../services/PageContainer';
 
 class ShareLinkForm extends React.Component {