1. Basic Search
- Add search method to contact service
- Add search method to list component
- Add search box to contacts list template
- Wire it all up
2. Debounce and Deduplicate Searches
- Pipe search input events to a new Subject property
- Pipe the Subject through
debounce and distinctUntilChanged before the subscription does the actual search
3. Out of Order Responses
- Chuck a
switchMap in the search terms pipe. This stops previous slow search responses from overwriting newer ones
- Merge this observable with the initial all contacts observable. This stops the initial contact list from being empty
- (simulate the initial get all contacts load being super slow and find a way a way to deal with this)
4. Refactor to a Service
- Move the search complexity from the list component into the contracts service