import React from 'react';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import { UserPicture } from '@growi/ui';
import { DevidedPagePath } from '@growi/core';
import PagePathHierarchicalLink from '~/components/PagePathHierarchicalLink';
import loggerFactory from '~/utils/logger';
import LinkedPagePath from '~/models/linked-page-path';
import FootstampIcon from '../FootstampIcon';
import { withUnstatedContainers } from '../UnstatedUtils';
import AppContainer from '~/client/services/AppContainer';
import { toastError } from '~/client/util/apiNotification';
import FormattedDistanceDate from '../FormattedDistanceDate';
const logger = loggerFactory('growi:History');
function PageItemLower({ page }) {
return (
{page.seenUsers.length}
{page.commentCount}
);
}
PageItemLower.propTypes = {
page: PropTypes.any,
};
function LargePageItem({ 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 }
);
}
LargePageItem.propTypes = {
page: PropTypes.any,
};
function SmallPageItem({ 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 = ;
}
return (
{ !dPagePath.isRoot &&
}
{locked}
);
}
SmallPageItem.propTypes = {
page: PropTypes.any,
};
class RecentChanges extends React.Component {
static propTypes = {
t: PropTypes.func.isRequired, // i18next
appContainer: PropTypes.instanceOf(AppContainer).isRequired,
};
constructor(props) {
super(props);
this.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({
isRecentChangesSidebarSmall: true,
});
}
}
changeSizeHandler = (e) => {
this.setState({
isRecentChangesSidebarSmall: e.target.checked,
});
window.localStorage.setItem('isRecentChangesSidebarSmall', e.target.checked);
}
render() {
const { t } = this.props;
const { recentlyUpdatedPages } = this.props.appContainer.state;
return (
<>
{t('Recent Changes')}
{/*
{t('Recent Created')}
*/} {/* TODO: impl switching */}
this.setState({ isRecentChangesSidebarSmall: e.target.checked })}
/>
{recentlyUpdatedPages.map(page => (this.state.isRecentChangesSidebarSmall
?
: ))}
>
);
}
}
/**
* Wrapper component for using unstated
*/
const RecentChangesWrapper = withUnstatedContainers(RecentChanges, [AppContainer]);
export default withTranslation()(RecentChangesWrapper);