[ARVADOS-WORKBENCH2] updated: 1.3.0-121-g6e0c648

Git user git at public.curoverse.com
Fri Dec 14 10:43:22 EST 2018


Summary of changes:
 src/common/formatters.ts                           |  4 +-
 src/store/advanced-tab/advanced-tab.ts             |  2 +-
 src/views-components/data-explorer/renderers.tsx   | 64 ++++++----------------
 .../data-explorer/with-resources.tsx               | 24 ++++++++
 .../compute-node-panel/compute-node-panel-root.tsx | 24 ++++----
 .../compute-node-panel/compute-node-panel.tsx      |  2 +-
 6 files changed, 59 insertions(+), 61 deletions(-)
 create mode 100644 src/views-components/data-explorer/with-resources.tsx

       via  6e0c6489bc761bac498ff4a77dc1bcd777594c67 (commit)
      from  ca091dbfbc7df1a3f81eca2b16925b3225d43138 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 6e0c6489bc761bac498ff4a77dc1bcd777594c67
Author: Janicki Artur <artur.janicki at contractors.roche.com>
Date:   Fri Dec 14 16:43:13 2018 +0100

    Change code after CR
    
    Feature #14602_admin_compute_node_paginations
    
    Arvados-DCO-1.1-Signed-off-by: Janicki Artur <artur.janicki at contractors.roche.com>

diff --git a/src/common/formatters.ts b/src/common/formatters.ts
index 5383c66..ae50ee8 100644
--- a/src/common/formatters.ts
+++ b/src/common/formatters.ts
@@ -8,9 +8,9 @@ export const formatDate = (isoDate?: string) => {
     if (isoDate) {
         const date = new Date(isoDate);
         const text = date.toLocaleString();
-        return text === 'Invalid Date' ? "" : text;
+        return text === 'Invalid Date' ? "(none)" : text;
     }
-    return "";
+    return "(none)";
 };
 
 export const formatFileSize = (size?: number) => {
diff --git a/src/store/advanced-tab/advanced-tab.ts b/src/store/advanced-tab/advanced-tab.ts
index da3f5c9..0cb1c74 100644
--- a/src/store/advanced-tab/advanced-tab.ts
+++ b/src/store/advanced-tab/advanced-tab.ts
@@ -252,7 +252,7 @@ export const openAdvancedTabDialog = (uuid: string) =>
                     resourceKind: ComputeNodeData.COMPUTE_NODE,
                     resourcePrefix: ResourcePrefix.COMPUTE_NODES,
                     resourceKindProperty: ComputeNodeData.PROPERTIES,
-                    property: dataComputeNode!.properties
+                    property: dataComputeNode ? dataComputeNode.properties : {}
                 });
                 dispatch<any>(initAdvancedTabDialog(advanceDataComputeNode));
                 break;
diff --git a/src/views-components/data-explorer/renderers.tsx b/src/views-components/data-explorer/renderers.tsx
index 9b9a5bb..b74e8af 100644
--- a/src/views-components/data-explorer/renderers.tsx
+++ b/src/views-components/data-explorer/renderers.tsx
@@ -25,9 +25,7 @@ import { UserResource } from '~/models/user';
 import { toggleIsActive, toggleIsAdmin } from '~/store/users/users-actions';
 import { LinkResource } from '~/models/link';
 import { navigateTo } from '~/store/navigation/navigation-action';
-import { Link } from 'react-router-dom';
-import { NodeResource } from '../../models/node';
-import { NodeInfo } from '~/models/node';
+import { withResource, getDataFromResource } from './with-resources';
 
 const renderName = (item: { name: string; uuid: string, kind: string }) =>
     <Grid container alignItems="center" wrap="nowrap" spacing={16}>
@@ -194,58 +192,32 @@ export const ResourceUsername = connect(
     })(renderUsername);
 
 // Compute Node Resources
-const renderNodeDate = (date?: string) =>
-    <Typography noWrap>{formatDate(date) || '(none)'}</Typography>;
+const renderNodeDate = (date: string) =>
+    <Typography noWrap>{formatDate(date)}</Typography>;
 
-const renderNodeData = (property?: string) => 
-    <Typography noWrap>{property || '(none)'}</Typography>;
+const renderNodeData = (data: string) => {
+    return <Typography noWrap>{data}</Typography>;
+};
 
