Summary
In this chapter, we learned about how to create parent child interaction mechanisms where the child gets data models provided by the parent and fires back requests to the parent. We saw how to implement components to read the result of previously saved data objects, parse them, and assemble new objects that can be used as building blocks of a report.
We experienced how to optimize the query latency by defining indices in Firebase and we learned how to add various spinners while waiting for an observable object. At the end we saw how simple it is to print a page using pure JavaScript functions.
During the report generation phase we noticed anomalies in the data, and that is why in the next chapter we will focus on how to fix troubled contents and how to prevent them from ending up in our database in the future.