1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 15:38:15 +00:00

01 notification more icon (#6551)

02 change trash mobile

03 mobile menu
This commit is contained in:
Michael An
2024-08-14 12:20:57 +08:00
committed by GitHub
parent a85f482d4a
commit 16186b2a8b
7 changed files with 30 additions and 9 deletions

View File

@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { navigate } from '@gatsbyjs/reach-router'; import { navigate } from '@gatsbyjs/reach-router';
import { Modal, ModalHeader, ModalBody } from 'reactstrap'; import { Modal, ModalHeader, ModalBody } from 'reactstrap';
import moment from 'moment'; import moment from 'moment';
import { Utils } from '../../utils/utils'; import { Utils, isMobile } from '../../utils/utils';
import { gettext, siteRoot, enableUserCleanTrash, username } from '../../utils/constants'; import { gettext, siteRoot, enableUserCleanTrash, username } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { seafileAPI } from '../../utils/seafile-api';
import { repotrashAPI } from '../../utils/repo-trash-api'; import { repotrashAPI } from '../../utils/repo-trash-api';
@@ -338,7 +338,7 @@ class Item extends React.Component {
<td title={moment(item.deleted_time).format('LLLL')}>{moment(item.deleted_time).format('YYYY-MM-DD')}</td> <td title={moment(item.deleted_time).format('LLLL')}>{moment(item.deleted_time).format('YYYY-MM-DD')}</td>
<td></td> <td></td>
<td> <td>
<a href="#" className={isIconShown ? '' : 'invisible'} onClick={this.restoreItem} role="button">{gettext('Restore')}</a> <a href="#" className={(isIconShown || isMobile) ? '' : 'invisible'} onClick={this.restoreItem} role="button">{gettext('Restore')}</a>
</td> </td>
</tr> </tr>
) : ( ) : (
@@ -349,7 +349,7 @@ class Item extends React.Component {
<td title={moment(item.deleted_time).format('LLLL')}>{moment(item.deleted_time).format('YYYY-MM-DD')}</td> <td title={moment(item.deleted_time).format('LLLL')}>{moment(item.deleted_time).format('YYYY-MM-DD')}</td>
<td>{Utils.bytesToSize(item.size)}</td> <td>{Utils.bytesToSize(item.size)}</td>
<td> <td>
<a href="#" className={isIconShown ? '' : 'invisible'} onClick={this.restoreItem} role="button">{gettext('Restore')}</a> <a href="#" className={(isIconShown || isMobile) ? '' : 'invisible'} onClick={this.restoreItem} role="button">{gettext('Restore')}</a>
</td> </td>
</tr> </tr>
); );

View File

@@ -16,12 +16,14 @@ const propTypes = {
onMenuItemClick: PropTypes.func.isRequired, onMenuItemClick: PropTypes.func.isRequired,
freezeItem: PropTypes.func, freezeItem: PropTypes.func,
unfreezeItem: PropTypes.func, unfreezeItem: PropTypes.func,
menuStyle: PropTypes.object,
}; };
class ItemDropdownMenu extends React.Component { class ItemDropdownMenu extends React.Component {
static defaultProps = { static defaultProps = {
isHandleContextMenuEvent: true, isHandleContextMenuEvent: true,
menuStyle: {},
toggleClass: 'sf3-font-more sf3-font' toggleClass: 'sf3-font-more sf3-font'
}; };
@@ -109,7 +111,7 @@ class ItemDropdownMenu extends React.Component {
render() { render() {
let menuList = this.state.menuList; let menuList = this.state.menuList;
let { toggleClass, toggleChildren, tagName } = this.props; let { toggleClass, toggleChildren, tagName, menuStyle } = this.props;
toggleClass = 'sf-dropdown-toggle ' + toggleClass; toggleClass = 'sf-dropdown-toggle ' + toggleClass;
if (!menuList.length) { if (!menuList.length) {
@@ -160,7 +162,7 @@ class ItemDropdownMenu extends React.Component {
// onClick={this.onDropdownToggleClick} // onClick={this.onDropdownToggleClick}
/> />
<ModalPortal> <ModalPortal>
<DropdownMenu> <DropdownMenu style={menuStyle}>
{menuList.map((menuItem, index) => { {menuList.map((menuItem, index) => {
if (menuItem === 'Divider') { if (menuItem === 'Divider') {
return <DropdownItem key={index} divider />; return <DropdownItem key={index} divider />;

View File

@@ -2,6 +2,7 @@ import React, { useCallback, useMemo, useState } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import classnames from 'classnames'; import classnames from 'classnames';
import ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu'; import ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu';
import { isMobile } from '../../utils/utils';
import './index.css'; import './index.css';
@@ -63,6 +64,7 @@ const TreeSection = ({ title, children, moreKey, moreOperations, moreOperationCl
unfreezeItem={unfreezeItem} unfreezeItem={unfreezeItem}
getMenuList={() => validMoreOperations} getMenuList={() => validMoreOperations}
onMenuItemClick={moreOperationClick} onMenuItemClick={moreOperationClick}
menuStyle={isMobile ? { zIndex: 1050 } : {}}
/> />
</div> </div>
</> </>

View File

@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { permission } from '../../utils/constants'; import { permission } from '../../utils/constants';
import TextTranslation from '../../utils/text-translation'; import TextTranslation from '../../utils/text-translation';
import ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu'; import ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu';
import { Utils } from '../../utils/utils'; import { Utils, isMobile } from '../../utils/utils';
const LEFT_INDENT = 20; const LEFT_INDENT = 20;
@@ -325,6 +325,7 @@ class TreeNodeView extends React.Component {
onMenuItemClick={this.onMenuItemClick} onMenuItemClick={this.onMenuItemClick}
freezeItem={this.props.freezeItem} freezeItem={this.props.freezeItem}
unfreezeItem={this.unfreezeItem} unfreezeItem={this.unfreezeItem}
menuStyle={isMobile ? { zIndex: 1050 } : {}}
/> />
)} )}
</div> </div>

View File

@@ -42,3 +42,9 @@
color: #000; color: #000;
background: #dfdfdf; background: #dfdfdf;
} }
@media (max-width: 768px) {
.trash-dialog .modal-header .trash-dialog-old-page {
font-size: 14px;
}
}

View File

@@ -5,9 +5,10 @@ import { gettext } from '../../../utils/constants';
import Icon from '../../../components/icon'; import Icon from '../../../components/icon';
import ItemDropdownMenu from '../../../components/dropdown-menu/item-dropdown-menu'; import ItemDropdownMenu from '../../../components/dropdown-menu/item-dropdown-menu';
import NameDialog from '../name-dialog'; import NameDialog from '../name-dialog';
import { Utils, isMobile } from '../../../utils/utils';
import './index.css'; import './index.css';
import { Utils } from '../../../utils/utils';
const ViewItem = ({ const ViewItem = ({
canDelete, canDelete,
@@ -23,14 +24,17 @@ const ViewItem = ({
const [freeze, setFreeze] = useState(false); const [freeze, setFreeze] = useState(false);
const [isShowRenameDialog, setRenameDialogShow] = useState(false); const [isShowRenameDialog, setRenameDialogShow] = useState(false);
const [isDropShow, setDropShow] = useState(false); const [isDropShow, setDropShow] = useState(false);
const canUpdate = useMemo(() => { const canUpdate = useMemo(() => {
if (userPerm !== 'rw' && userPerm !== 'admin') return false; if (userPerm !== 'rw' && userPerm !== 'admin') return false;
return true; return true;
}, [userPerm]); }, [userPerm]);
const canDrop = useMemo(() => { const canDrop = useMemo(() => {
if (Utils.isIEBrowser() || !canUpdate) return false; if (Utils.isIEBrowser() || !canUpdate) return false;
return true; return true;
}, [canUpdate]); }, [canUpdate]);
const operations = useMemo(() => { const operations = useMemo(() => {
if (!canUpdate) return []; if (!canUpdate) return [];
let value = [ let value = [
@@ -159,6 +163,7 @@ const ViewItem = ({
unfreezeItem={unfreezeItem} unfreezeItem={unfreezeItem}
getMenuList={() => operations} getMenuList={() => operations}
onMenuItemClick={operationClick} onMenuItemClick={operationClick}
menuStyle={isMobile ? { zIndex: 1050 } : {}}
/> />
)} )}
</div> </div>

View File

@@ -104,8 +104,13 @@ class UserNotificationsDialog extends React.Component {
return ( return (
<div className="notification-header-close"> <div className="notification-header-close">
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleDropDownMenu}> <Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleDropDownMenu}>
<DropdownToggle tag="span" data-toggle="dropdown" aria-expanded={this.state.isItemMenuShow} className="notification-dropdown-toggle"> <DropdownToggle
<span className="sf3-font sf3-font-more-level item-dropdown-icon"></span> tag="span"
data-toggle="dropdown"
aria-expanded={this.state.isItemMenuShow}
className="notification-dropdown-toggle"
>
<span className="sf3-font sf3-font-more item-dropdown-icon"></span>
</DropdownToggle> </DropdownToggle>
<DropdownMenu right={true} className="dtable-dropdown-menu large"> <DropdownMenu right={true} className="dtable-dropdown-menu large">
<DropdownItem onClick={this.markAllRead}>{gettext('Mark all read')}</DropdownItem> <DropdownItem onClick={this.markAllRead}>{gettext('Mark all read')}</DropdownItem>