From 9bc9d2baf00d4f1d7182ff971ddb42b2fbb13aff Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Tue, 9 Apr 2019 14:20:26 -0400
Subject: [PATCH 01/43] remove document count to batched structure
---
client/app/queue/AppealDocumentCount.jsx | 60 +++++++++++------------
client/app/queue/AttorneyTaskListView.jsx | 24 ++++++++-
2 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/client/app/queue/AppealDocumentCount.jsx b/client/app/queue/AppealDocumentCount.jsx
index deebccb206a..f2a0934afdd 100644
--- a/client/app/queue/AppealDocumentCount.jsx
+++ b/client/app/queue/AppealDocumentCount.jsx
@@ -3,7 +3,7 @@ import React from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import ApiUtil from '../util/ApiUtil';
+// import ApiUtil from '../util/ApiUtil';
import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
@@ -15,35 +15,35 @@ const documentCountStyling = css({
});
class AppealDocumentCount extends React.PureComponent {
- componentDidMount = () => {
- const {
- appeal,
- docCountForAppeal
- } = this.props;
-
- if (appeal.isPaperCase) {
- return;
- }
-
- if (docCountForAppeal && docCountForAppeal.docCount) {
- return;
- }
-
- const requestOptions = {
- withCredentials: true,
- timeout: { response: 5 * 60 * 1000 }
- };
-
- this.props.loadAppealDocCount(this.props.externalId);
-
- ApiUtil.get(`/appeals/${this.props.externalId}/document_count`, requestOptions).then((response) => {
- const resp = JSON.parse(response.text);
-
- this.props.setAppealDocCount(this.props.externalId, resp.document_count);
- }, () => {
- this.props.errorFetchingDocumentCount(this.props.externalId);
- });
- }
+ // componentDidMount = () => {
+ // const {
+ // appeal,
+ // docCountForAppeal
+ // } = this.props;
+
+ // if (appeal.isPaperCase) {
+ // return;
+ // }
+
+ // if (docCountForAppeal && docCountForAppeal.docCount) {
+ // return;
+ // }
+
+ // const requestOptions = {
+ // withCredentials: true,
+ // timeout: { response: 5 * 60 * 1000 }
+ // };
+
+ // this.props.loadAppealDocCount(this.props.externalId);
+
+ // ApiUtil.get(`/appeals/${this.props.externalId}/document_count`, requestOptions).then((response) => {
+ // const resp = JSON.parse(response.text);
+
+ // this.props.setAppealDocCount(this.props.externalId, resp.document_count);
+ // }, () => {
+ // this.props.errorFetchingDocumentCount(this.props.externalId);
+ // });
+ // }
render = () => {
const {
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index ca56b47ee7c..34afed41db8 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -11,6 +11,8 @@ import QueueOrganizationDropdown from './components/QueueOrganizationDropdown';
import AppSegment from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/AppSegment';
import Link from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/Link';
import Alert from '../components/Alert';
+import ApiUtil from '../util/ApiUtil';
+import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
import {
completeTasksByAssigneeCssIdSelector,
@@ -52,6 +54,22 @@ class AttorneyTaskListView extends React.PureComponent {
detail: COPY.TASKS_NEED_ASSIGNMENT_ERROR_MESSAGE
});
}
+
+ const requestOptions = {
+ withCredentials: true,
+ timeout: { response: 5 * 60 * 1000 }
+ };
+
+ this.props.loadAppealDocCount(this.props.externalId);
+
+ ApiUtil.get(`/appeals/${this.props.workableTasks[0].externalAppealId}/document_count`,
+ requestOptions).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ this.props.setAppealDocCount(this.props.externalId, resp.document_count);
+ }, () => {
+ this.props.errorFetchingDocumentCount(this.props.externalId);
+ });
};
render = () => {
@@ -63,6 +81,7 @@ class AttorneyTaskListView extends React.PureComponent {
{COPY.NO_CASES_IN_QUEUE_LINK_TEXT}.
: '';
+ console.log(this.props.workableTasks[0].externalAppealId, 'duh');
const tabs = [
{
label: sprintf(
@@ -141,7 +160,10 @@ const mapDispatchToProps = (dispatch) => ({
resetErrorMessages,
resetSuccessMessages,
resetSaveState,
- showErrorMessage
+ showErrorMessage,
+ loadAppealDocCount,
+ setAppealDocCount,
+ errorFetchingDocumentCount
}, dispatch)
});
From 5832a6ce1900a210e0ebdae825150085da37f6d1 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Tue, 9 Apr 2019 17:24:51 -0400
Subject: [PATCH 02/43] Save work so far
---
app/controllers/appeals_controller.rb | 21 ++++++++++++++++-----
client/app/queue/AttorneyTaskListView.jsx | 7 +++++--
config/routes.rb | 5 +++++
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 9021b55facb..edb4b1fc672 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require 'json'
+
class AppealsController < ApplicationController
before_action :react_routed
before_action :set_application, only: [:document_count]
@@ -35,11 +37,16 @@ def show_case_list
end
def document_count
- render json: { document_count: appeal.number_of_documents }
- rescue Caseflow::Error::EfolderAccessForbidden => e
- render(e.serialize_response)
- rescue StandardError => e
- handle_non_critical_error("document_count", e)
+ ids = params[:appeal_ids].split(',')
+ document_counts_by_id = {}
+ ids.each do |id|
+ document_counts_by_id[id] = appeal_by_ids(id).number_of_documents
+ end
+ render json: { document_counts_by_id: document_counts_by_id }
+ rescue Caseflow::Error::EfolderAccessForbidden => e
+ render(e.serialize_response)
+ rescue StandardError => e
+ handle_non_critical_error("document_count", e)
end
def power_of_attorney
@@ -105,6 +112,10 @@ def appeal
@appeal ||= Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(params[:appeal_id])
end
+ def appeal_by_ids(id)
+ @appeal_by_ids ||= Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
+ end
+
def url_appeal_uuid
params[:appeal_id]
end
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index 34afed41db8..7162fa6c3fa 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -62,9 +62,13 @@ class AttorneyTaskListView extends React.PureComponent {
this.props.loadAppealDocCount(this.props.externalId);
- ApiUtil.get(`/appeals/${this.props.workableTasks[0].externalAppealId}/document_count`,
+ const ids = this.props.workableTasks.map((task) => task.externalAppealId);
+
+ console.log(this.props.workableTasks, 'the tasks');
+ ApiUtil.get(`/appeals/${ids}/document_count`,
requestOptions).then((response) => {
const resp = JSON.parse(response.text);
+ // refactor this based on batching.
this.props.setAppealDocCount(this.props.externalId, resp.document_count);
}, () => {
@@ -81,7 +85,6 @@ class AttorneyTaskListView extends React.PureComponent {
{COPY.NO_CASES_IN_QUEUE_LINK_TEXT}.
: '';
- console.log(this.props.workableTasks[0].externalAppealId, 'duh');
const tabs = [
{
label: sprintf(
diff --git a/config/routes.rb b/config/routes.rb
index 0f75122f548..6d1d50eaabf 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -97,6 +97,11 @@
end
end
+ resources :appeals, param: :appeal_ids do
+ member do
+ get :document_count
+ end
+ end
resources :appeals, param: :appeal_id, only: [:index, :show, :edit] do
member do
get :document_count
From 20c68862832512adecc623a2c006acadf2de8579 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Tue, 9 Apr 2019 17:28:28 -0400
Subject: [PATCH 03/43] progress ...
---
app/controllers/appeals_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index edb4b1fc672..4c04745e217 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -113,7 +113,7 @@ def appeal
end
def appeal_by_ids(id)
- @appeal_by_ids ||= Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
end
def url_appeal_uuid
From 1820b348633a096bd786fd3a4aa416e9e290a460 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Tue, 9 Apr 2019 17:33:55 -0400
Subject: [PATCH 04/43] more progress...
---
app/controllers/appeals_controller.rb | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 4c04745e217..fa6e3c28819 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -40,7 +40,8 @@ def document_count
ids = params[:appeal_ids].split(',')
document_counts_by_id = {}
ids.each do |id|
- document_counts_by_id[id] = appeal_by_ids(id).number_of_documents
+ doc_count = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id).number_of_documents
+ document_counts_by_id[id] = doc_count
end
render json: { document_counts_by_id: document_counts_by_id }
rescue Caseflow::Error::EfolderAccessForbidden => e
@@ -112,10 +113,6 @@ def appeal
@appeal ||= Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(params[:appeal_id])
end
- def appeal_by_ids(id)
- Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
- end
-
def url_appeal_uuid
params[:appeal_id]
end
From a53c16b4692d870880dab26f5bb4fe1fb8b489b0 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Tue, 9 Apr 2019 17:38:48 -0400
Subject: [PATCH 05/43] send all tasks
---
client/app/queue/AttorneyTaskListView.jsx | 9 ++++++---
config/routes.rb | 1 -
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index 7162fa6c3fa..b03528c774b 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -62,9 +62,12 @@ class AttorneyTaskListView extends React.PureComponent {
this.props.loadAppealDocCount(this.props.externalId);
- const ids = this.props.workableTasks.map((task) => task.externalAppealId);
+ const ids = [
+ ...this.props.workableTasks.map((task) => task.externalAppealId),
+ ...this.props.onHoldTasks.map((task) => task.externalAppealId),
+ ...this.props.completedTasks.map((task) => task.externalAppealId)
+ ];
- console.log(this.props.workableTasks, 'the tasks');
ApiUtil.get(`/appeals/${ids}/document_count`,
requestOptions).then((response) => {
const resp = JSON.parse(response.text);
@@ -72,7 +75,7 @@ class AttorneyTaskListView extends React.PureComponent {
this.props.setAppealDocCount(this.props.externalId, resp.document_count);
}, () => {
- this.props.errorFetchingDocumentCount(this.props.externalId);
+ this.props.errorFetchingDocumentCount(ids);
});
};
diff --git a/config/routes.rb b/config/routes.rb
index 6d1d50eaabf..19306ef19f5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -104,7 +104,6 @@
end
resources :appeals, param: :appeal_id, only: [:index, :show, :edit] do
member do
- get :document_count
get :veteran
get :power_of_attorney
get :hearings
From 7888f5820fa41b2f4bf59f1d0fda5ec3abd2b6e5 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Tue, 9 Apr 2019 17:40:43 -0400
Subject: [PATCH 06/43] combine tasks
---
client/app/queue/AttorneyTaskListView.jsx | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index b03528c774b..267804f55af 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -45,9 +45,10 @@ class AttorneyTaskListView extends React.PureComponent {
componentDidMount = () => {
this.props.clearCaseSelectSearch();
this.props.resetErrorMessages();
+ const combinedTasks = [...this.props.workableTasks, ...this.props.onHoldTasks, ...this.props.completedTasks];
if (_.some(
- [...this.props.workableTasks, ...this.props.onHoldTasks, ...this.props.completedTasks],
+ combinedTasks,
(task) => !task.taskId)) {
this.props.showErrorMessage({
title: COPY.TASKS_NEED_ASSIGNMENT_ERROR_TITLE,
@@ -63,9 +64,7 @@ class AttorneyTaskListView extends React.PureComponent {
this.props.loadAppealDocCount(this.props.externalId);
const ids = [
- ...this.props.workableTasks.map((task) => task.externalAppealId),
- ...this.props.onHoldTasks.map((task) => task.externalAppealId),
- ...this.props.completedTasks.map((task) => task.externalAppealId)
+ ...combinedTasks.map((task) => task.externalAppealId)
];
ApiUtil.get(`/appeals/${ids}/document_count`,
From 7b4327e04e817694a2c4235eeac0a892385cc4c2 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Tue, 9 Apr 2019 21:14:02 -0400
Subject: [PATCH 07/43] finish batching of document count requests
---
client/app/queue/AppealDocumentCount.jsx | 51 +++++------------------
client/app/queue/AttorneyTaskListView.jsx | 7 ++--
client/app/queue/QueueActions.js | 9 ++--
client/app/queue/reducers.js | 41 ++++++++----------
4 files changed, 35 insertions(+), 73 deletions(-)
diff --git a/client/app/queue/AppealDocumentCount.jsx b/client/app/queue/AppealDocumentCount.jsx
index f2a0934afdd..32fea846218 100644
--- a/client/app/queue/AppealDocumentCount.jsx
+++ b/client/app/queue/AppealDocumentCount.jsx
@@ -2,8 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-
-// import ApiUtil from '../util/ApiUtil';
+import _ from 'lodash';
import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
@@ -15,48 +14,20 @@ const documentCountStyling = css({
});
class AppealDocumentCount extends React.PureComponent {
- // componentDidMount = () => {
- // const {
- // appeal,
- // docCountForAppeal
- // } = this.props;
-
- // if (appeal.isPaperCase) {
- // return;
- // }
-
- // if (docCountForAppeal && docCountForAppeal.docCount) {
- // return;
- // }
-
- // const requestOptions = {
- // withCredentials: true,
- // timeout: { response: 5 * 60 * 1000 }
- // };
-
- // this.props.loadAppealDocCount(this.props.externalId);
-
- // ApiUtil.get(`/appeals/${this.props.externalId}/document_count`, requestOptions).then((response) => {
- // const resp = JSON.parse(response.text);
-
- // this.props.setAppealDocCount(this.props.externalId, resp.document_count);
- // }, () => {
- // this.props.errorFetchingDocumentCount(this.props.externalId);
- // });
- // }
-
render = () => {
const {
- docCountForAppeal,
- loadingText
+ docCountsByAppealId,
+ loadingText,
+ externalId
} = this.props;
+ const isLoadingOrError = loadingText && (docCountsByAppealId.loading || docCountsByAppealId.error);
- if (docCountForAppeal) {
- if (docCountForAppeal.docCount) {
- return docCountForAppeal.docCount;
- } else if (loadingText && (docCountForAppeal.loading || docCountForAppeal.error)) {
- return docCountForAppeal.error || Loading number of docs...;
+ if (!_.isEmpty(docCountsByAppealId)) {
+ if (isLoadingOrError) {
+ return docCountsByAppealId.error || Loading number of docs...;
}
+
+ return docCountsByAppealId[externalId];
}
return null;
@@ -73,7 +44,7 @@ const mapStateToProps = (state, ownProps) => {
return {
externalId,
- docCountForAppeal: state.queue.docCountForAppeal[externalId] || null
+ docCountsByAppealId: state.queue.docCountsByAppealId
};
};
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index 267804f55af..10147fab32f 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -61,18 +61,17 @@ class AttorneyTaskListView extends React.PureComponent {
timeout: { response: 5 * 60 * 1000 }
};
- this.props.loadAppealDocCount(this.props.externalId);
-
const ids = [
...combinedTasks.map((task) => task.externalAppealId)
];
+ this.props.loadAppealDocCount(ids);
+
ApiUtil.get(`/appeals/${ids}/document_count`,
requestOptions).then((response) => {
const resp = JSON.parse(response.text);
- // refactor this based on batching.
- this.props.setAppealDocCount(this.props.externalId, resp.document_count);
+ this.props.setAppealDocCount(resp.document_counts_by_id);
}, () => {
this.props.errorFetchingDocumentCount(ids);
});
diff --git a/client/app/queue/QueueActions.js b/client/app/queue/QueueActions.js
index 82e7a1f94ab..d73cee2baf8 100644
--- a/client/app/queue/QueueActions.js
+++ b/client/app/queue/QueueActions.js
@@ -145,11 +145,11 @@ export const getNewDocumentsForTask = (taskId) => (dispatch) => {
});
};
-export const loadAppealDocCount = (appealId) => (dispatch) => {
+export const loadAppealDocCount = (appealIds) => (dispatch) => {
dispatch({
type: ACTIONS.STARTED_DOC_COUNT_REQUEST,
payload: {
- appealId
+ appealIds
}
});
};
@@ -185,11 +185,10 @@ export const getAppealValue = (appealId, endpoint, name) => (dispatch) => {
});
};
-export const setAppealDocCount = (appealId, docCount) => ({
+export const setAppealDocCount = (docCountsByAppealId) => ({
type: ACTIONS.SET_APPEAL_DOC_COUNT,
payload: {
- appealId,
- docCount
+ docCountsByAppealId
}
});
diff --git a/client/app/queue/reducers.js b/client/app/queue/reducers.js
index b2561f69985..f3f4f9d65ed 100644
--- a/client/app/queue/reducers.js
+++ b/client/app/queue/reducers.js
@@ -24,7 +24,7 @@ export const initialState = {
appealDetails: {},
claimReviews: {},
editingIssue: {},
- docCountForAppeal: {},
+ docCountsByAppealId: {},
mostRecentlyHeldHearingForAppeal: {},
newDocsForAppeal: {},
newDocsForTask: {},
@@ -197,38 +197,31 @@ export const workQueueReducer = (state = initialState, action = {}) => {
case ACTIONS.STARTED_DOC_COUNT_REQUEST:
return {
...state,
- docCountForAppeal: {
- ...state.docCountForAppeal,
- [action.payload.appealId]: {
- ...state.docCountForAppeal[action.payload.appealId],
- error: null,
- loading: true
- }
+ docCountsByAppealId: {
+ ...state.docCountsByAppealId,
+ error: null,
+ loading: true
}
};
case ACTIONS.ERROR_ON_RECEIVE_DOCUMENT_COUNT:
return {
...state,
- docCountForAppeal: {
- ...state.docCountForAppeal,
- [action.payload.appealId]: {
- ...state.docCountForAppeal[action.payload.appealId],
- error: 'Failed to Load',
- loading: false
- }
+ docCountsByAppealId: {
+ ...state.docCountsByAppealId,
+ error: 'Failed to Load',
+ loading: false
}
};
case ACTIONS.SET_APPEAL_DOC_COUNT:
- return update(state, {
- docCountForAppeal: {
- [action.payload.appealId]: {
- $set: {
- docCount: action.payload.docCount,
- loading: false
- }
- }
+ return {
+ ...state,
+ docCountsByAppealId: {
+ ...action.payload.docCountsByAppealId,
+ error: null,
+ loading: false
}
- });
+ };
+
case ACTIONS.SET_MOST_RECENTLY_HELD_HEARING_FOR_APPEAL:
return update(state, {
mostRecentlyHeldHearingForAppeal: {
From 5da19842f99fa2994b5c251f8b41f57ed3f31400 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 08:52:16 -0400
Subject: [PATCH 08/43] remove require
---
app/controllers/appeals_controller.rb | 2 --
1 file changed, 2 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index fa6e3c28819..9b86e95a37f 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'json'
-
class AppealsController < ApplicationController
before_action :react_routed
before_action :set_application, only: [:document_count]
From 6be8cb70047bb4604e1fc080be9b3b6bdbb79101 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 08:55:49 -0400
Subject: [PATCH 09/43] lint issues
---
app/controllers/appeals_controller.rb | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 9b86e95a37f..b56a86d0e3a 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -35,17 +35,17 @@ def show_case_list
end
def document_count
- ids = params[:appeal_ids].split(',')
+ ids = params[:appeal_ids].split(",")
document_counts_by_id = {}
- ids.each do |id|
- doc_count = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id).number_of_documents
+ ids.each do |id|
+ doc_count = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id).number_of_documents
document_counts_by_id[id] = doc_count
end
render json: { document_counts_by_id: document_counts_by_id }
- rescue Caseflow::Error::EfolderAccessForbidden => e
- render(e.serialize_response)
- rescue StandardError => e
- handle_non_critical_error("document_count", e)
+ rescue Caseflow::Error::EfolderAccessForbidden => e
+ render(e.serialize_response)
+ rescue StandardError => e
+ handle_non_critical_error("document_count", e)
end
def power_of_attorney
From 6f09feb51ee68814bb2fcf9ab912f2d3c9fbaf2c Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:02:47 -0400
Subject: [PATCH 10/43] code climate fix?
---
app/controllers/appeals_controller.rb | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index b56a86d0e3a..299b1c50685 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -38,8 +38,7 @@ def document_count
ids = params[:appeal_ids].split(",")
document_counts_by_id = {}
ids.each do |id|
- doc_count = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id).number_of_documents
- document_counts_by_id[id] = doc_count
+ document_counts_by_id[id] = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id).number_of_documents
end
render json: { document_counts_by_id: document_counts_by_id }
rescue Caseflow::Error::EfolderAccessForbidden => e
From dee6d10b80924731e20f6da476b19c2382bfb368 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:05:29 -0400
Subject: [PATCH 11/43] code climate fix?
---
app/controllers/appeals_controller.rb | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 299b1c50685..fa19ae39841 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -38,7 +38,7 @@ def document_count
ids = params[:appeal_ids].split(",")
document_counts_by_id = {}
ids.each do |id|
- document_counts_by_id[id] = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id).number_of_documents
+ document_counts_by_id[id] = appeal_by_id(id).number_of_documents
end
render json: { document_counts_by_id: document_counts_by_id }
rescue Caseflow::Error::EfolderAccessForbidden => e
@@ -110,6 +110,10 @@ def appeal
@appeal ||= Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(params[:appeal_id])
end
+ def appeal_by_id(id)
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
+ end
+
def url_appeal_uuid
params[:appeal_id]
end
From 7b990e70a4b7736f05818cb77c23975d8313a25f Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:07:39 -0400
Subject: [PATCH 12/43] code climate fix?
---
app/controllers/appeals_controller.rb | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index fa19ae39841..e5e2dfc5b29 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -35,11 +35,7 @@ def show_case_list
end
def document_count
- ids = params[:appeal_ids].split(",")
- document_counts_by_id = {}
- ids.each do |id|
- document_counts_by_id[id] = appeal_by_id(id).number_of_documents
- end
+ document_counts_by_id = build_document_counts_hash
render json: { document_counts_by_id: document_counts_by_id }
rescue Caseflow::Error::EfolderAccessForbidden => e
render(e.serialize_response)
@@ -47,6 +43,15 @@ def document_count
handle_non_critical_error("document_count", e)
end
+ def build_document_counts_hash
+ ids = params[:appeal_ids].split(",")
+ document_counts_by_id = {}
+ ids.each do |id|
+ document_counts_by_id[id] = appeal_by_id(id).number_of_documents
+ end
+ document_counts_by_id
+ end
+
def power_of_attorney
render json: {
representative_type: appeal.representative_type,
From a5f225fd9dcc459b74595ed43e6e5da299fcc7d4 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:12:10 -0400
Subject: [PATCH 13/43] remove statement and remove failing test since doc
counts are now loaded on page load
---
app/controllers/appeals_controller.rb | 3 +--
client/test/karma/queue/ColocatedTaskListView-test.js | 1 -
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index e5e2dfc5b29..dbf4588a2c4 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -35,8 +35,7 @@ def show_case_list
end
def document_count
- document_counts_by_id = build_document_counts_hash
- render json: { document_counts_by_id: document_counts_by_id }
+ render json: { document_counts_by_id: build_document_counts_hash }
rescue Caseflow::Error::EfolderAccessForbidden => e
render(e.serialize_response)
rescue StandardError => e
diff --git a/client/test/karma/queue/ColocatedTaskListView-test.js b/client/test/karma/queue/ColocatedTaskListView-test.js
index 0773f32ea72..37e5db92bc7 100644
--- a/client/test/karma/queue/ColocatedTaskListView-test.js
+++ b/client/test/karma/queue/ColocatedTaskListView-test.js
@@ -173,7 +173,6 @@ describe('ColocatedTaskListView', () => {
expect(docketNumber.text()).to.include(appeal.docketNumber);
expect(daysWaiting.text()).to.equal('1');
expect(documents.html()).to.include(`/reader/appeal/${task.externalAppealId}/documents`);
- expect(documents.text()).to.include('Loading number of docs...');
store.dispatch(errorFetchingDocumentCount(task.externalAppealId));
expect(wrapper.find('td').at(6).
From b9b01a7ce11df5bbfa0121f221eadd74492671a8 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:15:28 -0400
Subject: [PATCH 14/43] fix last code climate issue :-/
---
app/controllers/appeals_controller.rb | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index dbf4588a2c4..4d7892adf06 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -46,7 +46,9 @@ def build_document_counts_hash
ids = params[:appeal_ids].split(",")
document_counts_by_id = {}
ids.each do |id|
- document_counts_by_id[id] = appeal_by_id(id).number_of_documents
+ document_counts_by_id[id] =
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
+ .number_of_documents
end
document_counts_by_id
end
@@ -114,10 +116,6 @@ def appeal
@appeal ||= Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(params[:appeal_id])
end
- def appeal_by_id(id)
- Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
- end
-
def url_appeal_uuid
params[:appeal_id]
end
From 96fbe7da8998f64613382ea2a0f8d7b8f0458c47 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:16:35 -0400
Subject: [PATCH 15/43] rename route
---
app/controllers/appeals_controller.rb | 2 +-
config/routes.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 4d7892adf06..e117ee88352 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -34,7 +34,7 @@ def show_case_list
end
end
- def document_count
+ def document_counts_by_id
render json: { document_counts_by_id: build_document_counts_hash }
rescue Caseflow::Error::EfolderAccessForbidden => e
render(e.serialize_response)
diff --git a/config/routes.rb b/config/routes.rb
index 19306ef19f5..a32bec65e7d 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -99,7 +99,7 @@
resources :appeals, param: :appeal_ids do
member do
- get :document_count
+ get :document_counts_by_id
end
end
resources :appeals, param: :appeal_id, only: [:index, :show, :edit] do
From 2d86815f917c0a55cf599fe0d790ec62ca61d7a2 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:23:33 -0400
Subject: [PATCH 16/43] code climate is getting annoying
---
app/controllers/appeals_controller.rb | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index e117ee88352..3b0be48e3d4 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -36,10 +36,10 @@ def show_case_list
def document_counts_by_id
render json: { document_counts_by_id: build_document_counts_hash }
- rescue Caseflow::Error::EfolderAccessForbidden => e
- render(e.serialize_response)
- rescue StandardError => e
- handle_non_critical_error("document_count", e)
+ rescue Caseflow::Error::EfolderAccessForbidden => error
+ render(error.serialize_response)
+ rescue StandardError => error
+ handle_non_critical_error("document_count", error)
end
def build_document_counts_hash
From 13a2d95cc34716f23cffdcd4d9956d970cf91343 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:36:22 -0400
Subject: [PATCH 17/43] comment out test for now
---
client/app/queue/AppealDocumentCount.jsx | 2 +-
client/test/karma/queue/ColocatedTaskListView-test.js | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/client/app/queue/AppealDocumentCount.jsx b/client/app/queue/AppealDocumentCount.jsx
index 32fea846218..5e6ecb8a3cf 100644
--- a/client/app/queue/AppealDocumentCount.jsx
+++ b/client/app/queue/AppealDocumentCount.jsx
@@ -27,7 +27,7 @@ class AppealDocumentCount extends React.PureComponent {
return docCountsByAppealId.error || Loading number of docs...;
}
- return docCountsByAppealId[externalId];
+ return docCountsByAppealId[externalId] || null;
}
return null;
diff --git a/client/test/karma/queue/ColocatedTaskListView-test.js b/client/test/karma/queue/ColocatedTaskListView-test.js
index 37e5db92bc7..d5a77800b6f 100644
--- a/client/test/karma/queue/ColocatedTaskListView-test.js
+++ b/client/test/karma/queue/ColocatedTaskListView-test.js
@@ -177,10 +177,10 @@ describe('ColocatedTaskListView', () => {
store.dispatch(errorFetchingDocumentCount(task.externalAppealId));
expect(wrapper.find('td').at(6).
text()).to.include('Failed to Load');
-
- store.dispatch(setAppealDocCount(task.externalAppealId, 5));
- expect(wrapper.find('td').at(6).
- text()).to.include('5');
+ // need to update this test
+ // store.dispatch(setAppealDocCount(task.externalAppealId, 5));
+ // expect(wrapper.find('td').at(6).
+ // text()).to.include('5');
const onHoldDaysWaiting = cells.at(12);
From 04243d561211e4195f0e84e669cf2062dcbfd3d2 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 09:46:34 -0400
Subject: [PATCH 18/43] comment out test for now
---
client/test/karma/queue/ColocatedTaskListView-test.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/test/karma/queue/ColocatedTaskListView-test.js b/client/test/karma/queue/ColocatedTaskListView-test.js
index d5a77800b6f..c114859a2de 100644
--- a/client/test/karma/queue/ColocatedTaskListView-test.js
+++ b/client/test/karma/queue/ColocatedTaskListView-test.js
@@ -8,7 +8,7 @@ import moment from 'moment';
import thunk from 'redux-thunk';
import CO_LOCATED_ADMIN_ACTIONS from '../../../constants/CO_LOCATED_ADMIN_ACTIONS.json';
import rootReducer from '../../../app/queue/reducers';
-import { onReceiveQueue, receiveNewDocumentsForTask, errorFetchingDocumentCount, setAppealDocCount }
+import { onReceiveQueue, receiveNewDocumentsForTask, errorFetchingDocumentCount }
from '../../../app/queue/QueueActions';
import { setUserCssId } from '../../../app/queue/uiReducer/uiActions';
import { BrowserRouter } from 'react-router-dom';
From a4e8390a2c03ce0260cf695b29bc81f5a4000d34 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 11:20:33 -0400
Subject: [PATCH 19/43] update request with proper endpoint
---
client/app/queue/AttorneyTaskListView.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index 10147fab32f..65a152dbdf0 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -67,7 +67,7 @@ class AttorneyTaskListView extends React.PureComponent {
this.props.loadAppealDocCount(ids);
- ApiUtil.get(`/appeals/${ids}/document_count`,
+ ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
requestOptions).then((response) => {
const resp = JSON.parse(response.text);
From 3c0818de0ab979a10b0a75749a4e898292fe1d9e Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 12:34:43 -0400
Subject: [PATCH 20/43] fix routes file
---
config/routes.rb | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/config/routes.rb b/config/routes.rb
index a32bec65e7d..3f89d14be4e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -97,11 +97,6 @@
end
end
- resources :appeals, param: :appeal_ids do
- member do
- get :document_counts_by_id
- end
- end
resources :appeals, param: :appeal_id, only: [:index, :show, :edit] do
member do
get :veteran
@@ -115,6 +110,7 @@
end
end
match '/appeals/:appeal_id/edit/:any' => 'appeals#edit', via: [:get]
+ match '/appeals/:appeal_ids/document_counts_by_id/' => 'appeals#document_counts_by_id', via: [:get]
resources :beaam_appeals, only: [:index]
From ae8dfc74704773f0baab65eace7e74e4c25bd34e Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 13:13:27 -0400
Subject: [PATCH 21/43] apply changes to colocated task list view
---
client/app/queue/ColocatedTaskListView.jsx | 32 ++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/client/app/queue/ColocatedTaskListView.jsx b/client/app/queue/ColocatedTaskListView.jsx
index d67c1680136..1b439673f32 100644
--- a/client/app/queue/ColocatedTaskListView.jsx
+++ b/client/app/queue/ColocatedTaskListView.jsx
@@ -23,6 +23,8 @@ import {
import Alert from '../components/Alert';
import TabWindow from '../components/TabWindow';
+import ApiUtil from '../util/ApiUtil';
+import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
const containerStyles = css({
position: 'relative'
@@ -30,7 +32,27 @@ const containerStyles = css({
class ColocatedTaskListView extends React.PureComponent {
componentDidMount = () => {
+
this.props.clearCaseSelectSearch();
+ const requestOptions = {
+ withCredentials: true,
+ timeout: { response: 5 * 60 * 1000 }
+ };
+
+ const ids = [
+ ...this.props.combinedTasks.map((task) => task.externalAppealId)
+ ];
+
+ this.props.loadAppealDocCount(ids);
+
+ ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
+ requestOptions).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ this.props.setAppealDocCount(resp.document_counts_by_id);
+ }, () => {
+ this.props.errorFetchingDocumentCount(ids);
+ });
};
componentWillUnmount = () => this.props.hideSuccessMessage();
@@ -74,13 +96,19 @@ const mapStateToProps = (state) => {
success,
organizations: state.ui.organizations,
numNewTasks: newTasksByAssigneeCssIdSelector(state).length,
- numOnHoldTasks: onHoldTasksByAssigneeCssIdSelector(state).length
+ numOnHoldTasks: onHoldTasksByAssigneeCssIdSelector(state).length,
+ combinedTasks: [...newTasksByAssigneeCssIdSelector(state),
+ ...onHoldTasksByAssigneeCssIdSelector(state),
+ ...completeTasksByAssigneeCssIdSelector(state)]
};
};
const mapDispatchToProps = (dispatch) => bindActionCreators({
clearCaseSelectSearch,
- hideSuccessMessage
+ hideSuccessMessage,
+ loadAppealDocCount,
+ setAppealDocCount,
+ errorFetchingDocumentCount
}, dispatch);
export default (connect(mapStateToProps, mapDispatchToProps)(ColocatedTaskListView));
From bbc0dde524f3f63ca52a3dd06c1686a8ae47be63 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 13:45:03 -0400
Subject: [PATCH 22/43] DRY
---
client/app/queue/AttorneyTaskListView.jsx | 23 ++--------------------
client/app/queue/ColocatedTaskListView.jsx | 22 ++-------------------
client/app/queue/utils.js | 4 ++++
client/app/util/ApiUtil.js | 22 +++++++++++++++++++++
4 files changed, 30 insertions(+), 41 deletions(-)
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index 65a152dbdf0..f66aec2f1b6 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -11,7 +11,7 @@ import QueueOrganizationDropdown from './components/QueueOrganizationDropdown';
import AppSegment from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/AppSegment';
import Link from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/Link';
import Alert from '../components/Alert';
-import ApiUtil from '../util/ApiUtil';
+import { batchDocCountRequests } from '../util/ApiUtil';
import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
import {
@@ -55,26 +55,7 @@ class AttorneyTaskListView extends React.PureComponent {
detail: COPY.TASKS_NEED_ASSIGNMENT_ERROR_MESSAGE
});
}
-
- const requestOptions = {
- withCredentials: true,
- timeout: { response: 5 * 60 * 1000 }
- };
-
- const ids = [
- ...combinedTasks.map((task) => task.externalAppealId)
- ];
-
- this.props.loadAppealDocCount(ids);
-
- ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
- requestOptions).then((response) => {
- const resp = JSON.parse(response.text);
-
- this.props.setAppealDocCount(resp.document_counts_by_id);
- }, () => {
- this.props.errorFetchingDocumentCount(ids);
- });
+ batchDocCountRequests(this.props, combinedTasks);
};
render = () => {
diff --git a/client/app/queue/ColocatedTaskListView.jsx b/client/app/queue/ColocatedTaskListView.jsx
index 1b439673f32..9cb38593418 100644
--- a/client/app/queue/ColocatedTaskListView.jsx
+++ b/client/app/queue/ColocatedTaskListView.jsx
@@ -23,7 +23,7 @@ import {
import Alert from '../components/Alert';
import TabWindow from '../components/TabWindow';
-import ApiUtil from '../util/ApiUtil';
+import { batchDocCountRequests } from '../util/ApiUtil';
import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
const containerStyles = css({
@@ -34,25 +34,7 @@ class ColocatedTaskListView extends React.PureComponent {
componentDidMount = () => {
this.props.clearCaseSelectSearch();
- const requestOptions = {
- withCredentials: true,
- timeout: { response: 5 * 60 * 1000 }
- };
-
- const ids = [
- ...this.props.combinedTasks.map((task) => task.externalAppealId)
- ];
-
- this.props.loadAppealDocCount(ids);
-
- ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
- requestOptions).then((response) => {
- const resp = JSON.parse(response.text);
-
- this.props.setAppealDocCount(resp.document_counts_by_id);
- }, () => {
- this.props.errorFetchingDocumentCount(ids);
- });
+ batchDocCountRequests(this.props, this.props.combinedTasks);
};
componentWillUnmount = () => this.props.hideSuccessMessage();
diff --git a/client/app/queue/utils.js b/client/app/queue/utils.js
index b347155deec..98e2dbf7ea6 100644
--- a/client/app/queue/utils.js
+++ b/client/app/queue/utils.js
@@ -536,3 +536,7 @@ export const sortTaskList = (taskList) => {
new Date(prev.closedAt || prev.createdAt).getTime();
});
};
+
+export const mapTasksToExternalIds = (taskList) => {
+ return taskList.map((task) => task.externalAppealId);
+};
diff --git a/client/app/util/ApiUtil.js b/client/app/util/ApiUtil.js
index a1274bc2d4c..97e59b18b3b 100644
--- a/client/app/util/ApiUtil.js
+++ b/client/app/util/ApiUtil.js
@@ -4,6 +4,7 @@ import ReactOnRails from 'react-on-rails';
import StringUtil from './StringUtil';
import _ from 'lodash';
import { timeFunctionPromise } from '../util/PerfDebug';
+import { mapTasksToExternalIds } from '../queue/utils';
export const STANDARD_API_TIMEOUT_MILLISECONDS = 60 * 1000;
export const RESPONSE_COMPLETE_LIMIT_MILLISECONDS = 5 * 60 * 1000;
@@ -142,4 +143,25 @@ const ApiUtil = {
..._.mapValues(httpMethods, timeApiRequest)
};
+export const batchDocCountRequests = (props, tasks) => {
+
+ const requestOptions = {
+ withCredentials: true,
+ timeout: { response: 5 * 60 * 1000 }
+ };
+
+ const ids = mapTasksToExternalIds(tasks);
+
+ props.loadAppealDocCount(ids);
+
+ return ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
+ requestOptions).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ props.setAppealDocCount(resp.document_counts_by_id);
+ }, () => {
+ props.errorFetchingDocumentCount(ids);
+ });
+};
+
export default ApiUtil;
From d45b30ba82f5865eedb9931fa4c886e47a196159 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 13:49:38 -0400
Subject: [PATCH 23/43] DRY2
---
client/app/queue/ColocatedTaskListView.jsx | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/client/app/queue/ColocatedTaskListView.jsx b/client/app/queue/ColocatedTaskListView.jsx
index 9cb38593418..cfdd55c4f9d 100644
--- a/client/app/queue/ColocatedTaskListView.jsx
+++ b/client/app/queue/ColocatedTaskListView.jsx
@@ -73,15 +73,20 @@ class ColocatedTaskListView extends React.PureComponent {
const mapStateToProps = (state) => {
const { success } = state.ui.messages;
+ const newTasks = newTasksByAssigneeCssIdSelector(state);
+ const onHoldTasks = onHoldTasksByAssigneeCssIdSelector(state);
+ const completedTasks = completeTasksByAssigneeCssIdSelector(state);
return {
success,
organizations: state.ui.organizations,
- numNewTasks: newTasksByAssigneeCssIdSelector(state).length,
- numOnHoldTasks: onHoldTasksByAssigneeCssIdSelector(state).length,
- combinedTasks: [...newTasksByAssigneeCssIdSelector(state),
- ...onHoldTasksByAssigneeCssIdSelector(state),
- ...completeTasksByAssigneeCssIdSelector(state)]
+ numNewTasks: newTasks.length,
+ numOnHoldTasks: onHoldTasks.length,
+ combinedTasks: [
+ ...newTasks,
+ ...onHoldTasks,
+ ...completedTasks
+ ]
};
};
From 72032d3838c3f67cc6313ae082f9c4b6a070f0c7 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 14:25:10 -0400
Subject: [PATCH 24/43] add new hearings_by_id route
---
app/controllers/appeals_controller.rb | 42 +++++++++-----------
client/app/queue/components/HearingBadge.jsx | 8 +++-
config/routes.rb | 2 +-
3 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 3b0be48e3d4..8426570ee4a 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -43,11 +43,11 @@ def document_counts_by_id
end
def build_document_counts_hash
- ids = params[:appeal_ids].split(",")
+ appeal_ids = params[:appeal_ids].split(",")
document_counts_by_id = {}
- ids.each do |id|
- document_counts_by_id[id] =
- Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(id)
+ appeal_ids.each do |appeal_id|
+ document_counts_by_id[appeal_id] =
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.number_of_documents
end
document_counts_by_id
@@ -61,26 +61,22 @@ def power_of_attorney
}
end
- def hearings
+ def hearings_by_id
log_hearings_request
-
- most_recently_held_hearing = appeal.hearings
- .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
- .max_by(&:scheduled_for)
-
- render json:
- if most_recently_held_hearing
- {
- held_by: most_recently_held_hearing.judge.present? ? most_recently_held_hearing.judge.full_name : "",
- viewed_by_judge: !most_recently_held_hearing.hearing_views.empty?,
- date: most_recently_held_hearing.scheduled_for,
- type: most_recently_held_hearing.readable_request_type,
- external_id: most_recently_held_hearing.external_id,
- disposition: most_recently_held_hearing.disposition
- }
- else
- {}
- end
+ render json: { most_recently_held_hearings_by_id: build_most_recently_held_hearings_hash }
+ end
+
+ def build_most_recently_held_hearings_hash
+ appeal_ids = params[:appeal_ids].split(",")
+ most_recently_held_hearings_by_id = {}
+ appeal_ids.each do |appeal_id|
+ most_recently_held_hearings_by_id[appeal_id] =
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
+ .hearings
+ .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
+ .max_by(&:scheduled_for)
+ end
+ most_recently_held_hearings_by_id
end
# For legacy appeals, veteran address and birth/death dates are
diff --git a/client/app/queue/components/HearingBadge.jsx b/client/app/queue/components/HearingBadge.jsx
index d5ae1220f14..c103c3de00e 100644
--- a/client/app/queue/components/HearingBadge.jsx
+++ b/client/app/queue/components/HearingBadge.jsx
@@ -45,7 +45,13 @@ const listStyling = css({
class HearingBadge extends React.PureComponent {
componentDidMount = () => {
if (!this.props.mostRecentlyHeldHearingForAppeal && !this.props.hearing && this.props.externalId) {
- ApiUtil.get(`/appeals/${this.props.externalId}/hearings`).then((response) => {
+ ApiUtil.get(`/appeals/${[
+ 'c3c731e6-7d27-4124-8752-8f19a40909ec',
+ '22e6614f-9fdf-4666-b69f-bdabde34935b',
+ 'aac6f387-dc34-451a-8fa1-69b6d772e173',
+ '2226048',
+ '2306397'
+ ]}/hearings_by_id`).then((response) => {
this.props.setMostRecentlyHeldHearingForAppeal(this.props.externalId, JSON.parse(response.text));
});
}
diff --git a/config/routes.rb b/config/routes.rb
index 3f89d14be4e..6f8867dd6c2 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -101,7 +101,6 @@
member do
get :veteran
get :power_of_attorney
- get :hearings
resources :issues, only: [:create, :update, :destroy], param: :vacols_sequence_id
resources :special_issues, only: [:create, :index]
resources :advance_on_docket_motions, only: [:create]
@@ -111,6 +110,7 @@
end
match '/appeals/:appeal_id/edit/:any' => 'appeals#edit', via: [:get]
match '/appeals/:appeal_ids/document_counts_by_id/' => 'appeals#document_counts_by_id', via: [:get]
+ match '/appeals/:appeal_ids/hearings_by_id/' => 'appeals#hearings_by_id', via: [:get]
resources :beaam_appeals, only: [:index]
From 5ab747fcdb4613a3adb8e2c0aad075d532f1c064 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 15:51:55 -0400
Subject: [PATCH 25/43] get hearing badge working, dry next
---
app/controllers/appeals_controller.rb | 37 +++++++++++++++++--
client/app/queue/AttorneyTaskListView.jsx | 16 ++++++--
client/app/queue/ColocatedTaskListView.jsx | 15 ++++++--
.../queue/JudgeDecisionReviewTaskListView.jsx | 12 +++++-
client/app/queue/QueueActions.js | 6 +--
client/app/queue/components/HearingBadge.jsx | 28 +++-----------
client/app/queue/reducers.js | 8 ++--
client/app/queue/utils.js | 13 ++++---
8 files changed, 89 insertions(+), 46 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 8426570ee4a..e58852cd2e0 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -65,16 +65,47 @@ def hearings_by_id
log_hearings_request
render json: { most_recently_held_hearings_by_id: build_most_recently_held_hearings_hash }
end
-
+ # def hearings
+ # log_hearings_request
+
+ # most_recently_held_hearing = appeal.hearings
+ # .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
+ # .max_by(&:scheduled_for)
+
+ # render json:
+ # if most_recently_held_hearing
+ # {
+ # held_by: most_recently_held_hearing.judge.present? ? most_recently_held_hearing.judge.full_name : "",
+ # viewed_by_judge: !most_recently_held_hearing.hearing_views.empty?,
+ # date: most_recently_held_hearing.scheduled_for,
+ # type: most_recently_held_hearing.readable_request_type,
+ # external_id: most_recently_held_hearing.external_id,
+ # disposition: most_recently_held_hearing.disposition
+ # }
+ # else
+ # {}
+ # end
+ # end
def build_most_recently_held_hearings_hash
appeal_ids = params[:appeal_ids].split(",")
most_recently_held_hearings_by_id = {}
appeal_ids.each do |appeal_id|
- most_recently_held_hearings_by_id[appeal_id] =
- Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
+
+ most_recently_held_hearing = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.hearings
.select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
.max_by(&:scheduled_for)
+ if most_recently_held_hearing
+ most_recently_held_hearings_by_id[appeal_id] = {
+ held_by: most_recently_held_hearing.judge.present? ? most_recently_held_hearing.judge.full_name : "",
+ viewed_by_judge: !most_recently_held_hearing.hearing_views.empty?,
+ date: most_recently_held_hearing.scheduled_for,
+ type: most_recently_held_hearing.readable_request_type,
+ external_id: most_recently_held_hearing.external_id,
+ disposition: most_recently_held_hearing.disposition
+ }
+ end
+
end
most_recently_held_hearings_by_id
end
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index f66aec2f1b6..c64c4af54c3 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -11,8 +11,9 @@ import QueueOrganizationDropdown from './components/QueueOrganizationDropdown';
import AppSegment from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/AppSegment';
import Link from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/Link';
import Alert from '../components/Alert';
-import { batchDocCountRequests } from '../util/ApiUtil';
-import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
+import ApiUtil, { batchDocCountRequests } from '../util/ApiUtil';
+import { loadAppealDocCount, setAppealDocCount,
+ errorFetchingDocumentCount, setMostRecentlyHeldHearingForAppeals } from './QueueActions';
import {
completeTasksByAssigneeCssIdSelector,
@@ -56,6 +57,14 @@ class AttorneyTaskListView extends React.PureComponent {
});
}
batchDocCountRequests(this.props, combinedTasks);
+ const ids = combinedTasks.map((task) => task.externalAppealId);
+
+ ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ this.props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
+ });
+
};
render = () => {
@@ -148,7 +157,8 @@ const mapDispatchToProps = (dispatch) => ({
showErrorMessage,
loadAppealDocCount,
setAppealDocCount,
- errorFetchingDocumentCount
+ errorFetchingDocumentCount,
+ setMostRecentlyHeldHearingForAppeals
}, dispatch)
});
diff --git a/client/app/queue/ColocatedTaskListView.jsx b/client/app/queue/ColocatedTaskListView.jsx
index cfdd55c4f9d..31caa8e158d 100644
--- a/client/app/queue/ColocatedTaskListView.jsx
+++ b/client/app/queue/ColocatedTaskListView.jsx
@@ -23,8 +23,8 @@ import {
import Alert from '../components/Alert';
import TabWindow from '../components/TabWindow';
-import { batchDocCountRequests } from '../util/ApiUtil';
-import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount } from './QueueActions';
+import ApiUtil, { batchDocCountRequests } from '../util/ApiUtil';
+import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount, setMostRecentlyHeldHearingForAppeals } from './QueueActions';
const containerStyles = css({
position: 'relative'
@@ -35,6 +35,14 @@ class ColocatedTaskListView extends React.PureComponent {
this.props.clearCaseSelectSearch();
batchDocCountRequests(this.props, this.props.combinedTasks);
+ const ids = this.props.combinedTasks.map((task) => task.externalAppealId);
+
+ ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ this.props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
+ });
+
};
componentWillUnmount = () => this.props.hideSuccessMessage();
@@ -95,7 +103,8 @@ const mapDispatchToProps = (dispatch) => bindActionCreators({
hideSuccessMessage,
loadAppealDocCount,
setAppealDocCount,
- errorFetchingDocumentCount
+ errorFetchingDocumentCount,
+ setMostRecentlyHeldHearingForAppeals
}, dispatch);
export default (connect(mapStateToProps, mapDispatchToProps)(ColocatedTaskListView));
diff --git a/client/app/queue/JudgeDecisionReviewTaskListView.jsx b/client/app/queue/JudgeDecisionReviewTaskListView.jsx
index 466b9ef609a..b23ed540249 100644
--- a/client/app/queue/JudgeDecisionReviewTaskListView.jsx
+++ b/client/app/queue/JudgeDecisionReviewTaskListView.jsx
@@ -21,6 +21,8 @@ import { judgeDecisionReviewTasksSelector } from './selectors';
import { fullWidth } from './constants';
import COPY from '../../COPY.json';
+import { setMostRecentlyHeldHearingForAppeals } from './QueueActions';
+import ApiUtil from '../util/ApiUtil';
const containerStyles = css({
position: 'relative'
@@ -36,6 +38,13 @@ class JudgeDecisionReviewTaskListView extends React.PureComponent {
componentDidMount = () => {
this.props.clearCaseSelectSearch();
this.props.resetErrorMessages();
+ const ids = this.props.tasks.map((task) => task.externalAppealId);
+
+ ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ this.props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
+ });
};
render = () => {
@@ -102,7 +111,8 @@ const mapDispatchToProps = (dispatch) => (
clearCaseSelectSearch,
resetErrorMessages,
resetSuccessMessages,
- resetSaveState
+ resetSaveState,
+ setMostRecentlyHeldHearingForAppeals
}, dispatch)
);
diff --git a/client/app/queue/QueueActions.js b/client/app/queue/QueueActions.js
index d73cee2baf8..f84133e5e44 100644
--- a/client/app/queue/QueueActions.js
+++ b/client/app/queue/QueueActions.js
@@ -2,7 +2,7 @@
import { associateTasksWithAppeals,
prepareAllTasksForStore,
extractAppealsAndAmaTasks,
- prepareMostRecentlyHeldHearingForStore,
+ prepareMostRecentlyHeldHearingsForStore,
prepareTasksForStore } from './utils';
import { ACTIONS } from './constants';
import { hideErrorMessage, showErrorMessage, showSuccessMessage } from './uiReducer/uiActions';
@@ -192,9 +192,9 @@ export const setAppealDocCount = (docCountsByAppealId) => ({
}
});
-export const setMostRecentlyHeldHearingForAppeal = (appealId, hearing) => ({
+export const setMostRecentlyHeldHearingForAppeals = (mostRecentlyHeldHearingsById) => ({
type: ACTIONS.SET_MOST_RECENTLY_HELD_HEARING_FOR_APPEAL,
- payload: prepareMostRecentlyHeldHearingForStore(appealId, hearing)
+ payload: prepareMostRecentlyHeldHearingsForStore(mostRecentlyHeldHearingsById)
});
export const setDecisionOptions = (opts) => (dispatch) => {
diff --git a/client/app/queue/components/HearingBadge.jsx b/client/app/queue/components/HearingBadge.jsx
index c103c3de00e..778e1af0fa1 100644
--- a/client/app/queue/components/HearingBadge.jsx
+++ b/client/app/queue/components/HearingBadge.jsx
@@ -8,9 +8,7 @@ import { bindActionCreators } from 'redux';
import Tooltip from '../../components/Tooltip';
import { COLORS } from '../../constants/AppConstants';
-import ApiUtil from '../../util/ApiUtil';
import { DateString } from '../../util/DateUtil';
-import { setMostRecentlyHeldHearingForAppeal } from '../QueueActions';
/**
* This component can accept either a Hearing object or a Task object.
@@ -43,22 +41,12 @@ const listStyling = css({
});
class HearingBadge extends React.PureComponent {
- componentDidMount = () => {
- if (!this.props.mostRecentlyHeldHearingForAppeal && !this.props.hearing && this.props.externalId) {
- ApiUtil.get(`/appeals/${[
- 'c3c731e6-7d27-4124-8752-8f19a40909ec',
- '22e6614f-9fdf-4666-b69f-bdabde34935b',
- 'aac6f387-dc34-451a-8fa1-69b6d772e173',
- '2226048',
- '2306397'
- ]}/hearings_by_id`).then((response) => {
- this.props.setMostRecentlyHeldHearingForAppeal(this.props.externalId, JSON.parse(response.text));
- });
- }
- }
render = () => {
- const hearing = this.props.mostRecentlyHeldHearingForAppeal || this.props.hearing;
+ const { externalId, mostRecentlyHeldHearingsById } = this.props;
+ const hearing =
+ mostRecentlyHeldHearingsById.filter((hearingObj) => hearingObj.appealId === externalId)[0] ||
+ this.props.hearing;
if (!hearing || !hearing.date) {
return null;
@@ -99,12 +87,8 @@ const mapStateToProps = (state, ownProps) => {
return {
hearing,
externalId,
- mostRecentlyHeldHearingForAppeal: state.queue.mostRecentlyHeldHearingForAppeal[externalId] || null
+ mostRecentlyHeldHearingsById: state.queue.mostRecentlyHeldHearingsById
};
};
-const mapDispatchToProps = (dispatch) => bindActionCreators({
- setMostRecentlyHeldHearingForAppeal
-}, dispatch);
-
-export default connect(mapStateToProps, mapDispatchToProps)(HearingBadge);
+export default connect(mapStateToProps)(HearingBadge);
diff --git a/client/app/queue/reducers.js b/client/app/queue/reducers.js
index f3f4f9d65ed..17ed2454e5b 100644
--- a/client/app/queue/reducers.js
+++ b/client/app/queue/reducers.js
@@ -25,7 +25,7 @@ export const initialState = {
claimReviews: {},
editingIssue: {},
docCountsByAppealId: {},
- mostRecentlyHeldHearingForAppeal: {},
+ mostRecentlyHeldHearingsById: [],
newDocsForAppeal: {},
newDocsForTask: {},
specialIssues: {},
@@ -224,10 +224,8 @@ export const workQueueReducer = (state = initialState, action = {}) => {
case ACTIONS.SET_MOST_RECENTLY_HELD_HEARING_FOR_APPEAL:
return update(state, {
- mostRecentlyHeldHearingForAppeal: {
- [action.payload.appealId]: {
- $set: action.payload.hearing
- }
+ mostRecentlyHeldHearingsById: {
+ $set: action.payload
}
});
case ACTIONS.SET_DECISION_OPTIONS:
diff --git a/client/app/queue/utils.js b/client/app/queue/utils.js
index 98e2dbf7ea6..06ef89310e7 100644
--- a/client/app/queue/utils.js
+++ b/client/app/queue/utils.js
@@ -36,18 +36,19 @@ export const getUndecidedIssues = (issues) => _.filter(issues, (issue) => {
}
});
-export const prepareMostRecentlyHeldHearingForStore = (appealId, hearing) => {
- return {
- appealId,
- hearing: {
+export const prepareMostRecentlyHeldHearingsForStore = (mostRecentlyHeldHearingsById) => {
+ return _.map(mostRecentlyHeldHearingsById, (hearing, appealId) => {
+ return {
+ appealId,
heldBy: hearing.held_by,
viewedByJudge: hearing.viewed_by_judge,
date: hearing.date,
type: hearing.type,
externalId: hearing.external_id,
disposition: hearing.disposition
- }
- };
+ };
+ });
+
};
export const prepareTasksForStore = (tasks) =>
From 99815bc4aa316f9506e4acb85a28b014885ccb96 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 15:57:55 -0400
Subject: [PATCH 26/43] DRY
---
client/app/queue/AttorneyTaskListView.jsx | 10 ++--------
client/app/queue/ColocatedTaskListView.jsx | 14 ++++----------
.../app/queue/JudgeDecisionReviewTaskListView.jsx | 10 ++--------
client/app/util/ApiUtil.js | 15 +++++++++++++++
4 files changed, 23 insertions(+), 26 deletions(-)
diff --git a/client/app/queue/AttorneyTaskListView.jsx b/client/app/queue/AttorneyTaskListView.jsx
index c64c4af54c3..6dd4046e52d 100644
--- a/client/app/queue/AttorneyTaskListView.jsx
+++ b/client/app/queue/AttorneyTaskListView.jsx
@@ -11,7 +11,7 @@ import QueueOrganizationDropdown from './components/QueueOrganizationDropdown';
import AppSegment from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/AppSegment';
import Link from '@department-of-veterans-affairs/caseflow-frontend-toolkit/components/Link';
import Alert from '../components/Alert';
-import ApiUtil, { batchDocCountRequests } from '../util/ApiUtil';
+import { batchDocCountRequests, batchHearingBadgeRequests } from '../util/ApiUtil';
import { loadAppealDocCount, setAppealDocCount,
errorFetchingDocumentCount, setMostRecentlyHeldHearingForAppeals } from './QueueActions';
@@ -57,13 +57,7 @@ class AttorneyTaskListView extends React.PureComponent {
});
}
batchDocCountRequests(this.props, combinedTasks);
- const ids = combinedTasks.map((task) => task.externalAppealId);
-
- ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
- const resp = JSON.parse(response.text);
-
- this.props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
- });
+ batchHearingBadgeRequests(this.props, combinedTasks);
};
diff --git a/client/app/queue/ColocatedTaskListView.jsx b/client/app/queue/ColocatedTaskListView.jsx
index 31caa8e158d..5cf92facd1b 100644
--- a/client/app/queue/ColocatedTaskListView.jsx
+++ b/client/app/queue/ColocatedTaskListView.jsx
@@ -23,8 +23,9 @@ import {
import Alert from '../components/Alert';
import TabWindow from '../components/TabWindow';
-import ApiUtil, { batchDocCountRequests } from '../util/ApiUtil';
-import { loadAppealDocCount, setAppealDocCount, errorFetchingDocumentCount, setMostRecentlyHeldHearingForAppeals } from './QueueActions';
+import { batchDocCountRequests, batchHearingBadgeRequests } from '../util/ApiUtil';
+import { loadAppealDocCount, setAppealDocCount,
+ errorFetchingDocumentCount, setMostRecentlyHeldHearingForAppeals } from './QueueActions';
const containerStyles = css({
position: 'relative'
@@ -35,14 +36,7 @@ class ColocatedTaskListView extends React.PureComponent {
this.props.clearCaseSelectSearch();
batchDocCountRequests(this.props, this.props.combinedTasks);
- const ids = this.props.combinedTasks.map((task) => task.externalAppealId);
-
- ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
- const resp = JSON.parse(response.text);
-
- this.props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
- });
-
+ batchHearingBadgeRequests(this.props, this.props.combinedTasks);
};
componentWillUnmount = () => this.props.hideSuccessMessage();
diff --git a/client/app/queue/JudgeDecisionReviewTaskListView.jsx b/client/app/queue/JudgeDecisionReviewTaskListView.jsx
index b23ed540249..faab5bf6e3f 100644
--- a/client/app/queue/JudgeDecisionReviewTaskListView.jsx
+++ b/client/app/queue/JudgeDecisionReviewTaskListView.jsx
@@ -22,7 +22,7 @@ import { judgeDecisionReviewTasksSelector } from './selectors';
import { fullWidth } from './constants';
import COPY from '../../COPY.json';
import { setMostRecentlyHeldHearingForAppeals } from './QueueActions';
-import ApiUtil from '../util/ApiUtil';
+import { batchHearingBadgeRequests } from '../util/ApiUtil';
const containerStyles = css({
position: 'relative'
@@ -38,13 +38,7 @@ class JudgeDecisionReviewTaskListView extends React.PureComponent {
componentDidMount = () => {
this.props.clearCaseSelectSearch();
this.props.resetErrorMessages();
- const ids = this.props.tasks.map((task) => task.externalAppealId);
-
- ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
- const resp = JSON.parse(response.text);
-
- this.props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
- });
+ batchHearingBadgeRequests(this.props, this.props.tasks);
};
render = () => {
diff --git a/client/app/util/ApiUtil.js b/client/app/util/ApiUtil.js
index 97e59b18b3b..7f3380d3620 100644
--- a/client/app/util/ApiUtil.js
+++ b/client/app/util/ApiUtil.js
@@ -164,4 +164,19 @@ export const batchDocCountRequests = (props, tasks) => {
});
};
+export const batchHearingBadgeRequests = (props, tasks) => {
+
+ const ids = mapTasksToExternalIds(tasks);
+
+ return ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
+ }).
+ catch(() => {
+ console.log('there was an error fetching the hearing badge');
+ });
+
+};
+
export default ApiUtil;
From 9ba40d385baa2fdf3612137a6a9e891d133b2b99 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 16:01:17 -0400
Subject: [PATCH 27/43] lint issues
---
app/controllers/appeals_controller.rb | 44 +++++---------------
client/app/queue/components/HearingBadge.jsx | 1 -
client/app/util/ApiUtil.js | 2 +-
3 files changed, 12 insertions(+), 35 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index e58852cd2e0..f35e628451d 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -65,47 +65,25 @@ def hearings_by_id
log_hearings_request
render json: { most_recently_held_hearings_by_id: build_most_recently_held_hearings_hash }
end
- # def hearings
- # log_hearings_request
-
- # most_recently_held_hearing = appeal.hearings
- # .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
- # .max_by(&:scheduled_for)
-
- # render json:
- # if most_recently_held_hearing
- # {
- # held_by: most_recently_held_hearing.judge.present? ? most_recently_held_hearing.judge.full_name : "",
- # viewed_by_judge: !most_recently_held_hearing.hearing_views.empty?,
- # date: most_recently_held_hearing.scheduled_for,
- # type: most_recently_held_hearing.readable_request_type,
- # external_id: most_recently_held_hearing.external_id,
- # disposition: most_recently_held_hearing.disposition
- # }
- # else
- # {}
- # end
- # end
+
def build_most_recently_held_hearings_hash
appeal_ids = params[:appeal_ids].split(",")
most_recently_held_hearings_by_id = {}
appeal_ids.each do |appeal_id|
-
most_recently_held_hearing = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.hearings
.select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
.max_by(&:scheduled_for)
- if most_recently_held_hearing
- most_recently_held_hearings_by_id[appeal_id] = {
- held_by: most_recently_held_hearing.judge.present? ? most_recently_held_hearing.judge.full_name : "",
- viewed_by_judge: !most_recently_held_hearing.hearing_views.empty?,
- date: most_recently_held_hearing.scheduled_for,
- type: most_recently_held_hearing.readable_request_type,
- external_id: most_recently_held_hearing.external_id,
- disposition: most_recently_held_hearing.disposition
- }
- end
-
+ next unless most_recently_held_hearing
+
+ most_recently_held_hearings_by_id[appeal_id] = {
+ held_by: most_recently_held_hearing.judge.present? ? most_recently_held_hearing.judge.full_name : "",
+ viewed_by_judge: !most_recently_held_hearing.hearing_views.empty?,
+ date: most_recently_held_hearing.scheduled_for,
+ type: most_recently_held_hearing.readable_request_type,
+ external_id: most_recently_held_hearing.external_id,
+ disposition: most_recently_held_hearing.disposition
+ }
end
most_recently_held_hearings_by_id
end
diff --git a/client/app/queue/components/HearingBadge.jsx b/client/app/queue/components/HearingBadge.jsx
index 778e1af0fa1..a8942375215 100644
--- a/client/app/queue/components/HearingBadge.jsx
+++ b/client/app/queue/components/HearingBadge.jsx
@@ -3,7 +3,6 @@ import { css } from 'glamor';
import _ from 'lodash';
import * as React from 'react';
import { connect } from 'react-redux';
-import { bindActionCreators } from 'redux';
import Tooltip from '../../components/Tooltip';
import { COLORS } from '../../constants/AppConstants';
diff --git a/client/app/util/ApiUtil.js b/client/app/util/ApiUtil.js
index 7f3380d3620..be31c1ee329 100644
--- a/client/app/util/ApiUtil.js
+++ b/client/app/util/ApiUtil.js
@@ -174,7 +174,7 @@ export const batchHearingBadgeRequests = (props, tasks) => {
props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
}).
catch(() => {
- console.log('there was an error fetching the hearing badge');
+ // TODO: add error handling
});
};
From 33ffdf0c959b8c0f4d7f126075b8f7187567e5fd Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 16:22:31 -0400
Subject: [PATCH 28/43] break down method to avoid complexity
---
app/controllers/appeals_controller.rb | 35 ++++++++++++++++-----------
client/app/util/ApiUtil.js | 2 +-
2 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index f35e628451d..1559aa466be 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -70,24 +70,31 @@ def build_most_recently_held_hearings_hash
appeal_ids = params[:appeal_ids].split(",")
most_recently_held_hearings_by_id = {}
appeal_ids.each do |appeal_id|
- most_recently_held_hearing = Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
- .hearings
- .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
- .max_by(&:scheduled_for)
- next unless most_recently_held_hearing
-
- most_recently_held_hearings_by_id[appeal_id] = {
- held_by: most_recently_held_hearing.judge.present? ? most_recently_held_hearing.judge.full_name : "",
- viewed_by_judge: !most_recently_held_hearing.hearing_views.empty?,
- date: most_recently_held_hearing.scheduled_for,
- type: most_recently_held_hearing.readable_request_type,
- external_id: most_recently_held_hearing.external_id,
- disposition: most_recently_held_hearing.disposition
- }
+ hearing = most_recently_held_hearing(appeal_id)
+ build_hearing_object(appeal_id, most_recently_held_hearings_by_id, hearing)
end
most_recently_held_hearings_by_id
end
+ def most_recently_held_hearing(appeal_id)
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
+ .hearings
+ .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
+ .max_by(&:scheduled_for)
+ end
+
+ def build_hearing_object(appeal_id, hash, hearing)
+ hash[appeal_id] = {
+ held_by: hearing&.judge.present? ? hearing.judge.full_name : "",
+ viewed_by_judge: hearing && !hearing.hearing_views.empty?,
+ date: hearing&.scheduled_for,
+ type: hearing&.readable_request_type,
+ external_id: hearing&.external_id,
+ disposition: hearing&.disposition
+ }
+ hash
+ end
+
# For legacy appeals, veteran address and birth/death dates are
# the only data that is being pulled from BGS, the rest are from VACOLS for now
def veteran
diff --git a/client/app/util/ApiUtil.js b/client/app/util/ApiUtil.js
index be31c1ee329..bf88197afc6 100644
--- a/client/app/util/ApiUtil.js
+++ b/client/app/util/ApiUtil.js
@@ -174,7 +174,7 @@ export const batchHearingBadgeRequests = (props, tasks) => {
props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
}).
catch(() => {
- // TODO: add error handling
+ throw new Error('error getting the hearings by id');
});
};
From 04ff281000e0e6d2d7644c6f62dd132d168ed58d Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 16:29:35 -0400
Subject: [PATCH 29/43] code climate
---
app/controllers/appeals_controller.rb | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 1559aa466be..6a158f0768e 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -70,8 +70,9 @@ def build_most_recently_held_hearings_hash
appeal_ids = params[:appeal_ids].split(",")
most_recently_held_hearings_by_id = {}
appeal_ids.each do |appeal_id|
- hearing = most_recently_held_hearing(appeal_id)
- build_hearing_object(appeal_id, most_recently_held_hearings_by_id, hearing)
+ build_hearing_object(appeal_id,
+ most_recently_held_hearings_by_id,
+ most_recently_held_hearing(appeal_id))
end
most_recently_held_hearings_by_id
end
From 93064116b66bf0c11151b78bcc8848f408616bd0 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Wed, 10 Apr 2019 16:32:28 -0400
Subject: [PATCH 30/43] lint issues
---
app/controllers/appeals_controller.rb | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 6a158f0768e..a091d2edb0b 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -70,9 +70,9 @@ def build_most_recently_held_hearings_hash
appeal_ids = params[:appeal_ids].split(",")
most_recently_held_hearings_by_id = {}
appeal_ids.each do |appeal_id|
- build_hearing_object(appeal_id,
- most_recently_held_hearings_by_id,
- most_recently_held_hearing(appeal_id))
+ build_hearing_object(appeal_id,
+ most_recently_held_hearings_by_id,
+ most_recently_held_hearing(appeal_id))
end
most_recently_held_hearings_by_id
end
From 1d98573254274737663ad761906b10d097f6a66c Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 09:15:17 -0400
Subject: [PATCH 31/43] try to fix codeclimate warning
---
app/controllers/appeals_controller.rb | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index a091d2edb0b..52f2b0e476d 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -78,10 +78,11 @@ def build_most_recently_held_hearings_hash
end
def most_recently_held_hearing(appeal_id)
- Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
- .hearings
- .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
- .max_by(&:scheduled_for)
+ @most_recently_held_hearing =
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
+ .hearings
+ .select { |hearing| hearing.disposition.to_s == Constants.HEARING_DISPOSITION_TYPES.held }
+ .max_by(&:scheduled_for)
end
def build_hearing_object(appeal_id, hash, hearing)
@@ -93,7 +94,7 @@ def build_hearing_object(appeal_id, hash, hearing)
external_id: hearing&.external_id,
disposition: hearing&.disposition
}
- hash
+ @build_hearing_object = hash
end
# For legacy appeals, veteran address and birth/death dates are
From c6382eb473d75fd8682431d5a59a437cf3d0ba67 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 09:29:48 -0400
Subject: [PATCH 32/43] move hearing object mapping to HearingMapper class
---
app/controllers/appeals_controller.rb | 9 +--------
app/mappers/hearing_mapper.rb | 11 +++++++++++
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 52f2b0e476d..4acc0525e71 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -86,14 +86,7 @@ def most_recently_held_hearing(appeal_id)
end
def build_hearing_object(appeal_id, hash, hearing)
- hash[appeal_id] = {
- held_by: hearing&.judge.present? ? hearing.judge.full_name : "",
- viewed_by_judge: hearing && !hearing.hearing_views.empty?,
- date: hearing&.scheduled_for,
- type: hearing&.readable_request_type,
- external_id: hearing&.external_id,
- disposition: hearing&.disposition
- }
+ hash[appeal_id] = HearingMapper.build_hearing_object_for_appeal(hearing)
@build_hearing_object = hash
end
diff --git a/app/mappers/hearing_mapper.rb b/app/mappers/hearing_mapper.rb
index fc2df913871..c59e3b22a9a 100644
--- a/app/mappers/hearing_mapper.rb
+++ b/app/mappers/hearing_mapper.rb
@@ -116,5 +116,16 @@ def transcript_requested_to_vacols_format(value)
vacols_code
end
+
+ def build_hearing_object_for_appeal(hearing)
+ {
+ held_by: hearing&.judge.present? ? hearing.judge.full_name : "",
+ viewed_by_judge: hearing && !hearing.hearing_views.empty?,
+ date: hearing&.scheduled_for,
+ type: hearing&.readable_request_type,
+ external_id: hearing&.external_id,
+ disposition: hearing&.disposition
+ }
+ end
end
end
From a79f6702ac00af30c5856da86482564b050afb66 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 09:51:11 -0400
Subject: [PATCH 33/43] rename variables for clarity, move building of obj to
hearing_repository
---
app/controllers/appeals_controller.rb | 19 ++++++++++---------
app/repositories/hearing_repository.rb | 12 ++++++++++++
2 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 4acc0525e71..d9cc04dee03 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -44,13 +44,13 @@ def document_counts_by_id
def build_document_counts_hash
appeal_ids = params[:appeal_ids].split(",")
- document_counts_by_id = {}
+ document_counts_by_id_hash = {}
appeal_ids.each do |appeal_id|
- document_counts_by_id[appeal_id] =
+ document_counts_by_id_hash[appeal_id] =
Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.number_of_documents
end
- document_counts_by_id
+ document_counts_by_id_hash
end
def power_of_attorney
@@ -68,13 +68,13 @@ def hearings_by_id
def build_most_recently_held_hearings_hash
appeal_ids = params[:appeal_ids].split(",")
- most_recently_held_hearings_by_id = {}
+ most_recently_held_hearings_by_id_hash = {}
appeal_ids.each do |appeal_id|
build_hearing_object(appeal_id,
- most_recently_held_hearings_by_id,
+ most_recently_held_hearings_by_id_hash,
most_recently_held_hearing(appeal_id))
end
- most_recently_held_hearings_by_id
+ most_recently_held_hearings_by_id_hash
end
def most_recently_held_hearing(appeal_id)
@@ -85,9 +85,10 @@ def most_recently_held_hearing(appeal_id)
.max_by(&:scheduled_for)
end
- def build_hearing_object(appeal_id, hash, hearing)
- hash[appeal_id] = HearingMapper.build_hearing_object_for_appeal(hearing)
- @build_hearing_object = hash
+ def build_hearing_object(appeal_id, hash, most_recently_held_hearing_for_appeal)
+ hash[appeal_id] = HearingRepository
+ .build_hearing_object_for_appeal(most_recently_held_hearing_for_appeal)
+ @build_hearing_object = hash
end
# For legacy appeals, veteran address and birth/death dates are
diff --git a/app/repositories/hearing_repository.rb b/app/repositories/hearing_repository.rb
index 20d724fa47e..13a263a00ec 100644
--- a/app/repositories/hearing_repository.rb
+++ b/app/repositories/hearing_repository.rb
@@ -19,6 +19,18 @@ def fetch_hearings_for_judge(css_id, is_fetching_issues = false)
load_issues(hearings) if is_fetching_issues
hearings
end
+
+ def build_hearing_object_for_appeal(hearing)
+ {
+ held_by: hearing&.judge.present? ? hearing.judge.full_name : "",
+ viewed_by_judge: hearing && !hearing.hearing_views.empty?,
+ date: hearing&.scheduled_for,
+ type: hearing&.readable_request_type,
+ external_id: hearing&.external_id,
+ disposition: hearing&.disposition
+ }
+ end
+
def fetch_hearings_for_parent(hearing_day_id)
# Implemented by call the array version of this method
From 8f0a5f830b19fe0213845e1c8b6f38118f4c9cd8 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 14:53:35 -0400
Subject: [PATCH 34/43] remove duplicate code, add lint fixes
---
app/controllers/appeals_controller.rb | 2 +-
app/mappers/hearing_mapper.rb | 11 -----------
app/repositories/hearing_repository.rb | 3 +--
3 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index d9cc04dee03..c88618c4735 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -88,7 +88,7 @@ def most_recently_held_hearing(appeal_id)
def build_hearing_object(appeal_id, hash, most_recently_held_hearing_for_appeal)
hash[appeal_id] = HearingRepository
.build_hearing_object_for_appeal(most_recently_held_hearing_for_appeal)
- @build_hearing_object = hash
+ @build_hearing_object = hash
end
# For legacy appeals, veteran address and birth/death dates are
diff --git a/app/mappers/hearing_mapper.rb b/app/mappers/hearing_mapper.rb
index c59e3b22a9a..fc2df913871 100644
--- a/app/mappers/hearing_mapper.rb
+++ b/app/mappers/hearing_mapper.rb
@@ -116,16 +116,5 @@ def transcript_requested_to_vacols_format(value)
vacols_code
end
-
- def build_hearing_object_for_appeal(hearing)
- {
- held_by: hearing&.judge.present? ? hearing.judge.full_name : "",
- viewed_by_judge: hearing && !hearing.hearing_views.empty?,
- date: hearing&.scheduled_for,
- type: hearing&.readable_request_type,
- external_id: hearing&.external_id,
- disposition: hearing&.disposition
- }
- end
end
end
diff --git a/app/repositories/hearing_repository.rb b/app/repositories/hearing_repository.rb
index 13a263a00ec..16b7d883526 100644
--- a/app/repositories/hearing_repository.rb
+++ b/app/repositories/hearing_repository.rb
@@ -19,7 +19,7 @@ def fetch_hearings_for_judge(css_id, is_fetching_issues = false)
load_issues(hearings) if is_fetching_issues
hearings
end
-
+
def build_hearing_object_for_appeal(hearing)
{
held_by: hearing&.judge.present? ? hearing.judge.full_name : "",
@@ -31,7 +31,6 @@ def build_hearing_object_for_appeal(hearing)
}
end
-
def fetch_hearings_for_parent(hearing_day_id)
# Implemented by call the array version of this method
fetch_hearings_for_parents([hearing_day_id]).values.first || []
From 51046ec857031489b565b3d215a5a010b6a3fb5b Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 15:07:15 -0400
Subject: [PATCH 35/43] linting issues and handle error on appeal basis
---
app/controllers/appeals_controller.rb | 8 ++---
client/app/util/ApiUtil.js | 43 +++++++++++++++++----------
2 files changed, 32 insertions(+), 19 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index c88618c4735..e1476224556 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -36,10 +36,6 @@ def show_case_list
def document_counts_by_id
render json: { document_counts_by_id: build_document_counts_hash }
- rescue Caseflow::Error::EfolderAccessForbidden => error
- render(error.serialize_response)
- rescue StandardError => error
- handle_non_critical_error("document_count", error)
end
def build_document_counts_hash
@@ -49,6 +45,10 @@ def build_document_counts_hash
document_counts_by_id_hash[appeal_id] =
Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.number_of_documents
+ rescue Caseflow::Error::EfolderAccessForbidden => error
+ render(error.serialize_response)
+ rescue StandardError => error
+ handle_non_critical_error("document_counts_by_id", error)
end
document_counts_by_id_hash
end
diff --git a/client/app/util/ApiUtil.js b/client/app/util/ApiUtil.js
index bf88197afc6..0655647fb73 100644
--- a/client/app/util/ApiUtil.js
+++ b/client/app/util/ApiUtil.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-loop-func */
import request from 'superagent';
import nocache from 'superagent-no-cache';
import ReactOnRails from 'react-on-rails';
@@ -8,6 +9,7 @@ import { mapTasksToExternalIds } from '../queue/utils';
export const STANDARD_API_TIMEOUT_MILLISECONDS = 60 * 1000;
export const RESPONSE_COMPLETE_LIMIT_MILLISECONDS = 5 * 60 * 1000;
+export const BATCH_REQUEST_SIZE = 5;
const defaultTimeoutSettings = {
response: STANDARD_API_TIMEOUT_MILLISECONDS,
@@ -147,36 +149,47 @@ export const batchDocCountRequests = (props, tasks) => {
const requestOptions = {
withCredentials: true,
- timeout: { response: 5 * 60 * 1000 }
+ timeout: { response: RESPONSE_COMPLETE_LIMIT_MILLISECONDS }
};
const ids = mapTasksToExternalIds(tasks);
props.loadAppealDocCount(ids);
- return ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
- requestOptions).then((response) => {
- const resp = JSON.parse(response.text);
+ let numCallsToMake = ids.length / BATCH_REQUEST_SIZE;
+
+ while (numCallsToMake > 0) {
+ ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
+ requestOptions).then((response) => {
+ const resp = JSON.parse(response.text);
+
+ props.setAppealDocCount(resp.document_counts_by_id);
+
+ }, () => {
+ props.errorFetchingDocumentCount(ids);
+ });
+ numCallsToMake -= 1;
+ }
- props.setAppealDocCount(resp.document_counts_by_id);
- }, () => {
- props.errorFetchingDocumentCount(ids);
- });
};
export const batchHearingBadgeRequests = (props, tasks) => {
const ids = mapTasksToExternalIds(tasks);
+ let numCallsToMake = ids.length / BATCH_REQUEST_SIZE;
- return ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
- const resp = JSON.parse(response.text);
+ while (numCallsToMake > 0) {
- props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
- }).
- catch(() => {
- throw new Error('error getting the hearings by id');
- });
+ ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
+ const resp = JSON.parse(response.text);
+ props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
+ }).
+ catch(() => {
+ throw new Error('error getting the hearings by id', ids);
+ });
+ numCallsToMake -= 1;
+ }
};
export default ApiUtil;
From 925901045ae2569da956679993ed3afd5fae7521 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 15:12:44 -0400
Subject: [PATCH 36/43] handle error in another function
---
app/controllers/appeals_controller.rb | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index e1476224556..6ff959fae02 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -45,10 +45,7 @@ def build_document_counts_hash
document_counts_by_id_hash[appeal_id] =
Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.number_of_documents
- rescue Caseflow::Error::EfolderAccessForbidden => error
- render(error.serialize_response)
- rescue StandardError => error
- handle_non_critical_error("document_counts_by_id", error)
+ handle_documents_error
end
document_counts_by_id_hash
end
@@ -61,6 +58,13 @@ def power_of_attorney
}
end
+ def handle_documents_error
+ rescue Caseflow::Error::EfolderAccessForbidden => error
+ render(error.serialize_response)
+ rescue StandardError => error
+ handle_non_critical_error("document_counts_by_id", error)
+ end
+
def hearings_by_id
log_hearings_request
render json: { most_recently_held_hearings_by_id: build_most_recently_held_hearings_hash }
From 18f6248e7c0e6344502a11989f75d2ceead5c487 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 15:38:45 -0400
Subject: [PATCH 37/43] make changes to reducer based on multiple requests
---
client/app/queue/components/HearingBadge.jsx | 1 +
client/app/queue/reducers.js | 3 ++-
client/app/util/ApiUtil.js | 13 +++++--------
3 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/client/app/queue/components/HearingBadge.jsx b/client/app/queue/components/HearingBadge.jsx
index a8942375215..04d87e623a4 100644
--- a/client/app/queue/components/HearingBadge.jsx
+++ b/client/app/queue/components/HearingBadge.jsx
@@ -43,6 +43,7 @@ class HearingBadge extends React.PureComponent {
render = () => {
const { externalId, mostRecentlyHeldHearingsById } = this.props;
+
const hearing =
mostRecentlyHeldHearingsById.filter((hearingObj) => hearingObj.appealId === externalId)[0] ||
this.props.hearing;
diff --git a/client/app/queue/reducers.js b/client/app/queue/reducers.js
index 17ed2454e5b..f2727d244b1 100644
--- a/client/app/queue/reducers.js
+++ b/client/app/queue/reducers.js
@@ -216,6 +216,7 @@ export const workQueueReducer = (state = initialState, action = {}) => {
return {
...state,
docCountsByAppealId: {
+ ...state.docCountsByAppealId,
...action.payload.docCountsByAppealId,
error: null,
loading: false
@@ -225,7 +226,7 @@ export const workQueueReducer = (state = initialState, action = {}) => {
case ACTIONS.SET_MOST_RECENTLY_HELD_HEARING_FOR_APPEAL:
return update(state, {
mostRecentlyHeldHearingsById: {
- $set: action.payload
+ $set: state.mostRecentlyHeldHearingsById.concat(action.payload)
}
});
case ACTIONS.SET_DECISION_OPTIONS:
diff --git a/client/app/util/ApiUtil.js b/client/app/util/ApiUtil.js
index 0655647fb73..f3d3d2cfae9 100644
--- a/client/app/util/ApiUtil.js
+++ b/client/app/util/ApiUtil.js
@@ -156,10 +156,9 @@ export const batchDocCountRequests = (props, tasks) => {
props.loadAppealDocCount(ids);
- let numCallsToMake = ids.length / BATCH_REQUEST_SIZE;
+ while (ids.length > 0) {
- while (numCallsToMake > 0) {
- ApiUtil.get(`/appeals/${ids}/document_counts_by_id`,
+ ApiUtil.get(`/appeals/${ids.splice(0, BATCH_REQUEST_SIZE)}/document_counts_by_id`,
requestOptions).then((response) => {
const resp = JSON.parse(response.text);
@@ -168,7 +167,6 @@ export const batchDocCountRequests = (props, tasks) => {
}, () => {
props.errorFetchingDocumentCount(ids);
});
- numCallsToMake -= 1;
}
};
@@ -176,11 +174,10 @@ export const batchDocCountRequests = (props, tasks) => {
export const batchHearingBadgeRequests = (props, tasks) => {
const ids = mapTasksToExternalIds(tasks);
- let numCallsToMake = ids.length / BATCH_REQUEST_SIZE;
- while (numCallsToMake > 0) {
+ while (ids.length > 0) {
- ApiUtil.get(`/appeals/${ids}/hearings_by_id`).then((response) => {
+ ApiUtil.get(`/appeals/${ids.splice(0, BATCH_REQUEST_SIZE)}/hearings_by_id`).then((response) => {
const resp = JSON.parse(response.text);
props.setMostRecentlyHeldHearingForAppeals(resp.most_recently_held_hearings_by_id);
@@ -188,7 +185,7 @@ export const batchHearingBadgeRequests = (props, tasks) => {
catch(() => {
throw new Error('error getting the hearings by id', ids);
});
- numCallsToMake -= 1;
+
}
};
From 08cdcd97c407b1c608ec1c721c2e83aea5fd688b Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 15:41:23 -0400
Subject: [PATCH 38/43] lint
---
app/controllers/appeals_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 6ff959fae02..2605b4c98bf 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -45,7 +45,7 @@ def build_document_counts_hash
document_counts_by_id_hash[appeal_id] =
Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.number_of_documents
- handle_documents_error
+ handle_documents_error
end
document_counts_by_id_hash
end
From a85a37ad50b823869b70dfd2a24aa6bae449091d Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 16:05:35 -0400
Subject: [PATCH 39/43] code climate man
---
app/controllers/appeals_controller.rb | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 2605b4c98bf..09a508c55d2 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -39,9 +39,8 @@ def document_counts_by_id
end
def build_document_counts_hash
- appeal_ids = params[:appeal_ids].split(",")
document_counts_by_id_hash = {}
- appeal_ids.each do |appeal_id|
+ params[:appeal_ids].split(",").each do |appeal_id|
document_counts_by_id_hash[appeal_id] =
Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
.number_of_documents
@@ -71,12 +70,10 @@ def hearings_by_id
end
def build_most_recently_held_hearings_hash
- appeal_ids = params[:appeal_ids].split(",")
most_recently_held_hearings_by_id_hash = {}
- appeal_ids.each do |appeal_id|
- build_hearing_object(appeal_id,
- most_recently_held_hearings_by_id_hash,
- most_recently_held_hearing(appeal_id))
+ params[:appeal_ids].split(",").each do |appeal_id|
+ most_recently_held_hearings_by_id_hash[appeal_id] = HearingRepository
+ .build_hearing_object_for_appeal(most_recently_held_hearing(appeal_id))
end
most_recently_held_hearings_by_id_hash
end
@@ -89,11 +86,6 @@ def most_recently_held_hearing(appeal_id)
.max_by(&:scheduled_for)
end
- def build_hearing_object(appeal_id, hash, most_recently_held_hearing_for_appeal)
- hash[appeal_id] = HearingRepository
- .build_hearing_object_for_appeal(most_recently_held_hearing_for_appeal)
- @build_hearing_object = hash
- end
# For legacy appeals, veteran address and birth/death dates are
# the only data that is being pulled from BGS, the rest are from VACOLS for now
From b4acfadf91c3e54a81721633a71c61f34465e9bf Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 16:08:39 -0400
Subject: [PATCH 40/43] lint
---
app/controllers/appeals_controller.rb | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 09a508c55d2..9113cb8784e 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -73,7 +73,7 @@ def build_most_recently_held_hearings_hash
most_recently_held_hearings_by_id_hash = {}
params[:appeal_ids].split(",").each do |appeal_id|
most_recently_held_hearings_by_id_hash[appeal_id] = HearingRepository
- .build_hearing_object_for_appeal(most_recently_held_hearing(appeal_id))
+ .build_hearing_object_for_appeal(most_recently_held_hearing(appeal_id))
end
most_recently_held_hearings_by_id_hash
end
@@ -86,7 +86,6 @@ def most_recently_held_hearing(appeal_id)
.max_by(&:scheduled_for)
end
-
# For legacy appeals, veteran address and birth/death dates are
# the only data that is being pulled from BGS, the rest are from VACOLS for now
def veteran
From d669c0609327c78bf40e067e02cd282645e734e6 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 16:44:09 -0400
Subject: [PATCH 41/43] non happy path
---
app/controllers/appeals_controller.rb | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 9113cb8784e..ad6fd74c0d7 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -36,15 +36,21 @@ def show_case_list
def document_counts_by_id
render json: { document_counts_by_id: build_document_counts_hash }
+ rescue Caseflow::Error::EfolderAccessForbidden => error
+ render(error.serialize_response)
end
def build_document_counts_hash
document_counts_by_id_hash = {}
params[:appeal_ids].split(",").each do |appeal_id|
- document_counts_by_id_hash[appeal_id] =
- Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
- .number_of_documents
- handle_documents_error
+ begin
+ document_counts_by_id_hash[appeal_id] =
+ Appeal.find_appeal_by_id_or_find_or_create_legacy_appeal_by_vacols_id(appeal_id)
+ .number_of_documents
+ rescue StandardError => error
+ document_counts_by_id_hash[appeal_id] = error
+ next
+ end
end
document_counts_by_id_hash
end
@@ -57,13 +63,6 @@ def power_of_attorney
}
end
- def handle_documents_error
- rescue Caseflow::Error::EfolderAccessForbidden => error
- render(error.serialize_response)
- rescue StandardError => error
- handle_non_critical_error("document_counts_by_id", error)
- end
-
def hearings_by_id
log_hearings_request
render json: { most_recently_held_hearings_by_id: build_most_recently_held_hearings_hash }
@@ -72,8 +71,13 @@ def hearings_by_id
def build_most_recently_held_hearings_hash
most_recently_held_hearings_by_id_hash = {}
params[:appeal_ids].split(",").each do |appeal_id|
+ begin
most_recently_held_hearings_by_id_hash[appeal_id] = HearingRepository
.build_hearing_object_for_appeal(most_recently_held_hearing(appeal_id))
+ rescue StandardError => error
+ most_recently_held_hearings_by_id_hash[appeal_id] = error
+ next
+ end
end
most_recently_held_hearings_by_id_hash
end
From b16c1aa6ce969fe429cb3dc31b9bcfe6b483dc84 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 16:45:26 -0400
Subject: [PATCH 42/43] lint
---
app/controllers/appeals_controller.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index ad6fd74c0d7..2562ac13d4c 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -72,8 +72,8 @@ def build_most_recently_held_hearings_hash
most_recently_held_hearings_by_id_hash = {}
params[:appeal_ids].split(",").each do |appeal_id|
begin
- most_recently_held_hearings_by_id_hash[appeal_id] = HearingRepository
- .build_hearing_object_for_appeal(most_recently_held_hearing(appeal_id))
+ most_recently_held_hearings_by_id_hash[appeal_id] = HearingRepository
+ .build_hearing_object_for_appeal(most_recently_held_hearing(appeal_id))
rescue StandardError => error
most_recently_held_hearings_by_id_hash[appeal_id] = error
next
From ffc9df505e63097f1d68fbf0cc5fefaaf9da7ef4 Mon Sep 17 00:00:00 2001
From: youngfreezyVA
Date: Thu, 11 Apr 2019 16:51:14 -0400
Subject: [PATCH 43/43] fix one code climate issue
---
app/controllers/appeals_controller.rb | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/controllers/appeals_controller.rb b/app/controllers/appeals_controller.rb
index 2562ac13d4c..6f04e42d805 100644
--- a/app/controllers/appeals_controller.rb
+++ b/app/controllers/appeals_controller.rb
@@ -35,13 +35,12 @@ def show_case_list
end
def document_counts_by_id
- render json: { document_counts_by_id: build_document_counts_hash }
+ render json: { document_counts_by_id: build_document_counts_hash({}) }
rescue Caseflow::Error::EfolderAccessForbidden => error
render(error.serialize_response)
end
- def build_document_counts_hash
- document_counts_by_id_hash = {}
+ def build_document_counts_hash(document_counts_by_id_hash)
params[:appeal_ids].split(",").each do |appeal_id|
begin
document_counts_by_id_hash[appeal_id] =