From 48040f229ac44576c7983b7fa3f89036bbbffbd9 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Fri, 28 Feb 2020 11:06:21 -0800 Subject: [PATCH] web ui: fix buildset display when no builds This corrects a problem in the error handler when some request variables are undefined. This also handles the case of a buildset with no builds; currently the REST API omits the builds value in that case, so this updates usages to handle it. Change-Id: Ifa09990d08257244f17e77e5c8141bfd8c1cc4d7 --- web/src/actions/build.js | 8 ++- web/src/actions/errors.js | 2 +- web/src/containers/build/Buildset.jsx | 87 ++++++++++++++------------- 3 files changed, 51 insertions(+), 46 deletions(-) diff --git a/web/src/actions/build.js b/web/src/actions/build.js index 6898f84d82..41a5b1b3b1 100644 --- a/web/src/actions/build.js +++ b/web/src/actions/build.js @@ -332,9 +332,11 @@ const fetchBuildset = (tenant, buildset) => dispatch => { dispatch(requestBuildset()) return API.fetchBuildset(tenant.apiPrefix, buildset) .then(response => { - response.data.builds.forEach(build => { - dispatch(receiveBuild(build.uuid, build)) - }) + if (response.data.builds) { + response.data.builds.forEach(build => { + dispatch(receiveBuild(build.uuid, build)) + }) + } dispatch(receiveBuildset(buildset, response.data)) }) .catch(error => dispatch(failedBuildset(error))) diff --git a/web/src/actions/errors.js b/web/src/actions/errors.js index 01a70b77b6..3464dcb9c1 100644 --- a/web/src/actions/errors.js +++ b/web/src/actions/errors.js @@ -26,7 +26,7 @@ export const addError = error => ({ export const addApiError = error => { const d = { - url: error.request.responseURL || error.url + url: (error && error.request && error.request.responseURL) || error.url } if (error.response) { d.text = error.response.statusText diff --git a/web/src/containers/build/Buildset.jsx b/web/src/containers/build/Buildset.jsx index 89f246c836..42d4f1e480 100644 --- a/web/src/containers/build/Buildset.jsx +++ b/web/src/containers/build/Buildset.jsx @@ -56,27 +56,29 @@ class Buildset extends React.Component { } }) - buildset.builds.forEach(build => { - const row = [] - buildColumns.forEach(column => { - if (column === 'job') { - row.push(build.job_name) - } else if (column === 'duration') { - row.push(moment.duration(build.duration, 'seconds') - .format('h [hr] m [min] s [sec]')) - } else if (column === 'voting') { - row.push(build.voting ? 'true' : 'false') - } else if (column === 'result') { - row.push( - {build.result} - ) - } else { - row.push(build[column]) - } + if (buildset.builds) { + buildset.builds.forEach(build => { + const row = [] + buildColumns.forEach(column => { + if (column === 'job') { + row.push(build.job_name) + } else if (column === 'duration') { + row.push(moment.duration(build.duration, 'seconds') + .format('h [hr] m [min] s [sec]')) + } else if (column === 'voting') { + row.push(build.voting ? 'true' : 'false') + } else if (column === 'result') { + row.push( + {build.result} + ) + } else { + row.push(build[column]) + } + }) + buildRows.push(row) }) - buildRows.push(row) - }) + } return ( @@ -95,30 +97,31 @@ class Buildset extends React.Component { - - Builds - - - - - {buildColumns.map(item => ( - - ))} - - - - {buildset.builds.map((item, idx) => ( - - {buildRows[idx].map((item, idx) => ( - + {buildset.builds && + + Builds + +
{item}
{item}
+ + + {buildColumns.map(item => ( + ))} - ))} - -
{item}
-
-
- + + + {buildset.builds.map((item, idx) => ( + + {buildRows[idx].map((item, idx) => ( + {item} + ))} + + ))} + + + + + }
) }