-const renderNodeInfo = (item: { info: NodeInfo }) =>
-    <Typography>
-        {JSON.stringify(item.info, null, 4)}
-    </Typography>;
+const renderNodeInfo = (data: string) => {
+    return <Typography>{JSON.stringify(data, null, 4)}</Typography>;
+};
 
-export const ResourceNodeInfo = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<NodeResource>(props.uuid)(state.resources);
-        return resource || { info: {} };
-    })(renderNodeInfo);
+export const ComputeNodeInfo = withResource(({ resource }) => renderNodeInfo(getDataFromResource('info', resource)));
 
-export const ResourceNodeDomain = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<NodeResource>(props.uuid)(state.resources);
-        return { property: resource ? resource.domain : '' };
-    })((props: { property: string }) => renderNodeData(props.property));
+export const ComputeNodeUuid = withResource(({ resource }) => renderNodeData(getDataFromResource('uuid', resource)));
 
-export const ResourceNodeFirstPingAt = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<NodeResource>(props.uuid)(state.resources);
-        return { date: resource ? resource.firstPingAt : '' };
-    })((props: { date: string }) => renderNodeDate(props.date));
+export const ComputeNodeDomain = withResource(({ resource }) => renderNodeData(getDataFromResource('domain', resource)));
 
-export const ResourceNodeHostname = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<NodeResource>(props.uuid)(state.resources);
-        return { property: resource ? resource.hostname : '' };
-    })((props: { property: string }) => renderNodeData(props.property));
+export const ComputeNodeFirstPingAt = withResource(({ resource }) => renderNodeDate(getDataFromResource('firstPingAt', resource)));
 
-export const ResourceNodeIpAddress = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<NodeResource>(props.uuid)(state.resources);
-        return { property: resource ? resource.ipAddress : '' };
-    })((props: { property: string }) => renderNodeData(props.property));
+export const ComputeNodeHostname = withResource(({ resource }) => renderNodeData(getDataFromResource('hostname', resource)));
 
-export const ResourceNodeJobUuid = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<NodeResource>(props.uuid)(state.resources);
-        return { property: resource ? resource.jobUuid : '' };
-    })((props: { property: string }) => renderNodeData(props.property));
+export const ComputeNodeIpAddress = withResource(({ resource }) => renderNodeData(getDataFromResource('ipAddress', resource)));
 
-export const ResourceNodeLastPingAt = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<NodeResource>(props.uuid)(state.resources);
-        return { date: resource ? resource.lastPingAt : '' };
-    })((props: { date: string }) => renderNodeDate(props.date));
+export const ComputeNodeJobUuid = withResource(({ resource }) => renderNodeData(getDataFromResource('jobUuid', resource)));
+
+export const ComputeNodeLastPingAt = withResource(({ resource }) => renderNodeDate(getDataFromResource('lastPingAt', resource)));
 
 // Links Resources
 const renderLinkName = (item: { name: string }) =>
diff --git a/src/views-components/data-explorer/with-resources.tsx b/src/views-components/data-explorer/with-resources.tsx
new file mode 100644
index 0000000..f6670bd
--- /dev/null
+++ b/src/views-components/data-explorer/with-resources.tsx
@@ -0,0 +1,24 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from 'react';
+import { connect } from 'react-redux';
+import { RootState } from '~/store/store';
+import { getResource } from '~/store/resources/resources';
+import { Resource } from '~/models/resource';
+
+interface WithResourceProps {
+    resource?: Resource;
+}
+
+export const withResource = (component: React.ComponentType<WithResourceProps & { uuid: string }>) =>
+    connect<WithResourceProps>(
+        (state: RootState, props: { uuid: string }): WithResourceProps => ({
+            resource: getResource(props.uuid)(state.resources)
+        })
+    )(component);
+
+export const getDataFromResource = (property: string, resource?: Resource) => {
+    return resource && resource[property] ? resource[property] : '(none)';
+};
diff --git a/src/views/compute-node-panel/compute-node-panel-root.tsx b/src/views/compute-node-panel/compute-node-panel-root.tsx
index 1a525d8..feaadb5 100644
--- a/src/views/compute-node-panel/compute-node-panel-root.tsx
+++ b/src/views/compute-node-panel/compute-node-panel-root.tsx
@@ -11,8 +11,8 @@ import { DataColumns } from '~/components/data-table/data-table';
 import { SortDirection } from '~/components/data-table/data-column';
 import { createTree } from '~/models/tree';
 import { 
-    ResourceUuid, ResourceNodeInfo, ResourceNodeDomain, ResourceNodeHostname, ResourceNodeJobUuid,
-    ResourceNodeFirstPingAt, ResourceNodeLastPingAt, ResourceNodeIpAddress
+    ComputeNodeUuid, ComputeNodeInfo, ComputeNodeDomain, ComputeNodeHostname, ComputeNodeJobUuid,
+    ComputeNodeFirstPingAt, ComputeNodeLastPingAt, ComputeNodeIpAddress
 } from '~/views-components/data-explorer/renderers';
 import { ResourcesState } from '~/store/resources/resources';
 
