]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7250 use api/users/current on "My Account" page
authorStas Vilchik <vilchiks@gmail.com>
Tue, 2 Feb 2016 15:04:23 +0000 (16:04 +0100)
committerStas Vilchik <vilchiks@gmail.com>
Tue, 2 Feb 2016 15:04:23 +0000 (16:04 +0100)
server/sonar-web/src/main/js/api/users.js
server/sonar-web/src/main/js/apps/account/components/Home.js
server/sonar-web/src/main/js/apps/account/components/Security.js
server/sonar-web/src/main/js/apps/account/containers/AccountApp.js
server/sonar-web/src/main/js/apps/account/containers/SecurityContainer.js
server/sonar-web/src/main/js/apps/account/store/actions.js
server/sonar-web/src/main/js/apps/account/store/reducers.js
server/sonar-web/src/main/webapp/WEB-INF/app/views/account/index.html.erb

index e9fc97df7b9f64aa69b90f0d71a2d81776cc9dd8..bd07b1b4d73cc943c741c1c33d227d3b26fd9c7a 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import $ from 'jquery';
-import { post, postJSON } from '../helpers/request.js';
+import { getJSON, post } from '../helpers/request.js';
 
 export function getCurrentUser () {
   const url = baseUrl + '/api/users/current';
-  return $.get(url);
+  return getJSON(url);
 }
 
 export function changePassword (login, password, previousPassword) {
index 593618038db963d6e6326d545184f2b6fa3d214f..28c8ec501186e625a6b29c403a8b3f5c06d05ed8 100644 (file)
@@ -56,6 +56,18 @@ const Home = ({ user, favorites, issueFilters, measureFilters }) => (
           <section className="huge-spacer-top">
             <h2 className="spacer-bottom">{translate('my_profile.scm_accounts')}</h2>
             <ul id="scm-accounts">
+              <li
+                  className="little-spacer-bottom text-ellipsis"
+                  title={user.login}>
+                {user.login}
+              </li>
+              {user.email && (
+                  <li
+                      className="little-spacer-bottom text-ellipsis"
+                      title={user.email}>
+                    {user.email}
+                  </li>
+              )}
               {user.scmAccounts.map(scmAccount => (
                   <li
                       key={scmAccount}
index 44938188c5c1d346e86cf5514b13b0c073d73980..52f0a1a9e74cfa1770a59fe462d139ce5cfcd351 100644 (file)
@@ -22,7 +22,7 @@ import React from 'react';
 import Password from './Password';
 import Tokens from './Tokens';
 
-export default function Security ({ user }) {
+export default function Security ({ user, canChangePassword }) {
   return (
       <div className="page page-limited">
         <div className="columns">
@@ -30,7 +30,7 @@ export default function Security ({ user }) {
             <Tokens user={user}/>
           </div>
 
-          {user.canChangePassword && (
+          {canChangePassword && (
               <div className="column-half">
                 <Password user={user}/>
               </div>
index 9559d9336408ddedce9ccc00957d9db85cc079c0..7b30e1479a25b4d8d89bd93dddef3da3be5861f9 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import React, { Component, cloneElement } from 'react';
+import { connect } from 'react-redux';
 
 import Nav from '../components/Nav';
+import { fetchUser } from '../store/actions';
 import { getIssueFilters } from '../../../api/issues';
 
-export default class AccountApp extends Component {
+class AccountApp extends Component {
   state = {};
 
   componentDidMount () {
+    this.props.fetchUser();
     this.fetchFavoriteIssueFilters();
   }
 
@@ -37,8 +40,13 @@ export default class AccountApp extends Component {
   }
 
   render () {
-    const { user } = window.sonarqube;
-    const { favorites } = user;
+    const { user } = this.props;
+
+    if (!user) {
+      return null;
+    }
+
+    const { favorites } = window.sonarqube.user;
     const { issueFilters } = this.state;
     const children = cloneElement(this.props.children, {
       measureFilters: user.favoriteMeasureFilters,
@@ -55,3 +63,16 @@ export default class AccountApp extends Component {
     );
   }
 }
+
+function mapStateToProps (state) {
+  return { user: state.user };
+}
+
+function mapDispatchToProps (dispatch) {
+  return { fetchUser: () => dispatch(fetchUser()) };
+}
+
+export default connect(
+    mapStateToProps,
+    mapDispatchToProps
+)(AccountApp);
index 2e6561506f38d9e2a08d00487fcc1428fb74c614..72bf0c1e4fa0538f46dd16ce9189fd589e2163c2 100644 (file)
@@ -23,7 +23,8 @@ import Security from './../components/Security';
 
 function mapStateToProps (state) {
   return {
-    user: state.user
+    user: state.user,
+    canChangePassword: window.sonarqube.user.canChangePassword
   };
 }
 
index bee94192a5c5795e8bf3b6945183007aeb80e124..f241d4c22c52a069b1583051c5b6d9d7c9f5c4df 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
+import { getCurrentUser } from '../../../api/users';
+
+export const REQUEST_USER = 'REQUEST_USER';
+export const RECEIVE_USER = 'RECEIVE_USER';
 export const ADD_PROJECT_NOTIFICATIONS = 'ADD_PROJECT_NOTIFICATIONS';
 export const REMOVE_PROJECT_NOTIFICATIONS = 'REMOVE_PROJECT_NOTIFICATIONS';
 
+export function requestUser () {
+  return {
+    type: REQUEST_USER
+  };
+}
+
+export function receiveUser (user) {
+  return {
+    type: RECEIVE_USER,
+    user
+  };
+}
+
 export function addProjectNotifications (project) {
   return {
     type: ADD_PROJECT_NOTIFICATIONS,
@@ -33,3 +50,10 @@ export function removeProjectNotifications (project) {
     project
   };
 }
+
+export function fetchUser () {
+  return dispatch => {
+    dispatch(requestUser());
+    return getCurrentUser().then(user => dispatch(receiveUser(user)));
+  };
+}
index 626a3875ba459555b8c5866c1ed7bc0a923b9ed8..813dcf15b97984f93a9a675883c331d300955b02 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { ADD_PROJECT_NOTIFICATIONS, REMOVE_PROJECT_NOTIFICATIONS } from './actions';
+import { RECEIVE_USER, ADD_PROJECT_NOTIFICATIONS, REMOVE_PROJECT_NOTIFICATIONS } from './actions';
 
 function addProjectNotifications (state, project) {
   const found = state.find(notification => {
@@ -48,12 +48,17 @@ function removeProjectNotifications (state, project) {
 }
 
 export const initialState = {
-  user: window.sonarqube.user,
+  user: null,
   projectNotifications: window.sonarqube.notifications.project
 };
 
 export default function (state = initialState, action) {
   switch (action.type) {
+    case RECEIVE_USER:
+      return {
+        ...state,
+        user: action.user
+      };
     case ADD_PROJECT_NOTIFICATIONS:
       return {
         ...state,
index 8a6209d7daa82d806786f4e5325623ee7b6101ae..5cb4f630c877656db10d2e70d29644dcfb8652ef 100644 (file)
@@ -1,20 +1,7 @@
 <% content_for :extra_script do %>
   <script>
     window.sonarqube.user = {
-      login: '<%= escape_javascript current_user.login -%>',
-      name: '<%= escape_javascript current_user.name -%>',
-      email: '<%= escape_javascript current_user.email -%>',
       canChangePassword: <%= User.editable_password? ? 'true' : 'false' -%>,
-      groups: [
-        <% current_user.groups.sort.each do |group| -%>
-          '<%= escape_javascript group.name -%>',
-        <% end -%>
-      ],
-      scmAccounts: [
-        <% current_user.full_scm_accounts.sort.each do |scm_account| -%>
-          '<%= escape_javascript scm_account -%>',
-        <% end -%>
-      ],
       favorites: [
         <% current_user.favourites.each_with_index do |f, index| %>
         {