import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import MediaQuery from 'react-responsive'; import { gettext, storages } from '../../utils/constants'; import MylibRepoListItem from './mylib-repo-list-item'; import LibsMobileThead from '../../components/libs-mobile-thead'; import { LIST_MODE } from '../../components/dir-view-mode/constants'; import ContextMenu from '../../components/context-menu/context-menu'; import { Utils } from '../../utils/utils'; import { hideMenu, handleContextClick } from '../../components/context-menu/actions'; import NewLibrary from './new-library'; const propTypes = { sortBy: PropTypes.string.isRequired, sortOrder: PropTypes.string.isRequired, repoList: PropTypes.array.isRequired, sortRepoList: PropTypes.func.isRequired, onRenameRepo: PropTypes.func.isRequired, onDeleteRepo: PropTypes.func.isRequired, onTransferRepo: PropTypes.func.isRequired, onMonitorRepo: PropTypes.func.isRequired, inAllLibs: PropTypes.bool, // for 'My Libraries' in 'Files' page currentViewMode: PropTypes.string, }; class MylibRepoListView extends React.Component { constructor(props) { super(props); this.state = { isItemFreezed: false, }; this.repoItems = []; } onFreezedItem = () => { this.setState({ isItemFreezed: true }); }; onUnfreezedItem = () => { this.setState({ isItemFreezed: false }); }; sortByName = (e) => { e.preventDefault(); const sortBy = 'name'; const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc'; this.props.sortRepoList(sortBy, sortOrder); }; sortByTime = (e) => { e.preventDefault(); const sortBy = 'time'; const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc'; this.props.sortRepoList(sortBy, sortOrder); }; sortBySize = (e) => { e.preventDefault(); const sortBy = 'size'; const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc'; this.props.sortRepoList(sortBy, sortOrder); }; onContextMenu = (event, repo) => { event.preventDefault(); const id = 'mylib-repo-item-menu'; const menuList = Utils.getRepoOperationList(repo); handleContextClick(event, id, menuList, repo); }; setRepoItemRef = (index) => item => { this.repoItems[index] = item; }; getRepoIndex = (repo) => { return this.props.repoList.findIndex(item => { return item.repo_id === repo.repo_id; }); }; onMenuItemClick = (operation, currentObject) => { const index = this.getRepoIndex(currentObject); this.repoItems[index].onMenuItemClick(operation); hideMenu(); }; renderRepoListView = () => { return ( {this.props.repoList.map((item, index) => { return ( ); })} ); }; renderPCUI = () => { const { inAllLibs, currentViewMode = LIST_MODE } = this.props; const showStorageBackend = !inAllLibs && storages.length > 0; const sortIcon = this.props.sortOrder === 'asc' ? : ; return currentViewMode == LIST_MODE ? ( <> {showStorageBackend ? : null} {this.renderRepoListView()}
{gettext('Library Type')} {gettext('Name')} {this.props.sortBy === 'name' && sortIcon} {gettext('Actions')} {gettext('Size')} {this.props.sortBy === 'size' && sortIcon} {gettext('Storage Backend')} {gettext('Last Update')} {this.props.sortBy === 'time' && sortIcon}
{!inAllLibs && } ) : (
{this.renderRepoListView()}
); }; renderMobileUI = () => { const { inAllLibs } = this.props; return ( {this.renderRepoListView()}
); }; render() { return ( {this.renderPCUI()} {this.renderMobileUI()} ); } } MylibRepoListView.propTypes = propTypes; export default MylibRepoListView;