Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 19 additions & 32 deletions src/helpers/helpers.extras.js → src/helpers/helpers.extras.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import {type ChartMeta, type PointElement} from '../../types';

import {_limitValue} from './helpers.math';
import {_lookupByKey} from './helpers.collection';

export function fontString(pixelSize, fontStyle, fontFamily) {
export function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want the fontStyle types as the different types like bold, italic etc?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could. Not sure how complicated that might be given all the combinations of styles that could be supplied

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably not worth the effort

return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
}

Expand All @@ -20,18 +22,14 @@ export const requestAnimFrame = (function() {
/**
* Throttles calling `fn` once per animation frame
* Latest arguments are used on the actual call
* @param {function} fn
* @param {*} thisArg
* @param {function} [updateFn]
*/
export function throttled(fn, thisArg, updateFn) {
const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));
export function throttled<TArgs extends Array<any>>(
fn: (...args: TArgs) => void,
thisArg: any,
) {
let ticking = false;
let args = [];

return function(...rest) {
args = updateArgs(rest);

return function(...args: TArgs) {
if (!ticking) {
ticking = true;
requestAnimFrame.call(window, () => {
Expand All @@ -44,61 +42,46 @@ export function throttled(fn, thisArg, updateFn) {

/**
* Debounces calling `fn` for `delay` ms
* @param {function} fn - Function to call.
* @param {number} delay - Delay in ms. 0 = immediate invocation.
* @returns {function}
*/
export function debounce(fn, delay) {
export function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {
let timeout;
return function(...args) {
return function(...args: TArgs) {
if (delay) {
clearTimeout(timeout);
timeout = setTimeout(fn, delay, args);
} else {
fn.apply(this, args);
fn.apply<any, TArgs, void>(this, args);
}
return delay;
};
}

/**
* Converts 'start' to 'left', 'end' to 'right' and others to 'center'
* @param {string} align start, end, center
* @private
*/
export const _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';
export const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';

/**
* Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`
* @param {string} align start, end, center
* @param {number} start value for start
* @param {number} end value for end
* @private
*/
export const _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;
export const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;

/**
* Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`
* @param {string} align start, end, center
* @param {number} left value for start
* @param {number} right value for end
* @param {boolean} rtl Is this an RTL draw
* @private
*/
export const _textX = (align, left, right, rtl) => {
export const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {
const check = rtl ? 'left' : 'right';
return align === check ? right : align === 'center' ? (left + right) / 2 : left;
};

/**
* Return start and count of visible points.
* @param {object} meta - dataset meta.
* @param {array} points - array of point elements.
* @param {boolean} animationsDisabled - if true animation is disabled.
* @returns {{start: number; count: number}}
* @private
*/
export function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {
export function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {
const pointCount = points.length;

let start = 0;
Expand All @@ -111,13 +94,17 @@ export function _getStartAndCountOfVisiblePoints(meta, points, animationsDisable

if (minDefined) {
start = _limitValue(Math.min(
// @ts-expect-error Need to type _parsed
_lookupByKey(_parsed, iScale.axis, min).lo,
// @ts-expect-error Need to fix types on _lookupByKey
animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),
0, pointCount - 1);
}
if (maxDefined) {
count = _limitValue(Math.max(
// @ts-expect-error Need to type _parsed
_lookupByKey(_parsed, iScale.axis, max, true).hi + 1,
// @ts-expect-error Need to fix types on _lookupByKey
animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),
start, pointCount) - start;
} else {
Expand Down
1 change: 1 addition & 0 deletions src/helpers/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export * from './helpers.color';
export * from './helpers.collection';
export * from './helpers.core';
export * from './helpers.easing';
export * from './helpers.extras';
export * from './helpers.interpolation';
export * from './helpers.intl';
export * from './helpers.math';
Expand Down
5 changes: 1 addition & 4 deletions src/platform/platform.dom.js
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,7 @@ function createProxyAndListen(chart, type, listener) {
if (chart.ctx !== null) {
listener(fromNativeEvent(event, chart));
}
}, chart, (args) => {
const event = args[0];
return [event, event.offsetX, event.offsetY];
});
}, chart);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Initially I had provided some very complex types for throttled so that we could verify the arguments to the callback function. However, this identified that we don't actually use the 2nd and 3rd parameters here so I removed the 3rd argument. That change allowed removal of the updateFn from the helper which is the breaking change


addListener(canvas, type, proxy);

Expand Down
23 changes: 0 additions & 23 deletions types/helpers/helpers.extras.d.ts

This file was deleted.

1 change: 0 additions & 1 deletion types/helpers/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
export * from './helpers.canvas';
export * from './helpers.curve';
export * from './helpers.dom';
export * from './helpers.extras';
export * from './helpers.options';
export * from './helpers.canvas';
export * from './helpers.segment';