import React from 'react'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import loggerFactory from '@alias/logger'; import DevidedPagePath from '@commons/models/devided-page-path'; import LinkedPagePath from '@commons/models/linked-page-path'; import PagePathHierarchicalLink from '@commons/components/PagePathHierarchicalLink'; import FootstampIcon from '../FootstampIcon'; import { withUnstatedContainers } from '../UnstatedUtils'; import AppContainer from '../../services/AppContainer'; import { toastError } from '../../util/apiNotification'; import FormattedDistanceDate from '../FormattedDistanceDate'; import UserPicture from '../User/UserPicture'; const logger = loggerFactory('growi:History'); class RecentChanges extends React.Component { static propTypes = { t: PropTypes.func.isRequired, // i18next appContainer: PropTypes.instanceOf(AppContainer).isRequired, }; constructor(props) { super(props); this.state = { // TODO: 7092 connect to state // eslint-disable-next-line react/no-unused-state isRecentChangesSidebarSmall: false, }; this.reloadData = this.reloadData.bind(this); } componentWillMount() { this.retrieveSizePreferenceFromLocalStorage(); } async componentDidMount() { this.reloadData(); } async reloadData() { const { appContainer } = this.props; try { await appContainer.retrieveRecentlyUpdated(); } catch (error) { logger.error('failed to save', error); toastError(error, 'Error occurred in updating History'); } } retrieveSizePreferenceFromLocalStorage() { if (window.localStorage.isRecentChangesSidebarSmall === 'true') { this.setState({ // TODO: 7092 connect to state // eslint-disable-next-line react/no-unused-state isRecentChangesSidebarSmall: true, }); } } changeSizeHandler = (e) => { this.setState({ // TODO: 7092 connect to state // eslint-disable-next-line react/no-unused-state isRecentChangesSidebarSmall: e.target.checked, }); window.localStorage.setItem('isRecentChangesSidebarSmall', e.target.checked); } PageItem = ({ page }) => { const dPagePath = new DevidedPagePath(page.path, false, true); const linkedPagePathFormer = new LinkedPagePath(dPagePath.former); const linkedPagePathLatter = new LinkedPagePath(dPagePath.latter); const FormerLink = () => (
); let locked; if (page.grant !== 1) { locked = ; } const tags = page.tags; const tagElements = tags.map((tag) => { return ( {tag.name} ); }); return (
  • { !dPagePath.isRoot && }
    {locked}
    { tagElements }
    {page.seenUsers.length}
    {page.commentCount}
  • ); } render() { const { PageItem } = this; const { t } = this.props; const { recentlyUpdatedPages } = this.props.appContainer.state; return ( <>

    {t('Recent Changes')}

    {/*

    {t('Recent Created')}

    */} {/* TODO: impl switching */}
    userPreferenceSwitchModifiedHandler(e.target.checked)} />
    ); } } /** * Wrapper component for using unstated */ const RecentChangesWrapper = withUnstatedContainers(RecentChanges, [AppContainer]); export default withTranslation()(RecentChangesWrapper);