[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