* Performance: Standardize lodash imports to use destructured members
Changes lodash imports of the form `import x from 'lodash/x'` to
`import { x } from 'lodash'` to reduce bundle size.
* Remove unnecessary _ import from Graph component
* Enforce lodash import style
* Fix remaining lodash imports
* Fix: Prevents crash when table receives mixed data formats
Fixes#20075
* Tests: Adds tests for data format reducers
* Refactor: Updates after PR comments
* Refactor: Missed a couple of places where filtering was needed
- use global range types
- add ErrorBoundary around individual Explore components
- fix table merge on empty results
- fix TimePicker date parsing on ISO dates
- fix TimePicker range string after relative move
- Extracted table panel's merge logic to combine multiple tables into one
- Put the merge logic into the table model as it merges multiple table
models
- make use of merge in Explore's table query response handler
- copied tests over to table model spec, kept essential tests in
transformer spec
* Add click on explore table cell to add filter to query
- move query state from query row to explore container to be able to set
modified queries
- added TS interface for columns in table model
- plumbing from table cell click to datasource
- add modifyQuery to prometheus datasource
- implement addFilter as addLabelToQuery with tests
* Review feedback
- using airbnb style for Cell declaration
- fixed addLabelToQuery for complex label values
Currently if a null appears in a table column, for instance in data
returned by postgres, sorting on that gives an arbitrary order. This
is due to null being neither greater or less than any string, which
makes the sort unstable.
Change the table sort function to compare on nullness first. Note
this is a slight behaviour change for numbers, which would otherwise
treat null and 0 as equivalent.
Signed-off-by: Martin Packman <gzlist@googlemail.com>