Răsfoiți Sursa

set 'page edited' event for socket.io

Yuki Takei 7 ani în urmă
părinte
comite
b33d73cc41
2 a modificat fișierele cu 28 adăugiri și 10 ștergeri
  1. 7 3
      resource/js/app.js
  2. 21 7
      resource/js/components/PageStatusAlert.jsx

+ 7 - 3
resource/js/app.js

@@ -193,6 +193,11 @@ const saveWithShortcutSuccessHandler = function(page) {
     const updateEditorValue = (editorMode !== 'hackmd');
     const updateEditorValue = (editorMode !== 'hackmd');
     componentInstances.pageEditorByHackmd.setMarkdown(page.revision.body, updateEditorValue);
     componentInstances.pageEditorByHackmd.setMarkdown(page.revision.body, updateEditorValue);
   }
   }
+  // set revision id to PageStatusAlert
+  const pageStatusAlert = componentInstances.pageStatusAlert;
+  if (componentInstances.pageStatusAlert != null) {
+    pageStatusAlert.initRevisionId(pageRevisionId);
+  }
 };
 };
 
 
 const errorHandler = function(error) {
 const errorHandler = function(error) {
@@ -382,7 +387,7 @@ if (pageStatusAlertElem) {
               pageStatusAlert = elem.getWrappedInstance();
               pageStatusAlert = elem.getWrappedInstance();
             }
             }
           }}
           }}
-          pageRevisionId={pageRevisionId} />
+          revisionId={pageRevisionId} />
     </I18nextProvider>,
     </I18nextProvider>,
     pageStatusAlertElem
     pageStatusAlertElem
   );
   );
@@ -425,10 +430,9 @@ if (customHeaderEditorElem != null) {
 const socket = io();
 const socket = io();
 socket.on('page edited', function(data) {
 socket.on('page edited', function(data) {
   if (data.page.path == pagePath) {
   if (data.page.path == pagePath) {
-    console.log(data);
     const pageStatusAlert = componentInstances.pageStatusAlert;
     const pageStatusAlert = componentInstances.pageStatusAlert;
     if (pageStatusAlert != null) {
     if (pageStatusAlert != null) {
-      pageStatusAlert.setPageRevisionId(data.page._id.toString());
+      pageStatusAlert.setLatestRevisionId(data.page._id.toString());
       pageStatusAlert.setLastUpdateUsername(data.user.name);
       pageStatusAlert.setLastUpdateUsername(data.user.name);
     }
     }
   }
   }

+ 21 - 7
resource/js/components/PageStatusAlert.jsx

@@ -17,13 +17,21 @@ class PageStatusAlert extends React.Component {
     super(props);
     super(props);
 
 
     this.state = {
     this.state = {
-      pageRevisionId: this.props.pageRevisionId,
+      revisionId: this.props.revisionId,
+      latestRevisionId: this.props.revisionId,
       lastUpdateUsername: undefined,
       lastUpdateUsername: undefined,
     };
     };
   }
   }
 
 
-  setPageRevisionId(pageRevisionId) {
-    this.setState({pageRevisionId});
+  initRevisionId(revisionId) {
+    this.setState({
+      revisionId,
+      latestRevisionId: revisionId,
+    });
+  }
+
+  setLatestRevisionId(revisionId) {
+    this.setState({latestRevisionId: revisionId});
   }
   }
 
 
   setLastUpdateUsername(lastUpdateUsername) {
   setLastUpdateUsername(lastUpdateUsername) {
@@ -35,10 +43,15 @@ class PageStatusAlert extends React.Component {
     const label1 = t('edited this page');
     const label1 = t('edited this page');
     const label2 = t('Load latest');
     const label2 = t('Load latest');
 
 
+    const isShown = this.state.revisionId !== this.state.latestRevisionId;
+    const style = {
+      display: isShown ? 'block' : 'none'
+    };
+
     return (
     return (
-      <div className="myadmin-alert alert-warning myadmin-alert-bottom alertbottom2">
-        <i className="icon-fw icon-bulb"></i><span>{this.state.lastUpdateUsername}</span>
-        {label1}
+      <div className="myadmin-alert alert-warning myadmin-alert-bottom alertbottom2" style={style}>
+        <i className="icon-fw icon-bulb"></i>
+        <span>{this.state.lastUpdateUsername}</span> {label1}&nbsp;
         <a href="javascript:location.reload();">
         <a href="javascript:location.reload();">
           <i className="fa fa-angle-double-right"></i> {label2}
           <i className="fa fa-angle-double-right"></i> {label2}
         </a>
         </a>
@@ -50,7 +63,8 @@ class PageStatusAlert extends React.Component {
 PageStatusAlert.propTypes = {
 PageStatusAlert.propTypes = {
   t: PropTypes.func.isRequired,               // i18next
   t: PropTypes.func.isRequired,               // i18next
   crowi: PropTypes.object.isRequired,
   crowi: PropTypes.object.isRequired,
-  pageRevisionId: PropTypes.string,
+  revisionId: PropTypes.string,
+  latestRevisionId: PropTypes.string,
 };
 };
 
 
 PageStatusAlert.defaultProps = {
 PageStatusAlert.defaultProps = {