From 9b3ba7149b865bc58be7eed284ae98be77a25d8f Mon Sep 17 00:00:00 2001 From: Jon Rea Date: Tue, 19 Jun 2018 13:11:49 -0400 Subject: [PATCH] Bug 1466676 - Refactor all lodash .finds to ES6 (#3623) --- ui/js/controllers/perf/alerts.js | 31 ++++++------- ui/js/controllers/perf/compare.js | 48 ++++++++++---------- ui/js/controllers/perf/dashboard.js | 58 ++++++++++++------------ ui/js/controllers/perf/graphs.js | 70 ++++++++++++++--------------- ui/js/models/perf/alerts.js | 9 ++-- ui/js/models/resultset.js | 9 ++-- ui/js/models/resultsets_store.js | 51 +++++++++------------ ui/js/services/perf/compare.js | 20 ++++----- 8 files changed, 145 insertions(+), 151 deletions(-) diff --git a/ui/js/controllers/perf/alerts.js b/ui/js/controllers/perf/alerts.js index 2a492721baf..02e1c26ba81 100644 --- a/ui/js/controllers/perf/alerts.js +++ b/ui/js/controllers/perf/alerts.js @@ -22,7 +22,8 @@ perf.factory('PhBugs', [ fileBug: function (alertSummary) { $http.get(getApiUrl(`/performance/bug-template/?framework=${alertSummary.framework}`)).then(function (response) { const template = response.data[0]; - const repo = _.find($rootScope.repos, { name: alertSummary.repository }); + const repo = $rootScope.repos.find(repo => + repo.name === alertSummary.repository); const compiledText = $interpolate(template.text)({ revisionHref: repo.getPushLogHref(alertSummary.resultSetMetadata.revision), alertHref: window.location.origin + '/perf.html#/alerts?id=' + @@ -132,7 +133,7 @@ perf.controller( related_summary_id: newId, }).then(() => { const summariesToUpdate = [alertSummary].concat( - _.find(allAlertSummaries, alertSummary => + allAlertSummaries.find(alertSummary => alertSummary.id === newId) || []); $q.all(summariesToUpdate.map(alertSummary => alertSummary.update(), )).then(() => $uibModalInstance.close('downstreamed')); @@ -168,7 +169,7 @@ perf.controller( }).then(function () { // FIXME: duplication with downstream alerts controller const summariesToUpdate = [alertSummary].concat( - _.find(allAlertSummaries, alertSummary => + allAlertSummaries.find(alertSummary => alertSummary.id === newId) || []); $q.all(summariesToUpdate.map(alertSummary => alertSummary.update(), )).then(() => $uibModalInstance.close('downstreamed')); @@ -389,7 +390,7 @@ perf.controller('AlertsCtrl', [ // but other summaries affected by the change const summariesToUpdate = [alertSummary].concat(( alertSummary.alerts.filter(alert => alert.selected).map( - alert => (_.find($scope.alertSummaries, alertSummary => + alert => ($scope.alertSummaries.find(alertSummary => alertSummary.id === alert.related_summary_id) || []), )).reduce((a, b) => [...a, ...b], [])); @@ -443,9 +444,9 @@ perf.controller('AlertsCtrl', [ resultSet.push_timestamp * 1000, thDateFormat); // want at least 14 days worth of results for relative comparisons const timeRange = phTimeRangeValues[repo] ? phTimeRangeValues[repo] : phDefaultTimeRangeValue; - resultSet.timeRange = Math.max(timeRange, _.find( - phTimeRanges.map(timeRange => timeRange.value), - (t => ((Date.now() / 1000.0) - resultSet.push_timestamp) < t))); + resultSet.timeRange = Math.max(timeRange, + phTimeRanges.map(timeRange => timeRange.value).find( + t => ((Date.now() / 1000.0) - resultSet.push_timestamp) < t)); resultSetToSummaryMap[repo][resultSet.id].forEach( (summary) => { if (summary.push_id === resultSet.id) { @@ -461,8 +462,8 @@ perf.controller('AlertsCtrl', [ // for all complete summaries, fill in job and pushlog links // and downstream summaries alertSummaries.forEach((summary) => { - const repo = _.find($rootScope.repos, - { name: summary.repository }); + const repo = $rootScope.repos.find(repo => + repo.name === summary.repository); if (summary.prevResultSetMetadata && summary.resultSetMetadata) { @@ -583,12 +584,12 @@ perf.controller('AlertsCtrl', [ $scope.optionCollectionMap = optionCollectionMap; })]).then(function () { $scope.filterOptions = { - status: _.find($scope.statuses, { - id: parseInt($stateParams.status), - }) || $scope.statuses[0], - framework: _.find($scope.frameworks, { - id: parseInt($stateParams.framework), - }) || $scope.frameworks[0], + status: $scope.statuses.find(status => + status.id === parseInt($stateParams.status), + ) || $scope.statuses[0], + framework: $scope.frameworks.find(fw => + fw.id === parseInt($stateParams.framework), + ) || $scope.frameworks[0], filter: $stateParams.filter || '', hideImprovements: $stateParams.hideImprovements !== undefined && parseInt($stateParams.hideImprovements), diff --git a/ui/js/controllers/perf/compare.js b/ui/js/controllers/perf/compare.js index bad49ad8e6c..38c0b51d9c5 100644 --- a/ui/js/controllers/perf/compare.js +++ b/ui/js/controllers/perf/compare.js @@ -30,12 +30,12 @@ perf.controller('CompareChooserCtrl', [ return defaultValue; }; - $scope.originalProject = _.find(projects, { - name: getParameter('originalProject', phCompareDefaultOriginalRepo), - }) || projects[0]; - $scope.newProject = _.find(projects, { - name: getParameter('newProject', phCompareDefaultNewRepo), - }) || projects[0]; + $scope.originalProject = projects.find(project => + project.name === getParameter('originalProject', phCompareDefaultOriginalRepo), + ) || projects[0]; + $scope.newProject = projects.find(project => + project.name === getParameter('newProject', phCompareDefaultNewRepo), + ) || projects[0]; $scope.originalRevision = getParameter('originalRevision', ''); $scope.newRevision = getParameter('newRevision', ''); @@ -153,12 +153,12 @@ perf.controller('CompareResultsCtrl', [ $scope.newStddevVariance[platform] = { values: [], lowerIsBetter: true, frameworkID: $scope.filterOptions.framework.id }; } - const oldSig = _.find(Object.keys(rawResultsMap), function (sig) { - return rawResultsMap[sig].name === testName && rawResultsMap[sig].platform === platform; - }); - const newSig = _.find(Object.keys(newRawResultsMap), function (sig) { - return newRawResultsMap[sig].name === testName && newRawResultsMap[sig].platform === platform; - }); + const oldSig = Object.keys(rawResultsMap).find(sig => + rawResultsMap[sig].name === testName && rawResultsMap[sig].platform === platform, + ); + const newSig = Object.keys(newRawResultsMap).find(sig => + newRawResultsMap[sig].name === testName && newRawResultsMap[sig].platform === platform, + ); const cmap = PhCompare.getCounterMap(testName, rawResultsMap[oldSig], newRawResultsMap[newSig]); if (cmap.isEmpty) { @@ -428,9 +428,9 @@ perf.controller('CompareResultsCtrl', [ } } $scope.filterOptions = { - framework: _.find($scope.frameworks, { - id: parseInt($stateParams.framework), - }) || $scope.frameworks[0], + framework: $scope.frameworks.find(fw => + fw.id === parseInt($stateParams.framework), + ) || $scope.frameworks[0], filter: $stateParams.filter || '', showOnlyImportant: Boolean($stateParams.showOnlyImportant !== undefined && parseInt($stateParams.showOnlyImportant)), @@ -455,9 +455,9 @@ perf.controller('CompareResultsCtrl', [ verifyPromises.push(verifyRevision($scope.originalProject, $scope.originalRevision, 'original')); } else { $scope.timeRanges = phTimeRanges; - $scope.selectedTimeRange = _.find($scope.timeRanges, { - value: ($stateParams.selectedTimeRange) ? parseInt($stateParams.selectedTimeRange) : phCompareBaseLineDefaultTimeRange, - }); + $scope.selectedTimeRange = $scope.timeRanges.find(timeRange => + timeRange.value === ($stateParams.selectedTimeRange ? parseInt($stateParams.selectedTimeRange) : phCompareBaseLineDefaultTimeRange), + ); } $q.all(verifyPromises).then(function () { if ($scope.errors.length > 0) { @@ -532,9 +532,9 @@ perf.controller('CompareSubtestResultsCtrl', [ let tempsig; // If no data for a given platform, or test, display N/A in table if (resultsMap) { - tempsig = _.find(Object.keys(resultsMap), function (sig) { - return resultsMap[sig].name === page; - }); + tempsig = Object.keys(resultsMap).find(sig => + resultsMap[sig].name === page, + ); } else { tempsig = 'undefined'; resultsMap = {}; @@ -652,9 +652,9 @@ perf.controller('CompareSubtestResultsCtrl', [ verifyPromises.push(verifyRevision($scope.originalProject, $scope.originalRevision, 'original')); } else { $scope.timeRanges = phTimeRanges; - $scope.selectedTimeRange = _.find($scope.timeRanges, { - value: ($stateParams.selectedTimeRange) ? parseInt($stateParams.selectedTimeRange) : phCompareBaseLineDefaultTimeRange, - }); + $scope.selectedTimeRange = $scope.timeRanges.find(timeRange => + timeRange.value === ($stateParams.selectedTimeRange ? parseInt($stateParams.selectedTimeRange) : phCompareBaseLineDefaultTimeRange), + ); } $q.all(verifyPromises).then(function () { diff --git a/ui/js/controllers/perf/dashboard.js b/ui/js/controllers/perf/dashboard.js index ab11a631676..080631f164e 100644 --- a/ui/js/controllers/perf/dashboard.js +++ b/ui/js/controllers/perf/dashboard.js @@ -33,9 +33,9 @@ perf.controller('dashCtrl', [ $scope.dataLoading = true; $scope.timeRanges = phTimeRanges; - $scope.selectedTimeRange = _.find($scope.timeRanges, { - value: ($stateParams.timerange) ? parseInt($stateParams.timerange) : defaultTimeRange, - }); + $scope.selectedTimeRange = $scope.timeRanges.find(timeRange => + timeRange.value === ($stateParams.timerange ? parseInt($stateParams.timerange) : defaultTimeRange), + ); $scope.revision = $stateParams.revision; $scope.topic = $stateParams.topic; @@ -104,7 +104,8 @@ perf.controller('dashCtrl', [ return PhSeries.getSeriesData($scope.selectedRepo.name, params).then(function (seriesData) { _.forIn(seriesData, function (data, signature) { - const series = _.find(seriesChunk, { signature: signature }); + const series = seriesChunk.find(series => + series.signature === signature); const type = (series.options.indexOf($scope.variantDataOpt) >= 0) ? 'variant' : 'base'; resultsMap[type][signature] = { platform: series.platform, @@ -121,14 +122,14 @@ perf.controller('dashCtrl', [ $scope.testList.forEach(function (testName) { $scope.titles[testName] = testName; $scope.platformList.forEach(function (platform) { - const baseSig = _.find(Object.keys(resultsMap.base), function (sig) { - return resultsMap.base[sig].name === testName && - resultsMap.base[sig].platform === platform; - }); - const variantSig = _.find(Object.keys(resultsMap.variant), function (sig) { - return resultsMap.variant[sig].name === testName && - resultsMap.variant[sig].platform === platform; - }); + const baseSig = Object.keys(resultsMap.base).find(sig => + resultsMap.base[sig].name === testName && + resultsMap.base[sig].platform === platform, + ); + const variantSig = Object.keys(resultsMap.variant).find(sig => + resultsMap.variant[sig].name === testName && + resultsMap.variant[sig].platform === platform, + ); if (variantSig && baseSig) { const cmap = PhCompare.getCounterMap( testName, resultsMap.base[baseSig], @@ -206,9 +207,9 @@ perf.controller('dashCtrl', [ ThRepositoryModel.load().then(function () { $scope.projects = $rootScope.repos; - $scope.selectedRepo = _.find($scope.projects, { - name: $stateParams.repo ? $stateParams.repo : thDefaultRepo, - }); + $scope.selectedRepo = $scope.projects.find(project => + project.name === ($stateParams.repo ? $stateParams.repo : thDefaultRepo), + ); $scope.$watchGroup([ 'filterOptions.filter', @@ -247,9 +248,9 @@ perf.controller('dashSubtestCtrl', [ $scope.dataLoading = true; $scope.timeRanges = phTimeRanges; - $scope.selectedTimeRange = _.find(phTimeRanges, { - value: ($stateParams.timerange) ? parseInt($stateParams.timerange) : defaultTimeRange, - }); + $scope.selectedTimeRange = phTimeRanges.find(timeRange => + timeRange.value === ($stateParams.timerange ? parseInt($stateParams.timerange) : defaultTimeRange), + ); $scope.revision = $stateParams.revision; $scope.topic = $stateParams.topic; @@ -306,7 +307,8 @@ perf.controller('dashSubtestCtrl', [ return PhSeries.getSeriesData( $scope.selectedRepo.name, params).then(function (seriesData) { _.forIn(seriesData, function (data, signature) { - const series = _.find(seriesList, { signature: signature }); + const series = seriesList.find(series => + series.signature === signature); const type = (series.options.indexOf($scope.variantDataOpt) >= 0) ? 'variant' : 'base'; resultsMap[type][signature] = { platform: series.platform, @@ -321,12 +323,12 @@ perf.controller('dashSubtestCtrl', [ $scope.dataLoading = false; const subtestNames = resultsMap.base.map(results => results.name); subtestNames.forEach(function (subtestName) { - const baseSig = _.find(Object.keys(resultsMap.base), function (sig) { - return resultsMap.base[sig].name === subtestName; - }); - const variantSig = _.find(Object.keys(resultsMap.variant), function (sig) { - return resultsMap.variant[sig].name === subtestName; - }); + const baseSig = Object.keys(resultsMap.base).find(sig => + resultsMap.base[sig].name === subtestName, + ); + const variantSig = Object.keys(resultsMap.variant).find(sig => + resultsMap.variant[sig].name === subtestName, + ); if (variantSig && baseSig) { const cmap = PhCompare.getCounterMap( subtestName, resultsMap.base[baseSig], @@ -382,9 +384,9 @@ perf.controller('dashSubtestCtrl', [ ThRepositoryModel.load().then(function () { $scope.projects = $rootScope.repos; - $scope.selectedRepo = _.find($scope.projects, { - name: $stateParams.repo ? $stateParams.repo : thDefaultRepo, - }); + $scope.selectedRepo = $scope.projects.find(project => + project.name === ($stateParams.repo ? $stateParams.repo : thDefaultRepo), + ); $scope.$watchGroup([ 'filterOptions.filter', diff --git a/ui/js/controllers/perf/graphs.js b/ui/js/controllers/perf/graphs.js index fcea58bbea0..cec16f65193 100644 --- a/ui/js/controllers/perf/graphs.js +++ b/ui/js/controllers/perf/graphs.js @@ -48,8 +48,8 @@ perf.controller('GraphsCtrl', [ }).then(function (alertSummaryData) { $scope.creatingAlert = false; - var alertSummary = _.find(alertSummaryData.results, - { id: alertSummaryId }); + var alertSummary = alertSummaryData.results.find(result => + result.id === alertSummaryId); $scope.tooltipContent.alertSummary = alertSummary; dataPoint.series.relatedAlertSummaries = alertSummaryData.results; @@ -99,16 +99,16 @@ perf.controller('GraphsCtrl', [ $scope.ttHideTimer = null; } - var phSeries = _.find($scope.seriesList, - s => s.id === dataPoint.signatureId); + var phSeries = $scope.seriesList.find( + s => s.id === dataPoint.signatureId); // we need the flot data for calculating values/deltas and to know where // on the graph to position the tooltip var flotIndex = phSeries.flotSeries.idData.indexOf( dataPoint.id); var flotData = { - series: _.find($scope.plot.getData(), - fs => fs.thSeries.id === dataPoint.signatureId), + series: $scope.plot.getData().find( + fs => fs.thSeries.id === dataPoint.signatureId), pointIndex: flotIndex, }; // check if there are any points belonging to earlier pushes in this @@ -130,19 +130,16 @@ perf.controller('GraphsCtrl', [ var v0 = (prevFlotDataPointIndex >= 0) ? flotSeriesData[prevFlotDataPointIndex][1] : v; var dv = v - v0; var dvp = v / v0 - 1; - var alertSummary = _.find(phSeries.relatedAlertSummaries, function (alertSummary) { - return alertSummary.push_id === dataPoint.resultSetId; - }); + var alertSummary = phSeries.relatedAlertSummaries.find(alertSummary => + alertSummary.push_id === dataPoint.resultSetId); var alert; if (alertSummary) { - alert = _.find(alertSummary.alerts, - function (alert) { - return alert.series_signature.id === phSeries.id; - }); + alert = alertSummary.alerts(alert => + alert.series_signature.id === phSeries.id); } $scope.tooltipContent = { - project: _.find($rootScope.repos, - { name: phSeries.projectName }), + project: $rootScope.repos.find(repo => + repo.name === phSeries.projectName), revisionUrl: `/#/jobs?repo=${phSeries.projectName}`, prevResultSetId: prevResultSetId, resultSetId: dataPoint.resultSetId, @@ -353,7 +350,7 @@ perf.controller('GraphsCtrl', [ function zoomGraph() { // If either x or y exists then there is zoom set in the variable if ($scope.zoom.x) { - if (_.find($scope.seriesList, function (series) { return series.visible; })) { + if ($scope.seriesList.find(series => series.visible)) { $.each($scope.plot.getXAxes(), function (_, axis) { var opts = axis.options; opts.min = $scope.zoom.x[0]; @@ -613,7 +610,8 @@ perf.controller('GraphsCtrl', [ }; }).then(function () { series.relatedAlertSummaries = []; - var repo = _.find($rootScope.repos, { name: series.projectName }); + var repo = $rootScope.repos.find(repo => + repo.name === series.projectName); return PhAlerts.getAlertSummaries({ signatureId: series.id, repository: repo.id }).then(function (data) { @@ -722,12 +720,12 @@ perf.controller('GraphsCtrl', [ ThRepositoryModel.load().then(function () { if ($stateParams.timerange) { - var timeRange = _.find(phTimeRanges, - { value: parseInt($stateParams.timerange) }); + var timeRange = phTimeRanges.find(timeRange => + timeRange.value === parseInt($stateParams.timerange)); $scope.myTimerange = timeRange; } else { - $scope.myTimerange = _.find(phTimeRanges, - { value: phDefaultTimeRangeValue }); + $scope.myTimerange = phTimeRanges.find(timeRange => + timeRange.value === phDefaultTimeRangeValue); } $scope.timeRangeChanged = function () { $scope.loadingGraphs = true; @@ -817,7 +815,8 @@ perf.controller('GraphsCtrl', [ } if (option !== undefined) { - var series = _.find($scope.seriesList, { signature: seriesSignature }); + var series = $scope.seriesList.find(series => + series.signature === seriesSignature); options = { option: option, relatedSeries: series }; } @@ -890,9 +889,8 @@ perf.controller('TestChooserCtrl', ['$scope', '$uibModalInstance', defaultPlatform, $q, testsDisplayed, options) { $scope.timeRange = timeRange; $scope.projects = projects; - $scope.selectedProject = _.find(projects, { - name: defaultProjectName || thDefaultRepo, - }); + $scope.selectedProject = projects.find(project => + project.name === defaultProjectName || thDefaultRepo); $scope.includeSubtests = false; $scope.loadingTestData = false; $scope.loadingRelatedSignatures = true; @@ -930,8 +928,8 @@ perf.controller('TestChooserCtrl', ['$scope', '$uibModalInstance', $scope.selectedTestsToAdd.forEach(function (testValue) { // selectedTestsToAdd is stored in JSON format, need to convert // it back to an object and get the actual value - var test = _.find($scope.testsToAdd, JSON.parse(testValue)); - + var test = $scope.testsToAdd.find(test => + test.id === JSON.parse(testValue).id); // add test back to unselected test list if we're browsing for // the current project/platform, otherwise just discard it if (test.projectName === $scope.selectedProject.name && @@ -951,7 +949,8 @@ perf.controller('TestChooserCtrl', ['$scope', '$uibModalInstance', $scope.selectedTestSignatures.forEach(function (signature) { // Add the selected tests to the selected test list $scope.testsToAdd.push(_.clone( - _.find($scope.unselectedTestList, { signature: signature }))); + $scope.unselectedTestList.find(test => + test.signature === signature))); // Remove the added tests from the unselected test list _.remove($scope.unselectedTestList, { signature: signature }); @@ -983,7 +982,8 @@ perf.controller('TestChooserCtrl', ['$scope', '$uibModalInstance', var branchList = []; thPerformanceBranches.forEach(function (branch) { if (branch !== originalSeries.projectName) { - branchList.push(_.find($scope.projects, { name: branch })); + branchList.push($scope.projects.find(project => + project.name === branch)); } }); // get each project's series data from remote and use promise to @@ -1047,13 +1047,13 @@ perf.controller('TestChooserCtrl', ['$scope', '$uibModalInstance', PhFramework.getFrameworkList().then(function (frameworkList) { $scope.frameworkList = frameworkList; if (defaultFrameworkId) { - $scope.selectedFramework = _.find($scope.frameworkList, { - id: defaultFrameworkId, - }); + $scope.selectedFramework = $scope.frameworkList.find(framework => + framework.id === defaultFrameworkId, + ); } else { - $scope.selectedFramework = _.find($scope.frameworkList, { - name: phDefaultFramework, - }); + $scope.selectedFramework = $scope.frameworkList.find(framework => + framework.name === phDefaultFramework, + ); } $scope.updateTestInput = function () { $scope.addTestDataDisabled = true; diff --git a/ui/js/models/perf/alerts.js b/ui/js/models/perf/alerts.js index 3c96adcb5c7..1da3f001733 100644 --- a/ui/js/models/perf/alerts.js +++ b/ui/js/models/perf/alerts.js @@ -24,8 +24,8 @@ treeherder.factory('PhAlerts', [ { includePlatformInName: true }); }; Alert.prototype.getStatusText = function () { - return _.result(_.find(phAlertStatusMap, { id: this.status }), - 'text'); + return _.result(phAlertStatusMap.find(status => + status.id === this.status), 'text'); }; Alert.prototype.getGraphsURL = function (timeRange, alertRepository, performanceFrameworkId) { @@ -99,7 +99,7 @@ treeherder.factory('PhAlerts', [ AlertSummary.prototype.getIssueTrackerUrl = function () { if (!this.bug_number) { return; } if (this.issue_tracker) { - const issueTrackerUrl = _.find(issueTrackers, { id: this.issue_tracker }).issueTrackerUrl; + const issueTrackerUrl = issueTrackers.find(tracker => tracker.id === this.issue_tracker).issueTrackerUrl; return issueTrackerUrl + this.bug_number; } }; @@ -245,7 +245,8 @@ treeherder.factory('PhAlerts', [ })); }; AlertSummary.prototype.getStatusText = function () { - return _.find(phAlertSummaryStatusMap, { id: this.status }).text; + return phAlertSummaryStatusMap.find(status => + status.id === this.status).text; }; AlertSummary.prototype.saveNotes = function () { diff --git a/ui/js/models/resultset.js b/ui/js/models/resultset.js index 8f67d9f0ac6..5ad2e5d9cb4 100644 --- a/ui/js/models/resultset.js +++ b/ui/js/models/resultset.js @@ -196,7 +196,8 @@ treeherder.factory('ThResultSetModel', ['$http', '$location', // In this case we have actions.json tasks if (results) { - const missingtask = _.find(results.actions, { name: 'run-missing-tests' }); + const missingtask = results.actions.find(action => + action.name === 'run-missing-tests'); // We'll fall back to actions.yaml if this isn't true if (missingtask) { return tcactions.submit({ @@ -219,7 +220,8 @@ treeherder.factory('ThResultSetModel', ['$http', '$location', // In this case we have actions.json tasks if (results) { - const talostask = _.find(results.actions, { name: 'run-all-talos' }); + const talostask = results.actions.find(action => + action.name === 'run-all-talos'); // We'll fall back to actions.yaml if this isn't true if (talostask) { return tcactions.submit({ @@ -289,7 +291,8 @@ treeherder.factory('ThResultSetModel', ['$http', '$location', const actionTaskId = slugid(); // In this case we have actions.json tasks if (results) { - const addjobstask = _.find(results.actions, { name: 'add-new-jobs' }); + const addjobstask = results.actions.find(action => + action.name === 'add-new-jobs'); // We'll fall back to actions.yaml if this isn't true if (addjobstask) { return tcactions.submit({ diff --git a/ui/js/models/resultsets_store.js b/ui/js/models/resultsets_store.js index 8eb22bbf43e..a41efd3e331 100644 --- a/ui/js/models/resultsets_store.js +++ b/ui/js/models/resultsets_store.js @@ -194,8 +194,8 @@ treeherder.factory('ThResultSetStore', [ // jobList contains jobs belonging to the same push, // so we can pick the result_set_id from the first job var pushId = jobList[0].result_set_id; - var push = _.find(repoData.pushes, - { id: pushId }); + var push = repoData.pushes.find(push => + push.id === pushId); if (_.isUndefined(push)) { return $q.defer().resolve(); } if (_.has(push, 'jobList')) { // get the new job ids @@ -272,22 +272,11 @@ treeherder.factory('ThResultSetStore', [ } }; - var getAllShownJobs = (pushId) => { - var shownJobs = []; - - var addIfShown = function (jMap) { - if (pushId && jMap.job_obj.result_set_id !== pushId) { - return; - } - if (jMap.job_obj.visible) { - shownJobs.push(jMap.job_obj); - } - return false; - }; - _.find(getJobMap(), addIfShown); - - return shownJobs; - }; + const getAllShownJobs = pushId => ( + Object.values(getJobMap()) + .map(jobEl => jobEl.job_obj) + .filter(job => job.result_set_id === pushId && job.visible) + ); var getSelectedJob = function () { return { @@ -753,16 +742,16 @@ treeherder.factory('ThResultSetStore', [ var getGeckoDecisionJob = function (pushId) { const push = getPush(pushId); - const platform = _.find(push.platforms, { - name: 'gecko-decision', - groups: [{ jobs: [{ state: 'completed', job_type_symbol: 'D' }] }] }); + const platform = push.platforms.find(platform => + platform.name === 'gecko-decision' && + platform.groups[0].jobs.find(job => + job.state === 'completed' && job.job_type_symbol === 'D')); if (platform) { // Gecko Decision Task has been completed. // Let's fetch the URL of full-tasks-graph.json // This extra search is important to avoid confusion with Action Tasks - return _.find(platform.groups[0].jobs, { job_type_symbol: 'D' }); + return platform.groups[0].jobs.find(job => job.job_type_symbol === 'D'); } - return undefined; }; @@ -928,10 +917,10 @@ treeherder.factory('ThResultSetStore', [ for (var i = 0; i < jobList.length; i++) { // search for the right platform var job = jobList[i]; - var platform = _.find(groupedJobs.platforms, function (platform) { - return job.platform === platform.name && - job.platform_option === platform.option; - }); + var platform = groupedJobs.platforms.find(platform => + job.platform === platform.name && + job.platform_option === platform.option, + ); if (_.isUndefined(platform)) { platform = { name: job.platform, @@ -943,10 +932,10 @@ treeherder.factory('ThResultSetStore', [ var groupInfo = getJobGroupInfo(job); // search for the right group - var group = _.find(platform.groups, function (group) { - return (groupInfo.symbol === group.symbol && - groupInfo.tier === group.tier); - }); + var group = platform.groups.find(group => + groupInfo.symbol === group.symbol && + groupInfo.tier === group.tier, + ); if (_.isUndefined(group)) { group = { name: groupInfo.name, diff --git a/ui/js/services/perf/compare.js b/ui/js/services/perf/compare.js index 76079ec672d..3fdda30f921 100644 --- a/ui/js/services/perf/compare.js +++ b/ui/js/services/perf/compare.js @@ -199,7 +199,7 @@ treeherder.factory('PhCompare', [ timeRange = Math.round(now - timeRange); // now figure out which predefined set of data we can query from - const phTimeRange = _.find(phTimeRanges, function (i) { return timeRange <= i.value; }); + const phTimeRange = phTimeRanges.find(i => timeRange <= i.value); return phTimeRange.value; }, @@ -219,11 +219,11 @@ treeherder.factory('PhCompare', [ } $http.get(getApiUrl('/repository/')).then(function (response) { - if (!_.find(response.data, { name: originalProject })) { + if (!response.data.find(project => project.name === originalProject)) { errors.push("Invalid project, doesn't exist: " + originalProject); } - if (!_.find(response.data, { name: newProject })) { + if (!response.data.find(project => project.name === newProject)) { errors.push("Invalid project, doesn't exist: " + newProject); } }); @@ -244,7 +244,8 @@ treeherder.factory('PhCompare', [ // with description (name/platform) and values. // The values are later processed at getCounterMap as the data arguments. _.forIn(seriesData, (data, signatureHash) => { - const signature = _.find(seriesList, { signature: signatureHash }); + const signature = seriesList.find(series => + series.signature === signatureHash); if (signature) { // helper method to either return the push // index (if getting per-push results) or @@ -290,13 +291,10 @@ treeherder.factory('PhCompare', [ if (resultSets) { if (!timeRange) { graphsLink += '&timerange=' + _.max( - resultSets.map(resultSet => ( - _.find( - phTimeRanges.map(range => range.value), - t => (((Date.now() / 1000.0) - - resultSet.push_timestamp) < t - )) - ), + resultSets.map(resultSet => + phTimeRanges.map(range => range.value).find(t => + ((Date.now() / 1000.0) - + resultSet.push_timestamp) < t), )); } else { graphsLink += '&timerange=' + timeRange;