-
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 -
value
: used by QueueApp.jsx to route a URL to a modal component - 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:
- app/controllers/tasks_controller.rb
- Update
TASK_CLASSES_LOOKUP
if a new task type is to be created via theTaskController
. These task types are sent to the frontend via TaskActionRepository'stype
oroptions
parameters. - The controller calls
task.update_from_params
so the new task model should implementupdate_from_params
orupdate_with_instructions
.
- Update
- 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
.
(Or how to trigger the display of an alert there?)
Success messages are typically shown with the showSuccessMessage ui action. Same for errors. Most components will check the redux store to show any error messages that are present. A lot of components will use the requestSave ui action which handles sending a request to the backend and dispatching the success message if it was provided, or an error if the request fails.
Error and success messages are stored in state.ui.messages.error
and state.ui.messages.success
respectively.
You may also want to subsequently clear the alert from the redux state by using something like resetSuccessMessages
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
- 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