vue-fantable
Version:
Vue table component for huge data
165 lines (145 loc) • 3.17 kB
JavaScript
import debounce from './debounce.js'
import cloneDeep from './cloneDeep.js'
/*
* @hasValue
* @desc has value
* @param {array} arr
*/
export function hasValue(rec) {
return rec !== null && rec !== undefined
}
/*
* @isEmptyArray
* @desc is empty array
* @param {array} arr
*/
export function isEmptyArray(arr) {
return !(Array.isArray(arr) && arr.length > 0)
}
/*
* @isEmptyValue
* @desc is empty value
* @param {array} arr
*/
export function isEmptyValue(value) {
return !(value !== '' && value !== undefined && value !== null)
}
/*
* @isDefined
* @desc is defined
* @param {any} val
*/
export function isDefined(val) {
return val !== undefined && val !== null
}
/*
* @isObject
* @desc is object
* @param {any} val
*/
export function isObject(val) {
return val !== null && typeof val === 'object'
}
/*
* @isFunction
* @desc is function
* @param {any} val
*/
export function isFunction(val) {
return typeof val === 'function'
}
/*
* @isBoolean
* @desc is boolean
* @param {any} val
*/
export function isBoolean(val) {
return typeof val === 'boolean'
}
/*
* @isNumber
* @desc is number
* @param {any} val
*/
export function isNumber(val) {
return typeof val === 'number'
}
/*
* @isTrue
* @desc is equal true
* @param {any} val
*/
export function isTrue(val) {
return isBoolean(val) && val
}
/*
* @isFalse
* @desc is equal false
* @param {any} val
*/
export function isFalse(val) {
return isBoolean(val) && !val
}
/*
* @getValByUnit
* @desc get value by unit
* @param {number|string} width - 宽度
*/
export function getValByUnit(width) {
return typeof width === 'number' ? width + 'px' : width
}
/*
* @getParentCompByName
* @desc get parent comp by name
* @param {object} context
* @param {string} name - parent comp name
*/
export function getParentCompByName(context, name) {
let parent = context.$parent
while (parent) {
if (parent.$options.name !== name) {
parent = parent.$parent
} else {
return parent
}
}
return null
}
/**
* @desc get child comps by name
* @param {object} context
* @param {string} name - child comp name
*/
export function getChildCompsByName(context, name) {
const result = []
// @deprecated https://v3-migration.vuejs.org/breaking-changes/children.html
let childrens = context.$children
while (childrens && childrens.length > 0) {
childrens.forEach((child) => {
childrens = child.$children ? child.$children : null
if (child.$options.name === name) {
result.push(child)
}
})
}
return result
}
/*
* @scrollTo
* @desc element scrollTo https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTo
* @param {element} el - element
* @param {object} option - scroll option
*/
export function scrollTo(el, option) {
if (isFunction(el.scrollTo)) {
el.scrollTo(option)
} else {
const { top, left } = option
el.scrollTop = top
el.scrollLeft = left
}
}
export {
debounce,
cloneDeep
}