import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { gettext, storages} from '../../utils/constants'; import Loading from '../../components/loading'; import TableBody from './table-body'; import ModalPortal from '../../components/modal-portal'; import LibHistorySetting from '../../components/dialog/lib-history-setting-dialog'; import TransferDialog from '../../components/dialog/transfer-dialog'; import ResetEncryptedRepoPasswordDialog from '../../components/dialog/reset-encrypted-repo-password-dialog'; import DeleteRepoDialog from '../../components/dialog/delete-repo-dialog'; const propTypes = { loading: PropTypes.bool.isRequired, errorMsg: PropTypes.string.isRequired, sortBy: PropTypes.string.isRequired, sortOrder: PropTypes.string.isRequired, sortItems: PropTypes.func.isRequired, items: PropTypes.array.isRequired, onRenameRepo: PropTypes.func.isRequired, onDeleteRepo: PropTypes.func.isRequired, onTransferRepo: PropTypes.func.isRequired, onRepoDetails: PropTypes.func.isRequired, onItemClick: PropTypes.func.isRequired }; class Content extends Component { constructor(props) { super(props); this.state = { deleteItemPopupOpen: false, showTransfer: false, showResetEncryptedRepoPassword: false, itemName: '', showHistorySetting: false, showDetails: false, libID: '', libSize: '', libUpdateTime: '' }; } toggleDeleteItemPopup = () => { this.setState({ deleteItemPopupOpen: !this.state.deleteItemPopupOpen }); } showDeleteItemPopup = (data) => { this.toggleDeleteItemPopup(); this.setState({ deleteItemPopupData: data }); } onTransfer = (itemName, itemID) => { this.setState({ showTransfer: !this.state.showTransfer, itemName: itemName, libID: itemID }); } onHistorySetting = (itemName, itemID) => { this.setState({ showHistorySetting: !this.state.showHistorySetting, itemName: itemName, libID: itemID }); } onResetEncryptedRepoPassword = (itemName, itemID) => { this.setState({ showResetEncryptedRepoPassword: !this.state.showResetEncryptedRepoPassword, itemName: itemName, libID: itemID }); } sortByName = (e) => { e.preventDefault(); const sortBy = 'name'; const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc'; this.props.sortItems(sortBy, sortOrder); } sortByTime = (e) => { e.preventDefault(); const sortBy = 'time'; const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc'; this.props.sortItems(sortBy, sortOrder); } render() { const { loading, errorMsg, items, sortBy, sortOrder } = this.props; if (loading) { return ; } else if (errorMsg) { return

{errorMsg}

; } else { const emptyTip = (

{gettext('You have not created any libraries')}

{gettext('You can create a library to organize your files. For example, you can create one for each of your projects. Each library can be synchronized and shared separately.')}

); // sort const sortByName = sortBy == 'name'; const sortByTime = sortBy == 'time'; const sortIcon = sortOrder == 'asc' ? : ; // TODO: test 'storage backend' const showStorageBackend = storages.length > 0; // only for desktop const desktopThead = ( {gettext('Library Type')} {gettext('Name')} {sortByName && sortIcon} {gettext('Actions')} {gettext('Size')} {showStorageBackend ? {gettext('Storage backend')} : null} {gettext('Last Update')} {sortByTime && sortIcon} ); const mobileThead = ( {gettext('Library Type')} {gettext('Sort:')} {gettext('name')} {sortByName && sortIcon} {gettext('last update')} {sortByTime && sortIcon} {gettext('Actions')} ); const table = ( {window.innerWidth >= 768 ? desktopThead : mobileThead}
); const nonEmpty = ( {table} {this.state.deleteItemPopupOpen && ( )} {this.state.showTransfer && } {this.state.showHistorySetting && } {this.state.showResetEncryptedRepoPassword && } ); return items.length ? nonEmpty : emptyTip; } } } Content.propTypes = propTypes; export default Content;