* Add type property to CellQuery model
* Make an enum for QueryType
* Add type property to Query model on backend
* Add query type checking to CEO reducer and Layout
* Update swagger.json docs
Prevent dashboard cell axis overwriting if Bounds is empty
Add measurements field to protoboards meta
Correct comment on protoboardsStore
Add styling and copy polish to wizards
Update Protoboards to include meta.measurements
Refactor protoboard suggestion
Update Wizard tests to incorporate capitalizations
Add types to protoboardsSuggestion
Fix go tests
* feat: add Note string field to dashboard cells
* wip feat: html escape cell note to help prevent XSS attack
Requires further input to make sure this is effective at its
purpose.
* Add ability to view a cell's note from the cell header
* Make styles less brittle
* Add "chat" icon for use in notes
* Position note using cell X & Y
Avoid overlap with associated cell whenever possible
* New notes are empty strings by default
* Overflow note when contents are large
* Add react-markdown package for displaying markdown
* Display markdown in cell note
* Add a cell note text editor into the CEO
* Improve cell note editor
* Use codemirror placeholder addon
* Add placeholder to note field & foundation of markdown theme
* Add Markdown Cell
* Add initial styles for markdown cell contents
* Add graphic for Note type cell
* feat: add NoteVisibility to DashboardCell
* Add basic markdown syntax highlighting in editor
* Remove comment
* Show note in cell when queries return no data
* Make exception for rule graph
* Update fixtures and resources to fix tests
* Update changelog
* feat: sanitize xss-vulnerable note html
* Polish appearance of code samples in notes and note cells
* Replace ascii with plaintext before passing to markdown renderers
* Move "display when no results toggle" above text field
Less likely to go undiscovered
The pattern of using a select with a list of options and a default that
returns an error isn't bad for a one-off validation:
select myProp {
case "validOption1", "validOption2":
// no-op
default:
panic("invalid!")
}
However, we're doing this multiple times in this method, so it makes
sense to pull this out into a new method to make it clearer what's
happening.
This adds a `oneOf` function that takes some property and a variadic
list of valid options and reports whether or not that property is among
that list.
The Base and Scale options on axes can only be one of two parameters. We
weren't validating that this was the case. This patch ensures that Base
can only ever be "10" or "2", and Scale must be either "linear" or
"log".
Associated test coverage was also added.
Because we are now creating new instances of dashboards when we create a
response, it's critical to copy every element of Dashboards from the
previous to the new instance.
We were not previously copying the Type field of cells, so this was
defaulting to the empty string zero value. This patch adds "Type" to the
tests and ensures that it's properly copied
Dashboard responses had data races because multiple goroutines were
reading and modifying dashboards before sending them out on the wire.
This patch introduces immutability in the construction of the response,
so that each goroutine is working with its own set of dashboardResponse
structs.
The contract with the frontend states that bounds should come back as an
empty array instead of null when there are no bounds present. We must
explicitly specify []string{} for this to happen.
Certain aspects of the frontend requires the presence of these three
axes, so part of the contract established is that the backend will
always provide them. Since we centralize creation of
dashboardCellResponses, this is where these axes are added to all cell
responses.
Additionally, because there was previously no coverage over the
dashboard cells endpoints, a test has been added to cover the
DashboardCells method of Service.
For the forseeable future, we will only be using the "x", "y", and "y2"
axes, even though the underlying serialization can support arbitrary
axes (for the future).
This ensures that only "x", "y", and "y2" axes are present and updates
the Swagger docs to reflect that fact