Compare commits

..

20 Commits

Author SHA1 Message Date
rozetko 8264719c82 Merge pull request 'Right y-axis fixes' (#51) from right-y-axis-fixes into main 5 months ago
rozetko 0029d22c4e 0.6.26 5 months ago
rozetko 4f28c5dc13 state: new `getYScaleByOrientation` function 5 months ago
rozetko 2abf246a85 right y-axis: render label 5 months ago
rozetko 839bd12d69 Merge pull request '0.6.25' (#50) from bump-version-to-0.6.25 into main 5 months ago
rozetko 1bfe7f6649 0.6.25 5 months ago
rozetko 95343168d9 Merge pull request 'fix autorange for right y-axis' (#49) from fix-autorange-for-right-y-axis into main 5 months ago
rozetko 2b6fa90af5 fix autorange for right y-axis 5 months ago
Coin de Gamma e841792c34 Merge pull request 'mouse over event type and it's calling' (#44) from onmouseover-event-callback-#42 into main 6 months ago
rozetko c546284e70 Merge pull request 'replace todo with comment' (#40) from styles-use-todo into main 6 months ago
glitch4347 e36148772f mouse over event type and it's calling 6 months ago
glitch4347 90af9810a3 update comment 6 months ago
glitch4347 e24bee024b replace todo with comment 6 months ago
Coin de Gamma bc1e06e515 Merge pull request '0.6.24' (#37) from 0.6.24 into main 9 months ago
glitch4347 eea338db16 0.6.24 9 months ago
Coin de Gamma 63bf4ca931 Merge pull request 'rm abstact keyword and methods' (#36) from bad-abstract-onmouseclick-#35 into main 9 months ago
glitch4347 5fc85d6329 rm abstact keyword and methods 9 months ago
Coin de Gamma b36c226bae Merge pull request '0.6.23' (#34) from 0.6.23 into main 9 months ago
glitch4347 6721f7d127 0.6.23 9 months ago
Coin de Gamma 443d2342f7 Merge pull request 'rm demo from build' (#33) from broken-demo-#32 into main 9 months ago
  1. 6
      demo/demo_pod.ts
  2. 2
      package.json
  3. 12
      src/VueChartwerkPodMixin.ts
  4. 40
      src/index.ts
  5. 6
      src/models/options.ts
  6. 3
      src/models/series.ts
  7. 15
      src/models/state.ts
  8. 1
      src/types.ts

6
demo/demo_pod.ts

@ -51,12 +51,6 @@ class DemoPod extends ChartwerkPod<Serie, Options> {
.attr('d', this.lineGenerator); .attr('d', this.lineGenerator);
} }
onMouseMove(): void {}
onMouseOver(): void {}
onMouseOut(): void {}
onMouseClick(): void {}
renderSharedCrosshair(values): void {}
hideSharedCrosshair(): void {}
} }
export { DemoPod }; export { DemoPod };

2
package.json

@ -1,6 +1,6 @@
{ {
"name": "@chartwerk/core", "name": "@chartwerk/core",
"version": "0.6.22", "version": "0.6.26",
"description": "Chartwerk core", "description": "Chartwerk core",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

12
src/VueChartwerkPodMixin.ts

@ -39,9 +39,9 @@ export default {
}, },
methods: { methods: {
// it's "abstract" method. "children" components should override it // it's "abstract" method. "children" components should override it
render() { }, render() {},
renderSharedCrosshair(values: { x?: number, y?: number }) { }, renderSharedCrosshair(values: { x?: number, y?: number }) {},
hideSharedCrosshair() { }, hideSharedCrosshair() {},
onPanningRescale(event) { onPanningRescale(event) {
this.pod.rescaleMetricAndAxis(event); this.pod.rescaleMetricAndAxis(event);
}, },
@ -63,6 +63,9 @@ export default {
if(has(this.$listeners, 'zoomOut')) { if(has(this.$listeners, 'zoomOut')) {
this.options.events.zoomOut = this.zoomOut.bind(this); this.options.events.zoomOut = this.zoomOut.bind(this);
} }
if(has(this.$listeners, 'mouseOver')) {
this.options.events.mouseOver = this.mouseOver.bind(this);
}
if(has(this.$listeners, 'mouseMove')) { if(has(this.$listeners, 'mouseMove')) {
this.options.events.mouseMove = this.mouseMove.bind(this); this.options.events.mouseMove = this.mouseMove.bind(this);
} }
@ -97,6 +100,9 @@ export default {
zoomOut(centers) { zoomOut(centers) {
this.$emit('zoomOut', centers); this.$emit('zoomOut', centers);
}, },
mouseOver() {
this.$emit('mouseOver');
},
mouseMove(evt) { mouseMove(evt) {
this.$emit('mouseMove', evt); this.$emit('mouseMove', evt);
}, },

40
src/index.ts

@ -37,7 +37,7 @@ import debounce from 'lodash/debounce';
const DEFAULT_TICK_SIZE = 2; const DEFAULT_TICK_SIZE = 2;
abstract class ChartwerkPod<T extends Serie, O extends Options> { class ChartwerkPod<T extends Serie, O extends Options> {
protected series: CoreSeries<T>; protected series: CoreSeries<T>;
protected options: CoreOptions<O>; protected options: CoreOptions<O>;
@ -79,7 +79,8 @@ abstract class ChartwerkPod<T extends Serie, O extends Options> {
_series: T[] = [], _series: T[] = [],
_options: O _options: O
) { ) {
// TODO: test if it's necessary // need to call explicitly because option lazyStyleTag
// in webpack style-loader
styles.use(); styles.use();
this.options = new CoreOptions(_options); this.options = new CoreOptions(_options);
@ -115,6 +116,7 @@ abstract class ChartwerkPod<T extends Serie, O extends Options> {
this.renderLegend(); this.renderLegend();
this.renderYLabel(); this.renderYLabel();
this.renderY1Label();
this.renderXLabel(); this.renderXLabel();
this.options.callbackRenderEnd(); this.options.callbackRenderEnd();
@ -151,13 +153,13 @@ abstract class ChartwerkPod<T extends Serie, O extends Options> {
this.series.updateSeries(newSeries); this.series.updateSeries(newSeries);
} }
protected abstract renderMetrics(): void; protected renderMetrics(): void {}
protected abstract onMouseOver(): void; protected onMouseOver(): void {}
protected abstract onMouseOut(): void; protected onMouseOut(): void {}
protected abstract onMouseMove(): void; protected onMouseMove(): void {}
protected abstract onMouseClick(): void; protected onMouseClick(): void {}
public abstract renderSharedCrosshair(values: { x?: number, y?: number }): void; public renderSharedCrosshair(values: { x?: number, y?: number }): void {}
public abstract hideSharedCrosshair(): void; public hideSharedCrosshair(): void {}
protected initPodState(): void { protected initPodState(): void {
const boxPararms = { const boxPararms = {
@ -508,8 +510,8 @@ abstract class ChartwerkPod<T extends Serie, O extends Options> {
return; return;
} }
this.chartContainer.append('text') this.chartContainer.append('text')
.attr('y', 0 - this.margin.left) .attr('y', -this.margin.left)
.attr('x', 0 - (this.height / 2)) .attr('x', -(this.height / 2))
.attr('dy', '1em') .attr('dy', '1em')
.attr('class', 'y-axis-label') .attr('class', 'y-axis-label')
.attr('transform', 'rotate(-90)') .attr('transform', 'rotate(-90)')
@ -519,6 +521,22 @@ abstract class ChartwerkPod<T extends Serie, O extends Options> {
.text(this.options.axis.y.label); .text(this.options.axis.y.label);
} }
protected renderY1Label(): void {
if(this.options.axis.y1?.label === undefined) {
return;
}
this.chartContainer.append('text')
.attr('y', -this.width - this.margin.right)
.attr('x', (this.height / 2))
.attr('dy', '1em')
.attr('class', 'y-axis-label')
.attr('transform', 'rotate(90)')
.style('text-anchor', 'middle')
.style('font-size', '14px')
.style('fill', 'currentColor')
.text(this.options.axis.y1.label);
}
protected renderXLabel(): void { protected renderXLabel(): void {
if(this.options.axis.x.label === undefined) { if(this.options.axis.x.label === undefined) {
return; return;

6
src/models/options.ts

@ -226,6 +226,12 @@ export class CoreOptions<O extends Options> {
} }
} }
callbackMouseOver(): void {
if(has(this._options.events, 'mouseOver')) {
this._options.events.mouseOver();
}
}
callbackMouseMove(event): void { callbackMouseMove(event): void {
if(has(this._options.events, 'mouseMove')) { if(has(this._options.events, 'mouseMove')) {
this._options.events.mouseMove(event); this._options.events.mouseMove(event);

3
src/models/series.ts

@ -35,6 +35,7 @@ export class CoreSeries<T extends Serie> {
_series: Array<T> = []; _series: Array<T> = [];
constructor(series: T[], private _podDefaults?: Partial<T>) { constructor(series: T[], private _podDefaults?: Partial<T>) {
// TODO: create separate Serie class, and store instances in this._series
this.setSeries(series); this.setSeries(series);
} }
@ -83,7 +84,7 @@ export class CoreSeries<T extends Serie> {
get isSeriesAvailable(): boolean { get isSeriesAvailable(): boolean {
if(this.visibleSeries.length > 0) { if(this.visibleSeries.length > 0) {
const seriesEmptiness = lodashMap(this.visibleSeries, this._isSerieEmpty.bind(this)); const seriesEmptiness = lodashMap(this.visibleSeries, this._isSerieEmpty.bind(this));
return lodashIncludes(seriesEmptiness, false); return lodashIncludes(seriesEmptiness, false);
} }
return false; return false;

15
src/models/state.ts

@ -1,4 +1,4 @@
import { Serie, Options } from '../types'; import { Serie, Options, yAxisOrientation } from '../types';
import { CoreSeries } from './series'; import { CoreSeries } from './series';
import { CoreOptions } from './options'; import { CoreOptions } from './options';
@ -89,6 +89,15 @@ export class PodState<T extends Serie, O extends Options> {
this._transform = { x: 0, y: 0, k: 1 }; this._transform = { x: 0, y: 0, k: 1 };
} }
getYScaleByOrientation(orientation?: yAxisOrientation): d3.ScaleLinear<number, number> {
// TODO: we set defaults in Series class, so we don't expect `undefined` here
// we can remove this check when we implement Serie class (see TODO in `series.ts`)
if(orientation === undefined) {
return this._yScale;
}
return orientation === yAxisOrientation.LEFT ? this._yScale : this._y1Scale;
}
get yScale(): d3.ScaleLinear<number, number> { get yScale(): d3.ScaleLinear<number, number> {
return this._yScale; return this._yScale;
} }
@ -187,7 +196,7 @@ export class PodState<T extends Serie, O extends Options> {
if(this.coreOptions.axis.y1.range !== undefined) { if(this.coreOptions.axis.y1.range !== undefined) {
return min(this.coreOptions.axis.y1.range); return min(this.coreOptions.axis.y1.range);
} }
return this.coreSeries.minValueY; return this.coreSeries.minValueY1;
} }
public getMaxValueY1(): number { public getMaxValueY1(): number {
@ -197,7 +206,7 @@ export class PodState<T extends Serie, O extends Options> {
if(this.coreOptions.axis.y1.range !== undefined) { if(this.coreOptions.axis.y1.range !== undefined) {
return max(this.coreOptions.axis.y1.range); return max(this.coreOptions.axis.y1.range);
} }
return this.coreSeries.maxValueY; return this.coreSeries.maxValueY1;
} }
// getters for correct transform // getters for correct transform

1
src/types.ts

@ -20,6 +20,7 @@ export type Events = {
panning?: (event: { ranges: AxisRange[], d3Event: any }) => void, panning?: (event: { ranges: AxisRange[], d3Event: any }) => void,
panningEnd?: (range: AxisRange[]) => void, panningEnd?: (range: AxisRange[]) => void,
zoomOut?: (centers: {x: number, y: number}) => void, zoomOut?: (centers: {x: number, y: number}) => void,
mouseOver?: () => void,
mouseMove?: (evt: any) => void, mouseMove?: (evt: any) => void,
mouseClick?: (evt: any) => void, mouseClick?: (evt: any) => void,
mouseOut?: () => void, mouseOut?: () => void,

Loading…
Cancel
Save