mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-06 01:12:03 +00:00
Change wiki nav UI (#7085)
* 02 fix page scroll when move or delete page * 01 init wiki pages all folded
This commit is contained in:
@@ -168,6 +168,11 @@ class PageItem extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
onAddNewPage = (newPage) => {
|
onAddNewPage = (newPage) => {
|
||||||
|
const { page } = this.props;
|
||||||
|
const folded = this.props.getFoldState(page.id);
|
||||||
|
if (folded) {
|
||||||
|
this.props.toggleExpand(page.id);
|
||||||
|
}
|
||||||
this.props.addPageInside(Object.assign({ parentPageId: this.props.page.id }, newPage));
|
this.props.addPageInside(Object.assign({ parentPageId: this.props.page.id }, newPage));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@ import classNames from 'classnames';
|
|||||||
import { DropTarget, DragLayer } from 'react-dnd';
|
import { DropTarget, DragLayer } from 'react-dnd';
|
||||||
import html5DragDropContext from './html5DragDropContext';
|
import html5DragDropContext from './html5DragDropContext';
|
||||||
import DraggedPageItem from './pages/dragged-page-item';
|
import DraggedPageItem from './pages/dragged-page-item';
|
||||||
import { repoID, gettext, wikiPermission } from '../../../utils/constants';
|
import { gettext, wikiPermission } from '../../../utils/constants';
|
||||||
|
|
||||||
import '../css/wiki-nav.css';
|
import '../css/wiki-nav.css';
|
||||||
|
|
||||||
@@ -28,33 +28,39 @@ class WikiNav extends Component {
|
|||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.folderClassNameCache = '';
|
this.folderClassNameCache = '';
|
||||||
this.idFoldedStatusMap = this.getFoldedFromLocal();
|
this.lastScrollTop = 0;
|
||||||
|
this.wikiNavBodyRef = React.createRef();
|
||||||
|
// set init pages are all folded
|
||||||
|
this.idFoldedStatusMap = {};
|
||||||
|
props.pages.forEach((page) => {
|
||||||
|
this.idFoldedStatusMap[page.id] = true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getFoldedFromLocal = () => {
|
|
||||||
const items = window.localStorage.getItem(`wiki-folded-${repoID}`);
|
|
||||||
return items ? JSON.parse(items) : {};
|
|
||||||
};
|
|
||||||
|
|
||||||
saveFoldedToLocal = (items) => {
|
|
||||||
window.localStorage.setItem(`wiki-folded-${repoID}`, JSON.stringify(items));
|
|
||||||
};
|
|
||||||
|
|
||||||
getFoldState = (pageId) => {
|
getFoldState = (pageId) => {
|
||||||
return this.idFoldedStatusMap[pageId];
|
return this.idFoldedStatusMap[pageId];
|
||||||
};
|
};
|
||||||
|
|
||||||
toggleExpand = (pageId) => {
|
toggleExpand = (pageId) => {
|
||||||
const idFoldedStatusMap = this.getFoldedFromLocal();
|
const idFoldedStatusMap = this.idFoldedStatusMap;
|
||||||
if (idFoldedStatusMap[pageId]) {
|
if (idFoldedStatusMap[pageId]) {
|
||||||
delete idFoldedStatusMap[pageId];
|
delete idFoldedStatusMap[pageId];
|
||||||
} else {
|
} else {
|
||||||
idFoldedStatusMap[pageId] = true;
|
idFoldedStatusMap[pageId] = true;
|
||||||
}
|
}
|
||||||
this.saveFoldedToLocal(idFoldedStatusMap);
|
|
||||||
this.idFoldedStatusMap = idFoldedStatusMap;
|
this.idFoldedStatusMap = idFoldedStatusMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
componentDidUpdate(prevProps) {
|
||||||
|
if (prevProps.navigation !== this.props.navigation) {
|
||||||
|
this.wikiNavBodyRef.current.scrollTop = this.lastScrollTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onWikiNavBodyScroll = (e) => {
|
||||||
|
this.lastScrollTop = e.target.scrollTop;
|
||||||
|
};
|
||||||
|
|
||||||
setClassName = (name) => {
|
setClassName = (name) => {
|
||||||
this.folderClassNameCache = name;
|
this.folderClassNameCache = name;
|
||||||
};
|
};
|
||||||
@@ -103,7 +109,7 @@ class WikiNav extends Component {
|
|||||||
let id_page_map = {};
|
let id_page_map = {};
|
||||||
pages.forEach(page => id_page_map[page.id] = page);
|
pages.forEach(page => id_page_map[page.id] = page);
|
||||||
return (
|
return (
|
||||||
<div className='wiki-nav-body'>
|
<div className='wiki-nav-body' onScroll={this.onWikiNavBodyScroll} ref={this.wikiNavBodyRef}>
|
||||||
{navigation.map((item, index) => {
|
{navigation.map((item, index) => {
|
||||||
return this.renderPage(item, index, pages.length, isOnlyOnePage, id_page_map, layerDragProps);
|
return this.renderPage(item, index, pages.length, isOnlyOnePage, id_page_map, layerDragProps);
|
||||||
})}
|
})}
|
||||||
|
Reference in New Issue
Block a user