import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import cookie from 'react-cookies'; import Repo from '../../models/repo'; import { gettext } from '../../utils/constants'; import { seafileAPI } from '../../utils/seafile-api'; import { Utils } from '../../utils/utils'; import ViewModes from '../../components/view-modes'; import ReposSortMenu from '../../components/sort-menu'; import SortOptionsDialog from '../../components/dialog/sort-options'; import { LIST_MODE } from '../../components/dir-view-mode/constants'; import Content from './content'; class SharedLibraries extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', items: [], currentViewMode: localStorage.getItem('sf_repo_list_view_mode') || LIST_MODE, sortBy: cookie.load('seafile-repo-dir-sort-by') || 'name', // 'name' or 'time' or 'size' sortOrder: cookie.load('seafile-repo-dir-sort-order') || 'asc', // 'asc' or 'desc' isSortOptionsDialogOpen: false }; } componentDidMount() { if (!this.props.repoList) { seafileAPI.listRepos({ type: 'shared' }).then((res) => { let repoList = res.data.repos.map((item) => { return new Repo(item); }); this.setState({ loading: false, items: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder) }); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) }); }); } else { this.setState({ loading: false, items: this.props.repoList }); } } sortItems = (sortBy, sortOrder) => { cookie.save('seafile-repo-dir-sort-by', sortBy); cookie.save('seafile-repo-dir-sort-order', sortOrder); this.setState({ sortBy: sortBy, sortOrder: sortOrder, items: Utils.sortRepos(this.state.items, sortBy, sortOrder) }); }; toggleSortOptionsDialog = () => { this.setState({ isSortOptionsDialogOpen: !this.state.isSortOptionsDialogOpen }); }; onMonitorRepo = (repo, monitored) => { let items = this.state.items.map(item => { if (item.repo_id === repo.repo_id) { item.monitored = monitored; } return item; }); this.setState({ items: items }); }; renderContent = (currentViewMode) => { const { inAllLibs = false, repoList } = this.props; // inAllLibs: in 'All Libs'('Files') page const { items } = this.state; return ( ); }; renderSortIconInMobile = () => { return ( <> {(!Utils.isDesktop() && this.state.items.length > 0) && } > ); }; switchViewMode = (newMode) => { this.setState({ currentViewMode: newMode }, () => { localStorage.setItem('sf_repo_list_view_mode', newMode); }); }; onSelectSortOption = (sortOption) => { const [sortBy, sortOrder] = sortOption.value.split('-'); this.setState({ sortBy, sortOrder }, () => { this.sortItems(sortBy, sortOrder); }); }; render() { const { inAllLibs = false, currentViewMode: propCurrentViewMode } = this.props; // inAllLibs: in 'All Libs'('Files') page const { sortBy, sortOrder, currentViewMode: stateCurrentViewMode } = this.state; const currentViewMode = inAllLibs ? propCurrentViewMode : stateCurrentViewMode; return ( {inAllLibs ? ( <> {gettext('Shared with me')} {this.renderSortIconInMobile()} {this.renderContent(currentViewMode)} > ) : ( {gettext('Shared with me')} {Utils.isDesktop() && ( )} {this.renderSortIconInMobile()} {this.renderContent(currentViewMode)} )} {this.state.isSortOptionsDialogOpen && } ); } } SharedLibraries.propTypes = { currentViewMode: PropTypes.string, inAllLibs: PropTypes.bool, repoList: PropTypes.array, }; export default SharedLibraries;