mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-13 16:45:18 +08:00
fixes activities key [fixes SCI-1628]
This commit is contained in:
parent
e9568bcd47
commit
4380a65caf
8 changed files with 76 additions and 73 deletions
|
@ -1,13 +1,13 @@
|
||||||
|
// @flow
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import PropTypes from "prop-types";
|
|
||||||
import Moment from "react-moment";
|
import Moment from "react-moment";
|
||||||
|
import { FormattedMessage } from "react-intl";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
import { WHITE_COLOR } from "../../../config/constants/colors"
|
import { WHITE_COLOR } from "../../../config/constants/colors";
|
||||||
|
|
||||||
const StyledLi = styled.li`
|
const StyledLi = styled.li`margin-bottom: 1em;`;
|
||||||
margin-bottom: 1em;
|
|
||||||
`
|
|
||||||
|
|
||||||
const StyledSpan = styled.span`
|
const StyledSpan = styled.span`
|
||||||
display: inline;
|
display: inline;
|
||||||
|
@ -18,20 +18,20 @@ const StyledSpan = styled.span`
|
||||||
color: ${WHITE_COLOR};
|
color: ${WHITE_COLOR};
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
border-radius: .25em;
|
border-radius: 0.25em;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const ActivityDateElement = ({ date }) =>
|
const ActivityDateElement = (props: { date: Date, today?: boolean }) => {
|
||||||
|
const label = props.today ? (
|
||||||
|
<FormattedMessage id="activities.today"/>
|
||||||
|
) : (
|
||||||
|
<Moment format="DD.MM.YYYY">{props.date}</Moment>
|
||||||
|
);
|
||||||
|
return (
|
||||||
<StyledLi className="text-center">
|
<StyledLi className="text-center">
|
||||||
<StyledSpan className="label label-primary">
|
<StyledSpan className="label label-primary">{label}</StyledSpan>
|
||||||
<Moment format="DD.MM.YYYY">
|
</StyledLi>
|
||||||
{date}
|
);
|
||||||
</Moment>
|
|
||||||
</StyledSpan>
|
|
||||||
</StyledLi>;
|
|
||||||
|
|
||||||
ActivityDateElement.propTypes = {
|
|
||||||
date: PropTypes.instanceOf(Date).isRequired
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default ActivityDateElement;
|
export default ActivityDateElement;
|
||||||
|
|
|
@ -60,16 +60,38 @@ type State = {
|
||||||
class GlobalActivitiesModal extends Component<Props, State> {
|
class GlobalActivitiesModal extends Component<Props, State> {
|
||||||
displayActivities: Function;
|
displayActivities: Function;
|
||||||
addMoreActivities: Function;
|
addMoreActivities: Function;
|
||||||
|
loadData: Function;
|
||||||
|
onCloseModalActions: Function;
|
||||||
|
|
||||||
constructor(props: Props) {
|
constructor(props: Props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = { activities: this.props.activites, more: this.props.more };
|
this.state = { activities: [], more: false };
|
||||||
this.displayActivities = this.displayActivities.bind(this);
|
this.displayActivities = this.displayActivities.bind(this);
|
||||||
this.addMoreActivities = this.addMoreActivities.bind(this);
|
this.addMoreActivities = this.addMoreActivities.bind(this);
|
||||||
|
this.onCloseModalActions = this.onCloseModalActions.bind(this);
|
||||||
|
this.loadData = this.loadData.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
loadData() {
|
||||||
|
getActivities().then(response => {
|
||||||
|
this.setState({
|
||||||
|
activities: response.activities,
|
||||||
|
more: response.more
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onCloseModalActions() {
|
||||||
|
this.setState({ activities: [], more: false });
|
||||||
|
this.props.onCloseModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
displayActivities() {
|
displayActivities() {
|
||||||
if (this.state.activities.length === 0) {
|
if (this.state.activities.length === 0) {
|
||||||
|
if (this.props.showModal) {
|
||||||
|
this.loadData();
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
<FormattedMessage id="activities.no_data" />
|
<FormattedMessage id="activities.no_data" />
|
||||||
|
@ -77,22 +99,34 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return this.state.activities.map((activity, i, arr) => {
|
return this.state.activities.map((activity, i, arr) => {
|
||||||
|
const dateNow = new Date();
|
||||||
const newDate = new Date(activity.created_at);
|
const newDate = new Date(activity.created_at);
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
const prevDate = new Date(arr[i - 1].created_at);
|
const prevDate = new Date(arr[i - 1].created_at);
|
||||||
if (prevDate < newDate) {
|
if (prevDate.getDate() > newDate.getDate()) {
|
||||||
return [
|
return [
|
||||||
<ActivityDateElement key={newDate} date={newDate} />,
|
<ActivityDateElement key={newDate} date={newDate} />,
|
||||||
<ActivityElement key={activity.id} activity={activity} />
|
<ActivityElement key={i} activity={activity} />
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (
|
||||||
|
newDate.getDate() === dateNow.getDate() &&
|
||||||
|
newDate.getMonth() === dateNow.getMonth() &&
|
||||||
|
newDate.getFullYear() === dateNow.getFullYear()
|
||||||
|
) {
|
||||||
return [
|
return [
|
||||||
<ActivityDateElement key={newDate} date={newDate} />,
|
<ActivityDateElement key={newDate} date={newDate} today />,
|
||||||
<ActivityElement key={activity.id} activity={activity} />
|
<ActivityElement key={i} activity={activity} />
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
return <ActivityElement key={activity.id} activity={activity} />;
|
return [
|
||||||
|
<ActivityDateElement key={newDate} date={newDate} />,
|
||||||
|
<ActivityElement key={i} activity={activity} />
|
||||||
|
];
|
||||||
|
}
|
||||||
|
console.log("banana");
|
||||||
|
return <ActivityElement key={i} activity={activity} />;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +143,7 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
||||||
}
|
}
|
||||||
|
|
||||||
addMoreButton() {
|
addMoreButton() {
|
||||||
if (this.props.more) {
|
if (this.state.more) {
|
||||||
return (
|
return (
|
||||||
<li className="text-center">
|
<li className="text-center">
|
||||||
<StyledBottom onClick={this.addMoreActivities}>
|
<StyledBottom onClick={this.addMoreActivities}>
|
||||||
|
@ -123,7 +157,7 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Modal show={this.props.showModal} onHide={this.props.onCloseModal}>
|
<Modal show={this.props.showModal} onHide={this.onCloseModalActions}>
|
||||||
<Modal.Header closeButton>
|
<Modal.Header closeButton>
|
||||||
<Modal.Title>
|
<Modal.Title>
|
||||||
<FormattedMessage id="activities.modal_title" />
|
<FormattedMessage id="activities.modal_title" />
|
||||||
|
@ -136,7 +170,7 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
||||||
</ul>
|
</ul>
|
||||||
</StyledModalBody>
|
</StyledModalBody>
|
||||||
<Modal.Footer>
|
<Modal.Footer>
|
||||||
<Button onClick={this.props.onCloseModal}>
|
<Button onClick={this.onCloseModalActions}>
|
||||||
<FormattedMessage id="general.close" />
|
<FormattedMessage id="general.close" />
|
||||||
</Button>
|
</Button>
|
||||||
</Modal.Footer>
|
</Modal.Footer>
|
||||||
|
|
|
@ -9,7 +9,6 @@ import {
|
||||||
WHITE_COLOR,
|
WHITE_COLOR,
|
||||||
BORDER_GRAY_COLOR
|
BORDER_GRAY_COLOR
|
||||||
} from "../../config/constants/colors";
|
} from "../../config/constants/colors";
|
||||||
import { getActivities } from "../../services/api/activities_api";
|
|
||||||
|
|
||||||
import TeamSwitch from "./components/TeamSwitch";
|
import TeamSwitch from "./components/TeamSwitch";
|
||||||
import GlobalActivitiesModal from "./components/GlobalActivitiesModal";
|
import GlobalActivitiesModal from "./components/GlobalActivitiesModal";
|
||||||
|
@ -45,8 +44,6 @@ class Navigation extends Component {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
showActivitesModal: false,
|
showActivitesModal: false,
|
||||||
activities: [],
|
|
||||||
more: false,
|
|
||||||
current_team: { id: 0 }
|
current_team: { id: 0 }
|
||||||
};
|
};
|
||||||
this.selectItemCallback = this.selectItemCallback.bind(this);
|
this.selectItemCallback = this.selectItemCallback.bind(this);
|
||||||
|
@ -67,15 +64,6 @@ class Navigation extends Component {
|
||||||
case 4:
|
case 4:
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
this.setState({ showActivitesModal: !this.state.showActivitesModal });
|
this.setState({ showActivitesModal: !this.state.showActivitesModal });
|
||||||
// load activites if modal is shown
|
|
||||||
if (this.state.showActivitesModal) {
|
|
||||||
getActivities().then(response => {
|
|
||||||
this.setState({
|
|
||||||
activities: response.activities,
|
|
||||||
more: response.more
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
@ -141,8 +129,6 @@ class Navigation extends Component {
|
||||||
</Nav>
|
</Nav>
|
||||||
</StyledNavbar>
|
</StyledNavbar>
|
||||||
<GlobalActivitiesModal
|
<GlobalActivitiesModal
|
||||||
activities={this.state.activites}
|
|
||||||
more={this.state.more}
|
|
||||||
showModal={this.state.showActivitesModal}
|
showModal={this.state.showActivitesModal}
|
||||||
onCloseModal={this.closeModalCallback}
|
onCloseModal={this.closeModalCallback}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React, { Component } from "react";
|
// @flow
|
||||||
import { bool } from "prop-types";
|
|
||||||
import { connect } from "react-redux";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
const Wrapper = styled.div`
|
const Wrapper = styled.div`
|
||||||
|
@ -18,10 +18,9 @@ const Wrapper = styled.div`
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
class Spinner extends Component {
|
export default (props: { spinner_on: boolean }) => {
|
||||||
render() {
|
|
||||||
let spinner = <div />;
|
let spinner = <div />;
|
||||||
if (this.props.spinner_on) {
|
if (props.spinner_on) {
|
||||||
spinner = (
|
spinner = (
|
||||||
<Wrapper>
|
<Wrapper>
|
||||||
<div className="center-box">
|
<div className="center-box">
|
||||||
|
@ -30,15 +29,5 @@ class Spinner extends Component {
|
||||||
</Wrapper>
|
</Wrapper>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return spinner;
|
return spinner;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Spinner.propTypes = {
|
|
||||||
spinner_on: bool.isRequired
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapStateToProps = state => state.global_activities;
|
|
||||||
|
|
||||||
export default connect(mapStateToProps, {})(Spinner);
|
|
||||||
|
|
|
@ -28,10 +28,6 @@ export const LEAVE_TEAM = "LEAVE_TEAM";
|
||||||
export const SHOW_LEAVE_TEAM_MODAL = "SHOW_LEAVE_TEAM_MODAL";
|
export const SHOW_LEAVE_TEAM_MODAL = "SHOW_LEAVE_TEAM_MODAL";
|
||||||
export const UPDATE_TEAM_DESCRIPTION_MODAL = "UPDATE_TEAM_DESCRIPTION_MODAL";
|
export const UPDATE_TEAM_DESCRIPTION_MODAL = "UPDATE_TEAM_DESCRIPTION_MODAL";
|
||||||
|
|
||||||
// spinner
|
|
||||||
export const SPINNER_ON = "SPINNER_ON";
|
|
||||||
export const SPINNER_OFF = "SPINNER_OFF";
|
|
||||||
|
|
||||||
// alerts
|
// alerts
|
||||||
export const ADD_ALERT = "ADD_ALERT";
|
export const ADD_ALERT = "ADD_ALERT";
|
||||||
export const CLEAR_ALERT = "CLEAR_ALERT";
|
export const CLEAR_ALERT = "CLEAR_ALERT";
|
||||||
|
|
|
@ -161,7 +161,8 @@ export default {
|
||||||
activities: {
|
activities: {
|
||||||
modal_title: "Activities",
|
modal_title: "Activities",
|
||||||
no_data: "No Data",
|
no_data: "No Data",
|
||||||
more_activities: "More Activities"
|
more_activities: "More Activities",
|
||||||
|
today: "Today"
|
||||||
},
|
},
|
||||||
global_team_switch: {
|
global_team_switch: {
|
||||||
new_team: "New team"
|
new_team: "New team"
|
||||||
|
|
|
@ -8,7 +8,6 @@ import { flattenMessages } from "./config/locales/utils";
|
||||||
import messages from "./config/locales/messages";
|
import messages from "./config/locales/messages";
|
||||||
import store from "./config/store";
|
import store from "./config/store";
|
||||||
|
|
||||||
import Spinner from "./components/Spinner";
|
|
||||||
import AlertsContainer from "./components/AlertsContainer";
|
import AlertsContainer from "./components/AlertsContainer";
|
||||||
import ModalsContainer from "./components/ModalsContainer";
|
import ModalsContainer from "./components/ModalsContainer";
|
||||||
import SettingsPage from "./scenes/SettingsPage";
|
import SettingsPage from "./scenes/SettingsPage";
|
||||||
|
@ -35,9 +34,7 @@ const ScinoteApp = () =>
|
||||||
</ContentWrapper>
|
</ContentWrapper>
|
||||||
</div>
|
</div>
|
||||||
</BrowserRouter>
|
</BrowserRouter>
|
||||||
|
|
||||||
<ModalsContainer />
|
<ModalsContainer />
|
||||||
<Spinner />
|
|
||||||
</div>
|
</div>
|
||||||
</IntlProvider>
|
</IntlProvider>
|
||||||
</Provider>;
|
</Provider>;
|
||||||
|
|
|
@ -6,5 +6,5 @@ export function getActivities(
|
||||||
lastId: number = 0
|
lastId: number = 0
|
||||||
): Promise<*> {
|
): Promise<*> {
|
||||||
const path = `${ACTIVITIES_PATH}?from=${lastId}`;
|
const path = `${ACTIVITIES_PATH}?from=${lastId}`;
|
||||||
return axiosInstance.get(path).then(({ data }) => data);
|
return axiosInstance.get(path).then(({ data }) => data.global_activities);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue