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:
@@ -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>
|
||||||
);
|
);
|
||||||
|
@@ -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 />;
|
||||||
|
@@ -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>
|
||||||
</>
|
</>
|
||||||
|
@@ -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>
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -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>
|
||||||
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user