@@ -33,7 +33,7 @@ export const computeNodePanelColumns: DataColumns<string> = [
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <ResourceNodeInfo uuid={uuid} />
+        render: uuid => <ComputeNodeInfo uuid={uuid} />
     },
     {
         name: ComputeNodePanelColumnNames.UUID,
@@ -41,52 +41,54 @@ export const computeNodePanelColumns: DataColumns<string> = [
         configurable: true,
         sortDirection: SortDirection.NONE,
         filters: createTree(),
-        render: uuid => <ResourceUuid uuid={uuid} />
+        render: uuid => <ComputeNodeUuid uuid={uuid} />
     },
     {
         name: ComputeNodePanelColumnNames.DOMAIN,
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <ResourceNodeDomain uuid={uuid} />
+        render: uuid => <ComputeNodeDomain uuid={uuid} />
     },
     {
         name: ComputeNodePanelColumnNames.FIRST_PING_AT,
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <ResourceNodeFirstPingAt uuid={uuid} />
+        render: uuid => <ComputeNodeFirstPingAt uuid={uuid} />
     },
     {
         name: ComputeNodePanelColumnNames.HOSTNAME,
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <ResourceNodeHostname uuid={uuid} />
+        render: uuid => <ComputeNodeHostname uuid={uuid} />
     },
     {
         name: ComputeNodePanelColumnNames.IP_ADDRESS,
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <ResourceNodeIpAddress uuid={uuid} />
+        render: uuid => <ComputeNodeIpAddress uuid={uuid} />
     },
     {
         name: ComputeNodePanelColumnNames.JOB,
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <ResourceNodeJobUuid uuid={uuid} />
+        render: uuid => <ComputeNodeJobUuid uuid={uuid} />
     },
     {
         name: ComputeNodePanelColumnNames.LAST_PING_AT,
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <ResourceNodeLastPingAt uuid={uuid} />
+        render: uuid => <ComputeNodeLastPingAt uuid={uuid} />
     }
 ];
 
+const DEFAULT_MESSAGE = 'Your compute node list is empty.';
+
 export interface ComputeNodePanelRootActionProps {
     onItemClick: (item: string) => void;
     onContextMenu: (event: React.MouseEvent<HTMLElement>, item: string) => void;
@@ -111,6 +113,6 @@ export const ComputeNodePanelRoot = (props: ComputeNodePanelRootProps) => {
         dataTableDefaultView={
             <DataTableDefaultView
                 icon={ShareMeIcon}
-                messages={['Your compute node list is empty.']} />
+                messages={[DEFAULT_MESSAGE]} />
         } />;
 };
\ No newline at end of file
diff --git a/src/views/compute-node-panel/compute-node-panel.tsx b/src/views/compute-node-panel/compute-node-panel.tsx
index 77a6abe..a531b2d 100644
--- a/src/views/compute-node-panel/compute-node-panel.tsx
+++ b/src/views/compute-node-panel/compute-node-panel.tsx
@@ -10,7 +10,7 @@ import {
     ComputeNodePanelRootDataProps,
     ComputeNodePanelRootActionProps
 } from '~/views/compute-node-panel/compute-node-panel-root';
-import { openComputeNodeContextMenu, resourceKindToContextMenuKind } from '~/store/context-menu/context-menu-actions';
+import { openComputeNodeContextMenu } from '~/store/context-menu/context-menu-actions';
 
 const mapStateToProps = (state: RootState): ComputeNodePanelRootDataProps => {
     return {

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list