diff --git a/app/controllers/client_api/teams_controller.rb b/app/controllers/client_api/teams_controller.rb
index 1aaff0425..029282d73 100644
--- a/app/controllers/client_api/teams_controller.rb
+++ b/app/controllers/client_api/teams_controller.rb
@@ -2,9 +2,6 @@ module ClientApi
class TeamsController < ApplicationController
MissingTeamError = Class.new(StandardError)
- # TODO remove this when the user authentication will be implemented
- skip_before_action :verify_authenticity_token
-
def index
success_response
end
diff --git a/app/javascript/packs/app/action_types.js b/app/javascript/packs/app/action_types.js
index 059d8c6a6..51e990aea 100644
--- a/app/javascript/packs/app/action_types.js
+++ b/app/javascript/packs/app/action_types.js
@@ -4,6 +4,7 @@ export const GET_LIST_OF_TEAMS = "GET_LIST_OF_TEAMS";
// activities
export const GLOBAL_ACTIVITIES_DATA = "GLOBAL_ACTIVITIES_DATA";
+export const DESTROY_GLOBAL_ACTIVITIES_DATA = "DESTROY_GLOBAL_ACTIVITIES_DATA";
// users
export const SET_CURRENT_USER = "SET_CURRENT_USER";
diff --git a/app/javascript/packs/app/axios.js b/app/javascript/packs/app/axios.js
new file mode 100644
index 000000000..7cf8426c7
--- /dev/null
+++ b/app/javascript/packs/app/axios.js
@@ -0,0 +1,7 @@
+import axios from "axios";
+
+export default axios.create({
+ headers: {
+ "X-CSRF-TOKEN": document.querySelector('meta[name="csrf-token"]').content
+ }
+});
diff --git a/app/javascript/packs/app/constants/colors.js b/app/javascript/packs/app/constants/colors.js
index 4150eaa14..55972ab92 100644
--- a/app/javascript/packs/app/constants/colors.js
+++ b/app/javascript/packs/app/constants/colors.js
@@ -6,6 +6,10 @@ export const DARK_GRAY_COLOR = "#7a7a7a";
export const BORDER_LIGHT_COLOR = "#e3e3e3";
export const WILD_SAND_COLOR = "#f5f5f5";
export const MYSTIC_COLOR = "#eaeff2";
+export const COLOR_CONCRETE = "#f2f2f2";
+export const COLOR_MINE_SHAFT = "#333"
+export const COLOR_BLACK = "#000";
+export const COLOR_GRAY_LIGHT_YADCF = "#ccc";
export const ICON_GREEN_COLOR = "#8fd13f";
export const NOTIFICATION_YES = "#5a8921";
export const NOTIFICATION_YES_BORDER = "#4d751c";
diff --git a/app/javascript/packs/locales/messages.js b/app/javascript/packs/locales/messages.js
index a47793a62..cd8afa045 100644
--- a/app/javascript/packs/locales/messages.js
+++ b/app/javascript/packs/locales/messages.js
@@ -8,7 +8,14 @@ export default {
loading: "Loading ..."
},
navbar: {
- page_title: "sciNote"
+ page_title: "sciNote",
+ home_label: "Home",
+ protocols_label: "Protocols",
+ repositories_label: "Repositories",
+ activities_label: "Activities",
+ search_label: "Search",
+ notifications_label: "Notifications",
+ info_label: "Info"
},
settings_page: {
account: "Account",
diff --git a/app/javascript/packs/shared/actions/ActivitiesActions.js b/app/javascript/packs/shared/actions/ActivitiesActions.js
index 94ce39f28..919569b27 100644
--- a/app/javascript/packs/shared/actions/ActivitiesActions.js
+++ b/app/javascript/packs/shared/actions/ActivitiesActions.js
@@ -1,6 +1,9 @@
-import axios from "axios";
+import axios from "../../app/axios";
import { ACTIVITIES_PATH } from "../../app/routes";
-import { GLOBAL_ACTIVITIES_DATA } from "../../app/action_types";
+import {
+ GLOBAL_ACTIVITIES_DATA,
+ DESTROY_GLOBAL_ACTIVITIES_DATA
+} from "../../app/action_types";
function addActivitiesData(data) {
return {
@@ -9,9 +12,15 @@ function addActivitiesData(data) {
};
}
-export function getActivities(last_id = 0) {
+export function destroyActivities() {
+ return {
+ type: DESTROY_GLOBAL_ACTIVITIES_DATA
+ };
+}
+
+export function getActivities(lastId = 0) {
return dispatch => {
- let path = `${ACTIVITIES_PATH}?from=${last_id}`;
+ const path = `${ACTIVITIES_PATH}?from=${lastId}`;
axios
.get(path, { withCredentials: true })
.then(response => {
diff --git a/app/javascript/packs/shared/actions/TeamsActions.js b/app/javascript/packs/shared/actions/TeamsActions.js
index a1410c1fa..a13590fed 100644
--- a/app/javascript/packs/shared/actions/TeamsActions.js
+++ b/app/javascript/packs/shared/actions/TeamsActions.js
@@ -1,4 +1,4 @@
-import axios from "axios";
+import axios from "../../app/axios";
import _ from "lodash";
import { TEAMS_PATH, CHANGE_TEAM_PATH } from "../../app/routes";
import { GET_LIST_OF_TEAMS, SET_CURRENT_TEAM } from "../../app/action_types";
diff --git a/app/javascript/packs/shared/actions/UsersActions.js b/app/javascript/packs/shared/actions/UsersActions.js
index 8da83d97a..129fff778 100644
--- a/app/javascript/packs/shared/actions/UsersActions.js
+++ b/app/javascript/packs/shared/actions/UsersActions.js
@@ -1,4 +1,4 @@
-import axios from "axios";
+import axios from "../../app/axios";
import { CURRENT_USER_PATH } from "../../app/routes";
import {
SET_CURRENT_USER,
diff --git a/app/javascript/packs/shared/navigation/components/ActivityDateElement.jsx b/app/javascript/packs/shared/navigation/components/ActivityDateElement.jsx
index cb7697903..d67e00a83 100644
--- a/app/javascript/packs/shared/navigation/components/ActivityDateElement.jsx
+++ b/app/javascript/packs/shared/navigation/components/ActivityDateElement.jsx
@@ -1,11 +1,34 @@
import React from "react";
import PropTypes from "prop-types";
-import { FormattedDate } from "react-intl";
+import Moment from "react-moment";
+import styled from "styled-components";
+
+import { WHITE_COLOR } from "../../../app/constants/colors"
+
+const StyledLi = styled.li`
+ margin-bottom: 1em;
+`
+
+const StyledSpan = styled.span`
+ display: inline;
+ padding: 5px 30px;
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1;
+ color: ${WHITE_COLOR};
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+`;
const ActivityDateElement = ({ date }) =>
-
-
- ;
+
+
+
+ {date}
+
+
+ ;
ActivityDateElement.propTypes = {
date: PropTypes.instanceOf(Date).isRequired
diff --git a/app/javascript/packs/shared/navigation/components/ActivityElement.jsx b/app/javascript/packs/shared/navigation/components/ActivityElement.jsx
index e0c4fa92a..421849037 100644
--- a/app/javascript/packs/shared/navigation/components/ActivityElement.jsx
+++ b/app/javascript/packs/shared/navigation/components/ActivityElement.jsx
@@ -1,24 +1,54 @@
import React from "react";
import PropTypes from "prop-types";
-import { FormattedTime } from "react-intl";
+import Moment from "react-moment";
+import styled from "styled-components";
+
+import {
+ WHITE_COLOR,
+ COLOR_CONCRETE,
+ BORDER_GRAY_COLOR
+} from "../../../app/constants/colors";
+
+const StyledLi = styled.li`
+ border-radius: .25em;
+ margin-bottom: 1em;
+ background-color: ${WHITE_COLOR};
+ border: 1px solid ${COLOR_CONCRETE};
+`;
+const TimeSpan = styled.span`
+ min-width: 150px;
+ display: table-cell;
+ vertical-align: middle;
+ border-top-left-radius: .25em;
+ border-bottom-left-radius: .25em;
+ border: 3px solid ${BORDER_GRAY_COLOR};
+ background-color: ${BORDER_GRAY_COLOR};
+ padding-left: 10px;
+ padding-right: 10px;
+ vertical-align: top;
+`;
+
+const TextSpan = styled.span`
+ display: table-cell;
+ padding: 3px 10px;
+ text-align: justify;
+`
const ActivityElement = ({ activity }) =>
-
-
-
-
-
- ;
+
+
+
+ {activity.created_at}
+
+
+
+ ;
ActivityElement.propTypes = {
activity: PropTypes.shape({
message: PropTypes.string.isRequired,
created_at: PropTypes.string.isRequired
- })
+ }).isRequired
};
export default ActivityElement;
diff --git a/app/javascript/packs/shared/navigation/components/GlobalActivitiesModal.jsx b/app/javascript/packs/shared/navigation/components/GlobalActivitiesModal.jsx
index 97d680d80..e1f82df70 100644
--- a/app/javascript/packs/shared/navigation/components/GlobalActivitiesModal.jsx
+++ b/app/javascript/packs/shared/navigation/components/GlobalActivitiesModal.jsx
@@ -4,10 +4,46 @@ import PropTypes from "prop-types";
import { FormattedMessage } from "react-intl";
import { Modal, Button } from "react-bootstrap";
import _ from "lodash";
+import styled from "styled-components";
import { getActivities } from "../../actions/ActivitiesActions";
import ActivityElement from "./ActivityElement";
import ActivityDateElement from "./ActivityDateElement";
+import {
+ WHITE_COLOR,
+ COLOR_CONCRETE,
+ COLOR_MINE_SHAFT,
+ COLOR_GRAY_LIGHT_YADCF
+} from "../../../app/constants/colors";
+
+const StyledBottom = styled(Button)`
+ display: inline-block;
+ margin-bottom: 0;
+ font-weight: normal;
+ text-align: center;
+ vertical-align: middle;
+ touch-action: manipulation;
+ cursor: pointer;
+ background-image: none;
+ border: 1px solid transparent;
+ white-space: nowrap;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ border-radius: 4px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ color: ${COLOR_MINE_SHAFT};
+ background-color: ${WHITE_COLOR};
+ border-color: ${COLOR_GRAY_LIGHT_YADCF};
+`;
+
+const StyledModalBody = styled(Modal.Body)`
+ background-color: ${COLOR_CONCRETE};
+ color: ${COLOR_MINE_SHAFT};;
+`;
class GlobalActivitiesModal extends Component {
constructor(props) {
@@ -25,9 +61,9 @@ class GlobalActivitiesModal extends Component {
);
}
return this.props.activities.map((activity, i, arr) => {
- let newDate = new Date(activity.created_at);
+ const newDate = new Date(activity.created_at);
if (i > 0) {
- let prevDate = new Date(arr[i - 1].created_at);
+ const prevDate = new Date(arr[i - 1].created_at);
if (prevDate < newDate) {
return [
,
@@ -45,20 +81,21 @@ class GlobalActivitiesModal extends Component {
}
addMoreActivities() {
- let last_id = _.last(this.props.activities).id;
- this.props.fetchActivities(last_id);
+ const lastId = _.last(this.props.activities).id;
+ this.props.fetchActivities(lastId);
}
addMoreButton() {
if (this.props.more) {
return (
-
-
+
);
}
+ return "";
}
render() {
@@ -69,12 +106,12 @@ class GlobalActivitiesModal extends Component {
-
-
+
+
{this.displayActivities()}
{this.addMoreButton()}
-
+