1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-10-22 03:16:34 +00:00

optimize import page ui (#8307)

* optimize import page ui

* update

* optimize

* optimize

---------

Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
Co-authored-by: Michael An <1822852997@qq.com>
This commit is contained in:
awu0403
2025-10-16 11:50:11 +08:00
committed by GitHub
parent a0222fd147
commit 8ee3550e27
3 changed files with 81 additions and 9 deletions

View File

@@ -223,6 +223,7 @@
.wiki-nav .page-operation-dropdown .page-operation-dropdown-menu { .wiki-nav .page-operation-dropdown .page-operation-dropdown-menu {
margin-left: -15px; margin-left: -15px;
margin-top: 4px; margin-top: 4px;
overflow-y: visible !important;
} }
.page-operation-dropdown-menu .divider { .page-operation-dropdown-menu .divider {

View File

@@ -23,6 +23,9 @@ export default class PageDropdownMenu extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.pageNameMap = this.calculateNameMap(); this.pageNameMap = this.calculateNameMap();
this.state = {
isImportPageMenuShown: false,
};
} }
calculateNameMap = () => { calculateNameMap = () => {
@@ -33,6 +36,20 @@ export default class PageDropdownMenu extends Component {
}, {}); }, {});
}; };
showImportPageMenu = (e) => {
if (e) e.stopPropagation();
if (!this.state.isImportPageMenuShown) {
this.setState({ isImportPageMenuShown: true });
}
};
hideImportPageMenu = (e) => {
if (e) e.stopPropagation();
if (this.state.isImportPageMenuShown) {
this.setState({ isImportPageMenuShown: false });
}
};
onDropdownToggle = (evt) => { onDropdownToggle = (evt) => {
evt.stopPropagation(); evt.stopPropagation();
this.props.toggle(); this.props.toggle();
@@ -61,11 +78,11 @@ export default class PageDropdownMenu extends Component {
this.props.duplicatePage({ from_page_id: page.id }, () => {}, this.duplicatePageFailure); this.props.duplicatePage({ from_page_id: page.id }, () => {}, this.duplicatePageFailure);
}; };
importPage = () => { importPage = (suffix) => {
const { page } = this.props; const { page } = this.props;
const fileInput = document.createElement('input'); const fileInput = document.createElement('input');
fileInput.type = 'file'; fileInput.type = 'file';
fileInput.accept = '.docx,.md'; fileInput.accept = suffix;
fileInput.style.display = 'none'; fileInput.style.display = 'none';
fileInput.addEventListener('change', (e) => { fileInput.addEventListener('change', (e) => {
@@ -148,7 +165,28 @@ export default class PageDropdownMenu extends Component {
{this.renderItem(this.addPageBelow, 'enlarge', gettext('Add page below'))} {this.renderItem(this.addPageBelow, 'enlarge', gettext('Add page below'))}
{this.renderItem(this.duplicatePage, 'copy1', gettext('Duplicate page'))} {this.renderItem(this.duplicatePage, 'copy1', gettext('Duplicate page'))}
{canDeletePage && this.renderItem(this.onDeletePage, 'delete1', gettext('Delete page'))} {canDeletePage && this.renderItem(this.onDeletePage, 'delete1', gettext('Delete page'))}
{this.renderItem(this.importPage, 'import-sdoc', gettext('Import page'))} <Dropdown
direction="right"
className="w-100"
inNavbar={true}
isOpen={this.state.isImportPageMenuShown}
toggle={() => {}}
onMouseEnter={this.showImportPageMenu}
onMouseLeave={this.hideImportPageMenu}
>
<DropdownToggle
tag="span"
className="dropdown-item font-weight-normal rounded-0 d-flex align-items-center pr-2"
onMouseEnter={this.showImportPageMenu}
>
<i className={'sf3-font sf3-font-import-sdoc'} aria-hidden="true" />
{gettext('Import page')}
</DropdownToggle>
<DropdownMenu className="ml-0">
<DropdownItem key="import-docx" onClick={this.importPage.bind(this, '.docx')}>{gettext('Import page from docx')}</DropdownItem>
<DropdownItem key="import-md" onClick={this.importPage.bind(this, '.md')}>{gettext('Import page from Markdown')}</DropdownItem>
</DropdownMenu>
</Dropdown>
<hr className='divider' /> <hr className='divider' />
{this.renderItem(this.handleOpenInNewTab, 'open-in-new-tab', gettext('Open in new tab'))} {this.renderItem(this.handleOpenInNewTab, 'open-in-new-tab', gettext('Open in new tab'))}
</DropdownMenu> </DropdownMenu>

View File

@@ -36,6 +36,7 @@ class WikiNav extends Component {
this.state = { this.state = {
idFoldedStatusMap: {}, // Move idFoldedStatusMap to state idFoldedStatusMap: {}, // Move idFoldedStatusMap to state
isShowOperationDropdown: false, isShowOperationDropdown: false,
isImportPageMenuShown: false,
}; };
this.folderClassNameCache = ''; this.folderClassNameCache = '';
this.lastScrollTop = 0; this.lastScrollTop = 0;
@@ -68,10 +69,24 @@ class WikiNav extends Component {
this.setState({ isShowOperationDropdown: !this.state.isShowOperationDropdown }); this.setState({ isShowOperationDropdown: !this.state.isShowOperationDropdown });
}; };
handleImportPage = () => { showImportPageMenu = (e) => {
if (e) e.stopPropagation();
if (!this.state.isImportPageMenuShown) {
this.setState({ isImportPageMenuShown: true });
}
};
hideImportPageMenu = (e) => {
if (e) e.stopPropagation();
if (this.state.isImportPageMenuShown) {
this.setState({ isImportPageMenuShown: false });
}
};
handleImportPage = (suffix) => {
const fileInput = document.createElement('input'); const fileInput = document.createElement('input');
fileInput.type = 'file'; fileInput.type = 'file';
fileInput.accept = '.docx,.md'; fileInput.accept = suffix;
fileInput.style.display = 'none'; fileInput.style.display = 'none';
fileInput.addEventListener('change', (e) => { fileInput.addEventListener('change', (e) => {
@@ -176,10 +191,28 @@ class WikiNav extends Component {
flip={false} flip={false}
modifiers={[{ name: 'preventOverflow', options: { boundary: document.body } }]} modifiers={[{ name: 'preventOverflow', options: { boundary: document.body } }]}
> >
<DropdownItem onClick={this.handleImportPage}> <Dropdown
<i className="sf3-font sf3-font-import-sdoc" aria-hidden="true" /> direction="right"
<span className="item-text">{gettext('Import page')}</span> className="w-100"
</DropdownItem> inNavbar={true}
isOpen={this.state.isImportPageMenuShown}
toggle={() => {}}
onMouseEnter={this.showImportPageMenu}
onMouseLeave={this.hideImportPageMenu}
>
<DropdownToggle
tag="span"
className="dropdown-item font-weight-normal rounded-0 d-flex align-items-center pr-2"
onMouseEnter={this.showImportPageMenu}
>
<i className={'sf3-font sf3-font-import-sdoc'} aria-hidden="true" />
{gettext('Import page')}
</DropdownToggle>
<DropdownMenu className="ml-0">
<DropdownItem key="import-docx" onClick={this.handleImportPage.bind(this, '.docx')}>{gettext('Import page from docx')}</DropdownItem>
<DropdownItem key="import-md" onClick={this.handleImportPage.bind(this, '.md')}>{gettext('Import page from Markdown')}</DropdownItem>
</DropdownMenu>
</Dropdown>
</DropdownMenu> </DropdownMenu>
</Dropdown> </Dropdown>
</div> </div>