1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-04 00:20:07 +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:
Michael An
2024-11-22 22:37:29 +08:00
committed by GitHub
parent 3a90f736dd
commit 187b5df97e
2 changed files with 25 additions and 14 deletions

View File

@@ -168,6 +168,11 @@ class PageItem extends Component {
};
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));
};

View File

@@ -4,7 +4,7 @@ import classNames from 'classnames';
import { DropTarget, DragLayer } from 'react-dnd';
import html5DragDropContext from './html5DragDropContext';
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';
@@ -28,33 +28,39 @@ class WikiNav extends Component {
constructor(props) {
super(props);
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) => {
return this.idFoldedStatusMap[pageId];
};
toggleExpand = (pageId) => {
const idFoldedStatusMap = this.getFoldedFromLocal();
const idFoldedStatusMap = this.idFoldedStatusMap;
if (idFoldedStatusMap[pageId]) {
delete idFoldedStatusMap[pageId];
} else {
idFoldedStatusMap[pageId] = true;
}
this.saveFoldedToLocal(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) => {
this.folderClassNameCache = name;
};
@@ -103,7 +109,7 @@ class WikiNav extends Component {
let id_page_map = {};
pages.forEach(page => id_page_map[page.id] = page);
return (
<div className='wiki-nav-body'>
<div className='wiki-nav-body' onScroll={this.onWikiNavBodyScroll} ref={this.wikiNavBodyRef}>
{navigation.map((item, index) => {
return this.renderPage(item, index, pages.length, isOnlyOnePage, id_page_map, layerDragProps);
})}