15530: Ensure local cluster is also in store remoteHostsConfig
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Tue, 15 Oct 2019 20:19:12 +0000 (16:19 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Tue, 15 Oct 2019 20:19:12 +0000 (16:19 -0400)
Various code looks up or iterates over clusters in the federation
using remoteHostsConfig.  Local cluster may get special handling but
still works better if we make sure it is present in the object.

src/store/auth/auth-reducer.ts
src/views/search-results-panel/search-results-panel-view.tsx

index b4e73e1eb42d1b16c2241343f93b93cb28fbba0a..e932b97dd1920f3f6f75a2fd0fb81707e1208956 100644 (file)
@@ -47,7 +47,8 @@ export const authReducer = (services: ServiceRepository) => (state = initialStat
                 localCluster: config.uuidPrefix,
                 remoteHosts: { ...config.remoteHosts, [config.uuidPrefix]: new URL(config.rootUrl).host },
                 homeCluster: config.loginCluster || config.uuidPrefix,
-                loginCluster: config.loginCluster
+                loginCluster: config.loginCluster,
+                remoteHostsConfig: { ...state.remoteHostsConfig, [config.uuidPrefix]: config }
             };
         },
         REMOTE_CLUSTER_CONFIG: ({ config }) => {
index ca954217532279d31ab88a245544870d0ed2a156..59119403893f456e74bac818346d9c1f6ae82d2e 100644 (file)
@@ -23,6 +23,8 @@ import { getInitialResourceTypeFilters } from '~/store/resource-type-filters/res
 import { SearchResultsPanelProps } from "./search-results-panel";
 import { Link } from 'react-router-dom';
 import { Routes } from '~/routes/routes';
+import { StyleRulesCallback, withStyles, WithStyles } from '@material-ui/core';
+import { ArvadosTheme } from '~/common/custom-theme';
 
 export enum SearchResultsPanelColumnNames {
     CLUSTER = "Cluster",
@@ -35,6 +37,14 @@ export enum SearchResultsPanelColumnNames {
     LAST_MODIFIED = "Last modified"
 }
 
+export type CssRules = 'siteManagerLink';
+
+const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
+    siteManagerLink: {
+        marginLeft: theme.spacing.unit * 2
+    }
+});
+
 export interface WorkflowPanelFilter extends DataTableFilterItem {
     type: ResourceKind | ContainerRequestState;
 }
@@ -100,22 +110,23 @@ export const searchResultsPanelColumns: DataColumns<string> = [
     }
 ];
 
-export const SearchResultsPanelView = (props: SearchResultsPanelProps) => {
-    const homeCluster = props.user.uuid.substr(0, 5);
-    const loggedIn = props.sessions.filter((ss) => ss.loggedIn);
-    return <DataExplorer
-        id={SEARCH_RESULTS_PANEL_ID}
-        onRowClick={props.onItemClick}
-        onRowDoubleClick={props.onItemDoubleClick}
-        onContextMenu={props.onContextMenu}
-        contextMenuColumn={false}
-        hideSearchInput
-        title={
-            <div>{(props.localCluster !== homeCluster && loggedIn.length === 1) ?
-                <span>Searching local cluster {props.localCluster} only.  To search multiple clusters, <a href={props.remoteHostsConfig[homeCluster] && props.remoteHostsConfig[homeCluster].workbench2Url}> start from your home Workbench.</a></span> :
-                <span>Searching clusters: {loggedIn.map((ss) => <span key={ss.clusterId}> {ss.clusterId}</span>)}</span>}
-                <Link to={Routes.SITE_MANAGER} style={{ marginLeft: "2em" }}>Site Manager</Link>
-            </div>
-        }
-    />;
-};
+export const SearchResultsPanelView = withStyles(styles, { withTheme: true })(
+    (props: SearchResultsPanelProps & WithStyles<CssRules, true>) => {
+        const homeCluster = props.user.uuid.substr(0, 5);
+        const loggedIn = props.sessions.filter((ss) => ss.loggedIn);
+        return <DataExplorer
+            id={SEARCH_RESULTS_PANEL_ID}
+            onRowClick={props.onItemClick}
+            onRowDoubleClick={props.onItemDoubleClick}
+            onContextMenu={props.onContextMenu}
+            contextMenuColumn={false}
+            hideSearchInput
+            title={
+                <div>{(props.localCluster !== homeCluster && loggedIn.length === 1) ?
+                    <span>Searching local cluster {props.localCluster} only.  To search multiple clusters, <a href={props.remoteHostsConfig[homeCluster] && props.remoteHostsConfig[homeCluster].workbench2Url}> start from your home Workbench.</a></span> :
+                    <span>Searching clusters: {loggedIn.map((ss) => <span key={ss.clusterId}> {ss.clusterId}</span>)}</span>}
+                    <Link to={Routes.SITE_MANAGER} className={props.classes.siteManagerLink}>Site Manager</Link>
+                </div>
+            }
+        />;
+    });