Skip to content

Commit

Permalink
feat(util): add debounce util
Browse files Browse the repository at this point in the history
  • Loading branch information
rendrom committed Jan 28, 2020
1 parent fb0e502 commit c89223e
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 44 deletions.
8 changes: 8 additions & 0 deletions packages/utils/src/debounce.ts
@@ -0,0 +1,8 @@
export function debounce<T extends Function>(cb: T, wait = 10) {
let h = 0;
const callable = (...args: any) => {
clearTimeout(h);
h = window.setTimeout(() => cb(...args), wait);
};
return (callable as any) as T;
}
43 changes: 43 additions & 0 deletions packages/utils/src/deepmerge.ts
@@ -0,0 +1,43 @@
export function deepmerge(target: any, src: any, mergeArray = false): any {
const array = Array.isArray(src);
let dst: any = (array && []) || {};

if (array) {
if (mergeArray) {
target = target || [];
dst = dst.concat(target);
src.forEach(function(e: any, i: any) {
if (typeof dst[i] === 'undefined') {
dst[i] = e;
} else if (typeof e === 'object') {
dst[i] = deepmerge(target[i], e, mergeArray);
} else {
if (target.indexOf(e) === -1) {
dst.push(e);
}
}
});
} else {
// Replace array. Do not merge by default
dst = src;
}
} else {
if (target && typeof target === 'object') {
Object.keys(target).forEach(function(key) {
dst[key] = target[key];
});
}
Object.keys(src).forEach(function(key) {
if (typeof src[key] !== 'object' || !src[key]) {
dst[key] = src[key];
} else {
if (typeof target[key] === 'object' && typeof src[key] === 'object') {
dst[key] = deepmerge(target[key], src[key], mergeArray);
} else {
dst[key] = src[key];
}
}
});
}
return dst;
}
46 changes: 2 additions & 44 deletions packages/utils/src/index.ts
Expand Up @@ -6,6 +6,8 @@ import * as Dom from './dom';
export const dom = Dom;
export * from './clipboard';
export * from './events';
export { deepmerge } from './deepmerge';
export { debounce } from './debounce';
/**
* Given an array of member function names as strings, replace all of them
* with bound versions that will always refer to `context` as `this`. This
Expand All @@ -30,47 +32,3 @@ export function fixUrlStr(url: string): string {
// remove double slash
return url.replace(/([^:]\/)\/+/g, '$1');
}

export function deepmerge(target: any, src: any, mergeArray = false): any {
const array = Array.isArray(src);
let dst: any = (array && []) || {};

if (array) {
if (mergeArray) {
target = target || [];
dst = dst.concat(target);
src.forEach(function(e: any, i: any) {
if (typeof dst[i] === 'undefined') {
dst[i] = e;
} else if (typeof e === 'object') {
dst[i] = deepmerge(target[i], e, mergeArray);
} else {
if (target.indexOf(e) === -1) {
dst.push(e);
}
}
});
} else {
// Replace array. Do not merge by default
dst = src;
}
} else {
if (target && typeof target === 'object') {
Object.keys(target).forEach(function(key) {
dst[key] = target[key];
});
}
Object.keys(src).forEach(function(key) {
if (typeof src[key] !== 'object' || !src[key]) {
dst[key] = src[key];
} else {
if (typeof target[key] === 'object' && typeof src[key] === 'object') {
dst[key] = deepmerge(target[key], src[key], mergeArray);
} else {
dst[key] = src[key];
}
}
});
}
return dst;
}

0 comments on commit c89223e

Please sign in to comment.