diff --git a/frontend/src/app.js b/frontend/src/app.js
index 5e402e174f..614351222f 100644
--- a/frontend/src/app.js
+++ b/frontend/src/app.js
@@ -11,6 +11,10 @@ import FilesActivities from './pages/dashboard/files-activities';
import Starred from './pages/starred/starred';
import LinkedDevices from './pages/linked-devices/linked-devices';
import editUtilties from './utils/editor-utilties';
+import ShareAdminLibraries from './pages/share-admin/libraries';
+import ShareAdminFolders from './pages/share-admin/folders';
+import ShareAdminShareLinks from './pages/share-admin/share-links';
+import ShareAdminUploadLinks from './pages/share-admin/upload-links';
import 'seafile-ui';
import './assets/css/fa-solid.css';
@@ -88,6 +92,10 @@ class App extends Component {
+
+
+
+
diff --git a/frontend/src/components/main-side-nav.js b/frontend/src/components/main-side-nav.js
index 674079c687..bf650d8cc1 100644
--- a/frontend/src/components/main-side-nav.js
+++ b/frontend/src/components/main-side-nav.js
@@ -95,22 +95,22 @@ class MainSideNav extends React.Component {
return (
);
diff --git a/frontend/src/pages/share-admin/folders.js b/frontend/src/pages/share-admin/folders.js
new file mode 100644
index 0000000000..6c2120cc08
--- /dev/null
+++ b/frontend/src/pages/share-admin/folders.js
@@ -0,0 +1,296 @@
+import React, { Component } from 'react';
+import { seafileAPI } from '../../utils/seafile-api';
+import { Utils } from '../../utils/utils';
+import { gettext, siteRoot, loginUrl, isPro } from '../../utils/constants';
+
+class Content extends Component {
+
+ render() {
+ const {loading, errorMsg, items} = this.props.data;
+
+ if (loading) {
+ return ;
+ } else if (errorMsg) {
+ return {errorMsg}
;
+ } else {
+ const emptyTip = (
+
+
{gettext('You have not shared any folders')}
+
{gettext("You can share a single folder with a registered user if you don't want to share a whole library.")}
+
+ );
+
+ const table = (
+
+ );
+
+ return items.length ? table : emptyTip;
+ }
+ }
+}
+
+class TableBody extends Component {
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ items: this.props.items
+ };
+ }
+
+ componentDidMount() {
+ document.addEventListener('click', this.clickDocument);
+ }
+
+ clickDocument(e) {
+ // TODO: click 'outside' to hide `