From b47b7b7a316f38064caebecbe7442819ccf41808 Mon Sep 17 00:00:00 2001 From: Allen Gilliland <agilliland@gmail.com> Date: Wed, 9 Sep 2015 17:17:45 -0700 Subject: [PATCH] provide separate routes for each homepage tab. --- .../app/home/components/HeaderTabs.react.js | 4 +-- .../app/home/components/Homepage.react.js | 2 +- .../app/home/home.controllers.js | 32 ++++++++++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/resources/frontend_client/app/home/components/HeaderTabs.react.js b/resources/frontend_client/app/home/components/HeaderTabs.react.js index d896a7390c4..251e1c284b3 100644 --- a/resources/frontend_client/app/home/components/HeaderTabs.react.js +++ b/resources/frontend_client/app/home/components/HeaderTabs.react.js @@ -43,8 +43,8 @@ export default class HeaderTabs extends Component { return ( <div className="bg-brand text-white"> - <a className={activityTab} onClick={() => this.onClickActivityTab()}>Activity</a> - <a className={questionsTab} onClick={() => this.onClickQuestionsTab()}>Saved Questions</a> + <a className={activityTab} href="/">Activity</a> + <a className={questionsTab} href="/?questions">Saved Questions</a> </div> ); } diff --git a/resources/frontend_client/app/home/components/Homepage.react.js b/resources/frontend_client/app/home/components/Homepage.react.js index 24f4d2b1cbb..07a04e0f95b 100644 --- a/resources/frontend_client/app/home/components/Homepage.react.js +++ b/resources/frontend_client/app/home/components/Homepage.react.js @@ -3,7 +3,6 @@ import React, { Component, PropTypes } from "react"; import Greeting from "metabase/lib/greeting"; -import Icon from "metabase/components/Icon.react"; import HeaderTabs from "./HeaderTabs.react"; import Activity from "./Activity.react"; @@ -12,6 +11,7 @@ import RecentViews from "./RecentViews.react"; import CardFilters from "./CardFilters.react"; import Smile from './Smile.react'; + export default class Homepage extends Component { constructor(props) { diff --git a/resources/frontend_client/app/home/home.controllers.js b/resources/frontend_client/app/home/home.controllers.js index eb49c99ca5f..8e53ccf80b5 100644 --- a/resources/frontend_client/app/home/home.controllers.js +++ b/resources/frontend_client/app/home/home.controllers.js @@ -8,6 +8,7 @@ import thunkMidleware from "redux-thunk"; import HomepageApp from './containers/HomepageApp.react'; import * as reducers from './reducers'; +import { setSelectedTab } from './actions'; // import { devTools, persistState } from 'redux-devtools'; // import { LogMonitor } from 'redux-devtools/lib/react'; @@ -32,7 +33,7 @@ var HomeControllers = angular.module('metabase.home.controllers', [ 'metabase.metabase.services' ]); -HomeControllers.controller('Homepage', ['$scope', '$location', function($scope, $location) { +HomeControllers.controller('Homepage', ['$scope', '$location', '$route', '$routeParams', function($scope, $location, $route, $routeParams) { $scope.Component = HomepageApp; $scope.props = { user: $scope.user, @@ -45,6 +46,35 @@ HomeControllers.controller('Homepage', ['$scope', '$location', function($scope, // TODO: reflect onboarding state // $scope.monitor = LogMonitor; + + // mildly hacky way to prevent reloading controllers as the URL changes + var route = $route.current; + $scope.$on('$locationChangeSuccess', function (event) { + var newParams = $route.current.params; + var oldParams = route.params; + + if ($route.current.$$route.controller === 'Homepage') { + $route.current = route; + + angular.forEach(oldParams, function(value, key) { + delete $route.current.params[key]; + delete $routeParams[key]; + }); + angular.forEach(newParams, function(value, key) { + $route.current.params[key] = value; + $routeParams[key] = value; + }); + } + }); + + $scope.routeParams = $routeParams; + $scope.$watch('routeParams', function() { + if ($scope.routeParams.questions === true) { + $scope.store.dispatch(setSelectedTab('cards')); + } else { + $scope.store.dispatch(setSelectedTab('activity')); + } + }, true); }]); -- GitLab