Skip to content
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

Fix charts render data outside custom domain #666

Merged
merged 8 commits into from
Jun 16, 2020
Merged
10 changes: 10 additions & 0 deletions packages/core/demo/data/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,11 @@ let allDemoGroups = [
data: lineDemos.lineTimeSeriesData,
chartType: chartTypes.LineChart,
},
{
options: lineDemos.lineTimeSeriesCustomDomainOptions,
data: lineDemos.lineTimeSeriesData,
chartType: chartTypes.LineChart,
},
{
options: lineDemos.lineTimeSeriesDenseOptions,
data: lineDemos.lineTimeSeriesDenseData,
Expand All @@ -337,6 +342,11 @@ let allDemoGroups = [
data: lineDemos.lineData,
chartType: chartTypes.LineChart,
},
{
options: lineDemos.lineCustomDomainOptions,
data: lineDemos.lineData,
chartType: chartTypes.LineChart,
},
{
options: lineDemos.lineTimeSeriesRotatedTicksOptions,
data: lineDemos.lineTimeSeriesDataRotatedTicks,
Expand Down
39 changes: 39 additions & 0 deletions packages/core/demo/data/line.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,27 @@ export const lineOptions = {
},
};

export const lineCustomDomainOptions = {
title: "Line (discrete with custom domain)",
axes: {
bottom: {
title: "2019 Annual Sales Figures",
mapsTo: "key",
scaleType: "labels",
},
left: {
domain: [30000, 50000],
mapsTo: "value",
title: "Conversion rate",
scaleType: "linear",
},
},
chartTypes: {
// TODO
line: ["Dataset 4", "Dataset 1"],
},
};

export const lineTimeSeriesData = [
{ group: "Dataset 1", date: new Date(2019, 0, 1), value: 50000 },
{ group: "Dataset 1", date: new Date(2019, 0, 5), value: 65000 },
Expand Down Expand Up @@ -83,6 +104,24 @@ export const lineTimeSeriesOptions = {
curve: "curveMonotoneX",
};

export const lineTimeSeriesCustomDomainOptions = {
title: "Line (time series with custom domain)",
axes: {
bottom: {
title: "2019 Annual Sales Figures",
domain: [new Date(2019, 0, 5), new Date(2019, 0, 15)],
mapsTo: "date",
scaleType: "time",
},
left: {
mapsTo: "value",
title: "Conversion rate",
scaleType: "linear",
},
},
curve: "curveMonotoneX",
};

export const lineTimeSeriesWithThresholdsOptions = {
title: "Line with thresholds (time series)",
axes: {
Expand Down
19 changes: 18 additions & 1 deletion packages/core/src/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,26 @@ export class ChartModel {
const dataGroups = this.getDataGroups();

// Remove datasets that have been disabled
const displayData = Tools.clone(this.get("data"));
let displayData = Tools.clone(this.get("data"));
const { groupMapsTo } = this.getOptions().data;

const axesOptions = this.getOptions().axes;

// Check for custom domain
if (axesOptions) {
Object.keys(axesOptions).forEach(axis => {
if (axesOptions[axis].domain && axesOptions[axis].mapsTo) {
const mapsTo = axesOptions[axis].mapsTo;
const [start, end] = axesOptions[axis].domain;

// Filter out data outside domain
displayData = displayData.filter((datum) =>
datum[mapsTo] >= start && datum[mapsTo] <= end
)
}
})
}

return displayData.filter((datum) => {
const group = dataGroups.find(
(group) => group.name === datum[groupMapsTo]
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/services/scales-cartesian.ts
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ export class CartesianScales extends Service {

// If domain is specified return that domain
if (axisOptions.domain) {
return axisOptions.domain;
return this.extendsDomain(axisPosition, axisOptions.domain);
}

// If scale is a LABELS scale, return some labels as the domain
Expand Down