Component: MapComponent (enhancements)
The existing map component requires updates to wire in full functionality. This component should bring in the necessary facades (EventsFacade
, SettingsFacade
, UIPanelsFacade
) and observe the appropriate properties to drive the content displayed in the map. This component should bring in the ZoomComponent
and ZoomToComponent
to expose zooming control to the user. This component should also bring in the MapLegendComponent
to expose a marker legend to the user. The layers displayed to the user should be based entirely on state, and should change based on observed changes in state. Similarly, all markers displayed to the user should be based entirely on state.
All user interactions should call the appropriate facade methods to dispatch actions into the NgRx store to effect state updates. If effects are required to ensure the appropriate behavior occurs for each action, they should be defined and implemented.
If additional selectors are required to efficiently retrieve information from the various pieces of state represented by the three facades, they should be written and added to the appropriate facade. If Selectors must compose state from multiple pieces of state, such as events and settings, or settings and uipanels, or all three...consider writing additional facades to encapsulate the higher level functionality.
TIP: An additional composite selector should be implemented to select a subset of the total markers from the current feed, where the marker lat/long is determined to be within bounds of the current map extent. This subset of markers should then be rendered on the map. This subset of markers may then also be composed into another selector to retrieve the count of markers visible on the map (i.e. to display in the list panel.)
All interactions should be decoupled. User actions should result in actions being dispatched. Changes to UI should be driven by observation of selectors. Any work that must be done in response to an action, aside from adding data to state, should be handled by effects.
This story is intentionally being left somewhat vague, in an effort to force the developer or developers who pull the story in to think about application architecture and design. The skills and tools required to make the map view work are all available and have been taught throughout the prior sprints, and those skills should be employed here to make the map function properly. (Feel free to contact me or request paired programming sessions if necessary.)