Skip to content

Commit

Permalink
fix: correct data range for vertical scrollbar
Browse files Browse the repository at this point in the history
  • Loading branch information
lessmost committed Nov 28, 2019
1 parent 36adb84 commit e2a02ac
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
11 changes: 9 additions & 2 deletions src/interaction/helper/data-range.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,17 @@ export const getDataByScaleRange = (
field: string,
values: string[],
data: object[],
[start, end]: [number, number]
[start, end]: [number, number],
vertical: boolean = false
): object[] => {
const groupedData = groupBy(data, field);
const newValues = values.slice(start, end);
const newValues = vertical
? values
.slice()
.reverse()
.slice(start, end)
.reverse()
: values.slice(start, end);

return flatten(map(newValues, (value: string) => groupedData[value] || []));
};
17 changes: 11 additions & 6 deletions src/interaction/scrollbar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,20 +165,25 @@ export default class ScrollBarInteraction extends BaseInteraction {
}

private getScrollRange(): [number, number] {
const startIdx: number = Math.floor((this.cnt - this.step) * this.ratio);
const endIdx: number = startIdx + this.step;
const startIdx: number = Math.floor((this.cnt - this.step) * clamp(this.ratio, 0, 1));
const endIdx: number = Math.min(startIdx + this.step, this.cnt);

return [startIdx, endIdx];
}

private changeViewData([startIdx, endIdx]: [number, number]): void {
const config: Required<IScrollBarInteractionConfig> = getValidScrollBarConfig(this.getInteractionConfig());
const viewLayer: ViewLayer = this.getViewLayer();
const { meta } = viewLayer.options;
const origData: object[] = viewLayer.getData();
const newData: object[] = getDataByScaleRange(this.xScaleCfg.field, this.xScaleCfg.values, origData, [
startIdx,
endIdx,
]);
console.log(`changeViewData range = [${startIdx}, ${endIdx}]`);
const newData: object[] = getDataByScaleRange(
this.xScaleCfg.field,
this.xScaleCfg.values,
origData,
[startIdx, endIdx],
config.type === 'vertical'
);

// ScrollBar在滚动过程中保持Y轴上scale配置: min/max/ticks
this.yScalesCfg.forEach((cfg) => {
Expand Down

0 comments on commit e2a02ac

Please # to comment.