-
Notifications
You must be signed in to change notification settings - Fork 121
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(partition): add element click, over, out events #578
feat(partition): add element click, over, out events #578
Conversation
This commit adds the element click event to the Partition chart, returning a groupByRollup value for each configured chart layer and the associated value
Codecov Report
@@ Coverage Diff @@
## master #578 +/- ##
=========================================
Coverage ? 70.59%
=========================================
Files ? 220
Lines ? 6376
Branches ? 1226
=========================================
Hits ? 4501
Misses ? 1856
Partials ? 19
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! I like the naming changes (getPickdedShapes
and pickedShapes
) and the new story is great. I especially like the use of storybook actions 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These new cleanup changes LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, Tested locally. The API changes look great, just one idea on the API.
} | ||
|
||
export type XYChartElementEvent = [GeometryValue, XYChartSeriesIdentifier]; | ||
export type PartitionElementEvent = [Array<LayerValue>, SeriesIdentifier]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the order of the LayerValue[]
always hierarchical? If not it should be and would be good to note that.
A similar thought is what if this was recursive instead of an object? Something like...
export interface LayerValue {
groupByRollup: PrimitiveValue;
value: number;
child?: LayerValue;
}
Just a thought, not saying to change it. 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's hierarchical but I'd configured them in the same way you are configuring the hierarchy in the <Partition />
layers
prop
if (selector === null && state.chartType === ChartTypes.Partition) { | ||
selector = createCachedSelector( | ||
[getPieSpecOrNull, getPickedShapesLayerValues, getSettingsSpecSelector], | ||
(pieSpec, nextPickedShapes, settings): void => { | ||
if (!pieSpec) { | ||
return; | ||
} | ||
if (!settings.onElementOver) { | ||
return; | ||
} | ||
|
||
if (isOverElement(prevPickedShapes, nextPickedShapes)) { | ||
const elements = nextPickedShapes.map<[Array<LayerValue>, SeriesIdentifier]>((values) => [ | ||
values, | ||
{ | ||
specId: pieSpec.id, | ||
key: `spec{${pieSpec.id}}`, | ||
}, | ||
]); | ||
settings.onElementOver(elements); | ||
} | ||
prevPickedShapes = nextPickedShapes; | ||
}, | ||
)({ | ||
keySelector: getChartIdSelector, | ||
}); | ||
} | ||
if (selector) { | ||
selector(state); | ||
} | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like there is some common logic between these event listers might be good to provide a factory function at some point. Looks fine for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You are perfectly fine, I will I've already cleaned up a bit this code, I will clean up more in a future PR
@@ -22,8 +22,8 @@ import { $Values as Values } from 'utility-types'; | |||
import { Color, ValueFormatter } from '../../../../utils/commons'; | |||
|
|||
export const PartitionLayout = Object.freeze({ | |||
sunburst: 'sunburst', | |||
treemap: 'treemap', | |||
sunburst: 'sunburst' as 'sunburst', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
😃
# [18.0.0](v17.1.1...v18.0.0) (2020-03-17) ### Code Refactoring * clean up TS types ([#554](#554)) ([22f7635](22f7635)), closes [#547](#547) [#547](#547) * decouple tooltip from XY chart ([#553](#553)) ([e70792e](e70792e)), closes [#246](#246) ### Features * cleaner color API on SeriesSpec ([#571](#571)) ([f769f7c](f769f7c)) * **legend:** allow color picker component render prop ([#545](#545)) ([90f4b95](90f4b95)) * **partition:** add element click, over and out events ([#578](#578)) ([103df02](103df02)) * **partition:** add tooltip ([#544](#544)) ([6bf9a69](6bf9a69)), closes [#246](#246) * percentage display in partitioning charts ([#558](#558)) ([d6aa8d7](d6aa8d7)) * specify series name with a function on SeriesSpec ([#539](#539)) ([358455a](358455a)) * xAccessor can be a function accessor ([#574](#574)) ([bcc3d63](bcc3d63)) ### BREAKING CHANGES * The `getSpecId`, `getGroupId`, `getAxisId` and `getAnnotationId` are no longer available. Use a simple `string` instead. * `customSeriesColors` prop on `SeriesSpec` is now `color`. The `CustomSeriesColors` type is replaced with `SeriesColorAccessor`. * Remove `customSubSeriesName` prop on series specs in favor of cleaner api using just the `name` prop on `SeriesSpec`. The types `SeriesStringPredicate`, `SubSeriesStringPredicate` have been removed. * the `SeriesIdentifier` type is generalized into a simplified object with two values in common: `specId` and `key`. A specialized `XYChartSeriesIdentifier` extends now the base `SeriesIdentifier`. The `SettingsSpec` prop `showLegendDisplayValue` is renamed to `showLegendExtra` and its default value is now `false` hiding the current/last value on the legend by default.
🎉 This PR is included in version 18.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# [18.0.0](elastic/elastic-charts@v17.1.1...v18.0.0) (2020-03-17) ### Code Refactoring * clean up TS types ([opensearch-project#554](elastic/elastic-charts#554)) ([6ce56fa](elastic/elastic-charts@6ce56fa)), closes [opensearch-project#547](elastic/elastic-charts#547) [opensearch-project#547](elastic/elastic-charts#547) * decouple tooltip from XY chart ([opensearch-project#553](elastic/elastic-charts#553)) ([cb02cd0](elastic/elastic-charts@cb02cd0)), closes [opensearch-project#246](elastic/elastic-charts#246) ### Features * cleaner color API on SeriesSpec ([opensearch-project#571](elastic/elastic-charts#571)) ([6a78c4e](elastic/elastic-charts@6a78c4e)) * **legend:** allow color picker component render prop ([opensearch-project#545](elastic/elastic-charts#545)) ([22ef1e6](elastic/elastic-charts@22ef1e6)) * **partition:** add element click, over and out events ([opensearch-project#578](elastic/elastic-charts#578)) ([4189573](elastic/elastic-charts@4189573)) * **partition:** add tooltip ([opensearch-project#544](elastic/elastic-charts#544)) ([0cffed4](elastic/elastic-charts@0cffed4)), closes [opensearch-project#246](elastic/elastic-charts#246) * percentage display in partitioning charts ([opensearch-project#558](elastic/elastic-charts#558)) ([993a448](elastic/elastic-charts@993a448)) * specify series name with a function on SeriesSpec ([opensearch-project#539](elastic/elastic-charts#539)) ([fc6430b](elastic/elastic-charts@fc6430b)) * xAccessor can be a function accessor ([opensearch-project#574](elastic/elastic-charts#574)) ([f702e2c](elastic/elastic-charts@f702e2c)) ### BREAKING CHANGES * The `getSpecId`, `getGroupId`, `getAxisId` and `getAnnotationId` are no longer available. Use a simple `string` instead. * `customSeriesColors` prop on `SeriesSpec` is now `color`. The `CustomSeriesColors` type is replaced with `SeriesColorAccessor`. * Remove `customSubSeriesName` prop on series specs in favor of cleaner api using just the `name` prop on `SeriesSpec`. The types `SeriesStringPredicate`, `SubSeriesStringPredicate` have been removed. * the `SeriesIdentifier` type is generalized into a simplified object with two values in common: `specId` and `key`. A specialized `XYChartSeriesIdentifier` extends now the base `SeriesIdentifier`. The `SettingsSpec` prop `showLegendDisplayValue` is renamed to `showLegendExtra` and its default value is now `false` hiding the current/last value on the legend by default.
Summary
This commit adds the element click event to the Partition chart, returning a groupByRollup value for each configured chart layer and the associated value.
The
ElementClickListener
is now defined with two possible types, one for each chart type:nothing change for the XYChart, but I've added a new type specific for the Partition chart.
This type is composed by the
SeriesIdentifiers
of the Pie/Sunburst and a set ofLayerValue
s on per each defined layer in thelayers
props of aPartition
component.A layer value is an object defined as the following:
The
groupByRollup
property returns group by value relative to the slice of the specific layer.The
value
instead returns the numeric value used to represent percentage as a whole of that specific slice.In this example, clicking on the first slice on the top/right (
source: CN 33
from the parent layerdest: US 77
) the object passed to the listener is:Checklist
Use
strikethroughsto remove checklist items you don't feel are applicable to this PR.src/index.ts
(and stories only import from../src
except for test data & storybook)