-
Notifications
You must be signed in to change notification settings - Fork 19
Queue Frontend Development
-
task_action_repository.rb
- referenced by
func
of actions in TASK_ACTIONS.json - defines a configuration used by QueueFlowModal.jsx
-
modal_title
,modal_body
-
type
: Task name -
options
: provided in dropdown menu in the modal -
selected
: initial selection in dropdown menu -
modal_selector_placeholder
: placeholder text for dropdown menu -
redirect_after
: redirect path after submit is pressed and there's no error - custom configurations:
back_to_hearing_schedule
-
- referenced by
-
QueueFlowModal.jsx
- modal window that pops up when a user selects a task action from the dropdown (in the Case Details page of an appeal)
- Many modals simply feed
props
to QueueFlowModal in order to configuresubmit
,success
,pathAfterSubmit
,validateForm
,button
,reloadPageAfterSubmit
etc. - Some
props
also come from the Redux state, e.g., thesuccess
anderror
messages.
-
QueueLoadingScreen.jsx
- used to (potentially) load queues:
queueConfig
,fetchAllAttorneys
,fetchAmaTasksOfUser
,loadAttorneys
- sets common Redux
state.ui
properties, e.g.userId
,userRole
- used to (potentially) load queues:
-
An appeal's case detail pages shows available actions for the logged-in user.
-
A task defines
available_actions
which references constants in TASK_ACTIONS.json. -
TaskActionHelper
build a hash of available actions by returning the TASK_ACTIONS constants or callingfunc
. -
A task calls
TaskActionHelper.build_hash
to create the list of available actions. -
The logic to determine available actions is sometimes defined in
task_action_repository.rb
and other times in the task itself.
Ever see this in React components: export default (connect(mapStateToProps, mapDispatchToProps)(QueueLoadingScreen))
. Here's what it's used for:
-
mapStateToProps
maps Reduxstate
to the component'sprops
- it calls functions like
getTasks
andtaskById
(defined inselectors.js
)
- it calls functions like
-
mapDispatchToProps
maps results of functions (defined inuiActions.js
) toprops
and Reduxstate
- functions like
setUserId
andfetchAllAttorneys
- The functions can be called within the file to update the
state
and hence the page. - These functions return an object with
type
being the Redux action (defined inuiConstants.js
) andpayload
being the thing to be added toprops
.
- functions like
Reducers are defined in uiReducer.js
and are keyed off Redux action type
and do the actual update to the Redux state
.
- When are these reducers called?
Selectors are defined in selectors.js
and are what we use to read and filter through the Redux state
. Here's a quick article with more on what selectors are and why we use them.
(Rough) React component tree for Case Details page
- Queue
- ReduxBase
- QueueApp.jsx
- CaseDetailsLoadingScreen.jsx
- SomeCustomModal.jsx (e.g., AssignToView.jsx)
- QueueFlowModal.jsx
- SomeCustomModal.jsx (e.g., AssignToView.jsx)
- CaseDetailsLoadingScreen.jsx
- QueueApp.jsx
- ReduxBase
(Rough) React component tree for Judge Case Assignment page
- Queue
- ReduxBase
- QueueApp.jsx
- QueueLoadingScreen.jsx
- JudgeAssignTaskListView.jsx
- QueueLoadingScreen.jsx
- QueueApp.jsx
- ReduxBase
Let's track how :user_id
is propagated to components:
Route /queue/:user_id(*rest)(.:format)
is handled by
-
app/controllers/legacy_tasks_controller.rb
- which is an ApplicationController (which sets
current_user
based on the authenticated logged-in user)
- which is an ApplicationController (which sets
If the request is for html
, then controller will render "queue/index"
, which is provided by
- app/views/queue/index.html.erb which
- sets
props.userId
based on thecurrent_user
; - forwards the
props
to children React components, includingQueueApp.jsx
; - and loads React component generator called
Queue
, which:- is defined in
client/app/queue/index.jsx
- and wraps
client/app/queue/QueueApp.jsx
in aReduxBase
that sets up the Redux store withinitialState
- is defined in
- sets
QueueApp.jsx
feeds the props (including userId
) to other React components.
QueueLoadingScreen.jsx
sets ui.loadedUserId
in the Redux store based on props.userId
.
Below are pages within the greater Caseflow wiki related to Frontend development
- Home
- Acronyms and Glossary
- Caseflow products
- Caseflow Intake
- Caseflow Queue
- Appeals Consumer
- Caseflow Reader
- Caseflow eFolder
- Caseflow Hearings
- Caseflow Certification
- Caseflow APIs
- Appeal Status API
- Caseflow Dispatch
-
CSUM Roles
- System Admin
- VHA Team Management
- Active Record Queries Resource
- External Integrations
- Caseflow Demo
- Caseflow ProdTest
- Background
- Stuck Jobs
- VA Notify
-
Caseflow-Team
- Tier 4
- Bat Team
- Technical Documentation
- Backend Code Patterns
- Backend Working Group
- FACOLS, VACOLS DB Schema
- Asyncable Models
- External Data: where and why
- Data Fetching Scripts
- Caseflow Data Model and Dictionary
- User Access Permissions
- Controller Schemas
- Constants
- Frontend Best Practices
- Accessibility
- How-To
- Debugging Tips
- Adding a Feature Flag with FeatureToggle
- Editing AMA issues
- Editing a decision review
- Fixing task trees
- Investigating and diagnosing issues
- Data and Metric Request Workflow
- Exporting and Importing Appeals
- Explain page for Appeals
- Record associations and Foreign Keys
- Upgrading Ruby
- Stuck Appeals
- Testing Action Mailer Messages Locally
- Re-running Seed Files
- Rake Generator for Legacy Appeals
- Manually running Scheduled Jobs
- System Admin UI
- Caseflow Makefile
- Upgrading Postgresql from v11.7 to v14.8 Locally
- VACOLS VM Trigger Fix M1
- Using SlackService to Send a Job Alert
- Technical Talks