From: KIRAN KASHALKAR Date: Thu, 20 Apr 2017 13:18:13 +0000 (-0400) Subject: NOTICKET: Merging OSM/master to OSM/projects X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=commitdiff_plain;h=2da8b7a246ba17396c5bc218a0b7f1685fb8d304 NOTICKET: Merging OSM/master to OSM/projects Signed-off-by: KIRAN KASHALKAR --- 2da8b7a246ba17396c5bc218a0b7f1685fb8d304 diff --cc skyquake/framework/widgets/skyquake_container/skyquakeContainer.jsx index 6347c8f6b,d83c83647..8b61f4b6c --- a/skyquake/framework/widgets/skyquake_container/skyquakeContainer.jsx +++ b/skyquake/framework/widgets/skyquake_container/skyquakeContainer.jsx @@@ -115,16 -106,14 +114,17 @@@ export default class skyquakeContainer type={notificationType} hidden={!(displayNotification && notificationMessage)} onDismiss={SkyquakeContainerActions.hideNotification} + timeout= {5000} /> - +
-

{this.state.currentPlugin + tag}

+

{(this.state.nav.name ? this.state.nav.name.replace('_', ' ').replace('-', ' ') : this.state.currentPlugin && this.state.currentPlugin.replace('_', ' ').replace('-', ' ')) + tag}

{this.props.children} diff --cc skyquake/framework/widgets/skyquake_container/skyquakeContainerStore.js index 4f270945a,56ebdda03..87651e59c --- a/skyquake/framework/widgets/skyquake_container/skyquakeContainerStore.js +++ b/skyquake/framework/widgets/skyquake_container/skyquakeContainerStore.js @@@ -20,10 -20,10 +20,12 @@@ import Alt from './skyquakeAltInstance.js'; import SkyquakeContainerSource from './skyquakeContainerSource.js'; import SkyquakeContainerActions from './skyquakeContainerActions'; +let Utils = require('utils/utils.js'); - import _ from 'lodash'; + import _indexOf from 'lodash/indexOf'; ++import _isEqual from 'lodash/isEqual'; //Temporary, until api server is on same port as webserver - var rw = require('utils/rw.js'); + import rw from 'utils/rw.js'; + var API_SERVER = rw.getSearchParams(window.location).api_server; var UPLOAD_SERVER = rw.getSearchParams(window.location).upload_server; @@@ -164,43 -162,6 +166,43 @@@ class SkyquakeContainerStore }) } + openProjectSocketSuccess = (connection) => { + var self = this; + var ws = window.multiplexer.channel(connection); + if (!connection) return; + self.setState({ + socket: ws.ws, + channelId: connection + }); + ws.onmessage = function(socket) { + try { + var data = JSON.parse(socket.data); + Utils.checkAuthentication(data.statusCode, function() { + self.closeSocket(); + }); - if (!_.isEqual(data.project, self.projects)) { ++ if (!_isEqual(data.project, self.projects)) { + let user = self.user; + user.projects = data.project; + self.setState({ + user: user, + projects: data.project + }); + } + } catch(e) { + console.log('HIT an exception in openProjectSocketSuccess', e); + } + }; + } + getUserProfileSuccess = (user) => { + this.alt.actions.global.hideScreenLoader.defer(); + this.setState({user}) + } + selectActiveProjectSuccess = (projectId) => { + let user = this.user; + user.projectId = projectId; + this.setState({user}); + window.location.reload(true); + } //Notifications showNotification = (data) => { let state = { diff --cc skyquake/framework/widgets/skyquake_nav/skyquakeNav.jsx index f9161cc5d,000000000..d9dff0b39 mode 100644,000000..100644 --- a/skyquake/framework/widgets/skyquake_nav/skyquakeNav.jsx +++ b/skyquake/framework/widgets/skyquake_nav/skyquakeNav.jsx @@@ -1,356 -1,0 +1,357 @@@ +/* + * + * Copyright 2016 RIFT.IO Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React from 'react'; +import { Link } from 'react-router'; +import Utils from 'utils/utils.js'; +import Crouton from 'react-crouton'; +import 'style/common.scss'; + +import './skyquakeNav.scss'; +import SelectOption from '../form_controls/selectOption.jsx'; +import {FormSection} from '../form_controls/formControls.jsx'; +import {isRBACValid, SkyquakeRBAC} from 'widgets/skyquake_rbac/skyquakeRBAC.jsx'; + +//Temporary, until api server is on same port as webserver - var rw = require('utils/rw.js'); ++import rw from 'utils/rw.js'; ++ +var API_SERVER = rw.getSearchParams(window.location).api_server; +var UPLOAD_SERVER = rw.getSearchParams(window.location).upload_server; + +// +// Internal classes/functions +// + +class LogoutAppMenuItem extends React.Component { + handleLogout() { + Utils.clearAuthentication(); + } + render() { + return ( +
+

+ + Logout + +

+
+ ); + } +} + +class SelectProject extends React.Component { + constructor(props) { + super(props); + } + selectProject(e) { + let value = JSON.parse(e.currentTarget.value); + console.log('selected project', value) + } + render() { + let props = this.props; + let currentValue = JSON.stringify(props.currentProject); + let projects = this.props.projects && this.props.projects.map((p,i) => { + return { + label: p.name, + value: p.name + } + }); + let hasProjects = (this.props.projects && (this.props.projects.length > 0)) + return ( +
+ { + hasProjects ? 'Project:' : 'No Projects Assigned' + } + { + hasProjects ? + + : null + } +
+ ) + } +} + +class UserNav extends React.Component { + constructor(props) { + super(props); + } + handleLogout() { + Utils.clearAuthentication(); + } + selectProject(e) { + let value = JSON.parse(e.currentTarget.value) + console.log('selected project', value) + } + render() { + let props = this.props; + let userProfileLink = ''; + this.props.nav['user_management'] && this.props.nav['user_management'].routes.map((r) => { + if(r.unique) { + userProfileLink = returnLinkItem(r, props.currentUser) + } + }) + return ( +
+

+ USER: {userProfileLink} + +

+ +
+ ) + } +} + +UserNav.defaultProps = { + projects: [ + + ] +} + +// +// Exported classes and functions +// + +// +/** + * Skyquake Nav Component. Provides navigation functionality between all plugins + */ +export default class skyquakeNav extends React.Component { + constructor(props) { + super(props); + this.state = {}; + this.state.validateErrorEvent = 0; + this.state.validateErrorMsg = ''; + } + componentDidMount() { + this.props.store.openProjectSocket(); + this.props.store.getUserProfile(); + } + validateError = (msg) => { + this.setState({ + validateErrorEvent: true, + validateErrorMsg: msg + }); + } + validateReset = () => { + this.setState({ + validateErrorEvent: false + }); + } + returnCrouton = () => { + return