mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-02-12 01:46:55 +08:00
implements @mlorb suggestions
This commit is contained in:
parent
4380a65caf
commit
8dfb5e2260
3 changed files with 58 additions and 46 deletions
|
@ -5,6 +5,8 @@ import Moment from "react-moment";
|
|||
import { FormattedMessage } from "react-intl";
|
||||
import styled from "styled-components";
|
||||
|
||||
|
||||
import { isToday } from "../../../services/helpers/date_time_helper"
|
||||
import { WHITE_COLOR } from "../../../config/constants/colors";
|
||||
|
||||
const StyledLi = styled.li`margin-bottom: 1em;`;
|
||||
|
@ -21,8 +23,8 @@ const StyledSpan = styled.span`
|
|||
border-radius: 0.25em;
|
||||
`;
|
||||
|
||||
const ActivityDateElement = (props: { date: Date, today?: boolean }) => {
|
||||
const label = props.today ? (
|
||||
const ActivityDateElement = (props: { date: Date }) => {
|
||||
const label = isToday(props.date) ? (
|
||||
<FormattedMessage id="activities.today"/>
|
||||
) : (
|
||||
<Moment format="DD.MM.YYYY">{props.date}</Moment>
|
||||
|
|
|
@ -46,10 +46,8 @@ const StyledModalBody = styled(Modal.Body)`
|
|||
`;
|
||||
|
||||
type Props = {
|
||||
more: boolean,
|
||||
showModal: boolean,
|
||||
onCloseModal: Function,
|
||||
activites: Array<Activity>
|
||||
onCloseModal: Function
|
||||
};
|
||||
|
||||
type State = {
|
||||
|
@ -58,18 +56,30 @@ type State = {
|
|||
};
|
||||
|
||||
class GlobalActivitiesModal extends Component<Props, State> {
|
||||
displayActivities: Function;
|
||||
addMoreActivities: Function;
|
||||
loadData: Function;
|
||||
onCloseModalActions: Function;
|
||||
static renderActivityDateElement(
|
||||
key: number,
|
||||
activity: Activity,
|
||||
date: Date
|
||||
) {
|
||||
return [
|
||||
<ActivityDateElement key={date} date={date} />,
|
||||
<ActivityElement key={key} activity={activity} />
|
||||
];
|
||||
}
|
||||
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
this.state = { activities: [], more: false };
|
||||
this.displayActivities = this.displayActivities.bind(this);
|
||||
this.addMoreActivities = this.addMoreActivities.bind(this);
|
||||
this.onCloseModalActions = this.onCloseModalActions.bind(this);
|
||||
this.loadData = this.loadData.bind(this);
|
||||
(this: any).displayActivities = this.displayActivities.bind(this);
|
||||
(this: any).addMoreActivities = this.addMoreActivities.bind(this);
|
||||
(this: any).onCloseModalActions = this.onCloseModalActions.bind(this);
|
||||
(this: any).loadData = this.loadData.bind(this);
|
||||
(this: any).mapActivities = this.mapActivities.bind(this)
|
||||
}
|
||||
|
||||
onCloseModalActions() {
|
||||
this.setState({ activities: [], more: false });
|
||||
this.props.onCloseModal();
|
||||
}
|
||||
|
||||
loadData() {
|
||||
|
@ -81,9 +91,32 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
|||
});
|
||||
}
|
||||
|
||||
onCloseModalActions() {
|
||||
this.setState({ activities: [], more: false });
|
||||
this.props.onCloseModal();
|
||||
mapActivities() {
|
||||
return this.state.activities.map((activity, i, arr) => {
|
||||
// @todo replace key={i} with key={activity.id} !!!!!!!!!!!!!!
|
||||
// when the backend bug will be fixed
|
||||
const newDate = new Date(activity.created_at);
|
||||
// returns a label with "today" if the date of the activity is today
|
||||
if (i === 0) {
|
||||
return GlobalActivitiesModal.renderActivityDateElement(
|
||||
i,
|
||||
activity,
|
||||
newDate
|
||||
);
|
||||
}
|
||||
// else checks if the previous activity is newer than current
|
||||
// and displays a label with the date
|
||||
const prevDate = new Date(arr[i - 1].created_at);
|
||||
if (prevDate.getDate() > newDate.getDate()) {
|
||||
return GlobalActivitiesModal.renderActivityDateElement(
|
||||
i,
|
||||
activity,
|
||||
newDate
|
||||
);
|
||||
}
|
||||
// returns the default activity element
|
||||
return <ActivityElement key={i} activity={activity} />;
|
||||
});
|
||||
}
|
||||
|
||||
displayActivities() {
|
||||
|
@ -98,36 +131,7 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
|||
</li>
|
||||
);
|
||||
}
|
||||
return this.state.activities.map((activity, i, arr) => {
|
||||
const dateNow = new Date();
|
||||
const newDate = new Date(activity.created_at);
|
||||
if (i > 0) {
|
||||
const prevDate = new Date(arr[i - 1].created_at);
|
||||
if (prevDate.getDate() > newDate.getDate()) {
|
||||
return [
|
||||
<ActivityDateElement key={newDate} date={newDate} />,
|
||||
<ActivityElement key={i} activity={activity} />
|
||||
];
|
||||
}
|
||||
} else {
|
||||
if (
|
||||
newDate.getDate() === dateNow.getDate() &&
|
||||
newDate.getMonth() === dateNow.getMonth() &&
|
||||
newDate.getFullYear() === dateNow.getFullYear()
|
||||
) {
|
||||
return [
|
||||
<ActivityDateElement key={newDate} date={newDate} today />,
|
||||
<ActivityElement key={i} activity={activity} />
|
||||
];
|
||||
}
|
||||
return [
|
||||
<ActivityDateElement key={newDate} date={newDate} />,
|
||||
<ActivityElement key={i} activity={activity} />
|
||||
];
|
||||
}
|
||||
console.log("banana");
|
||||
return <ActivityElement key={i} activity={activity} />;
|
||||
});
|
||||
return this.mapActivities();
|
||||
}
|
||||
|
||||
addMoreActivities() {
|
||||
|
|
6
app/javascript/src/services/helpers/date_time_helper.js
Normal file
6
app/javascript/src/services/helpers/date_time_helper.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
// @flow
|
||||
|
||||
export function isToday(inputDate: Date): boolean {
|
||||
const todaysDate = new Date();
|
||||
return inputDate.setHours(0, 0, 0, 0) == todaysDate.setHours(0, 0, 0, 0);
|
||||
}
|
Loading…
Reference in a new issue