useAssembleData.hook.ts
1.1 KB
/**
* 此hook的作用是 ws 组装图表需要的数据格式
* @param data {'wendu':[[xxxxxx,xxxx]]}
* @returns keys:[xx,xx,xx] record:{'x':'xx'}
*/
import { isNullOrUnDef } from '@/utils/external/is'
import dayjs from 'dayjs'
export const useAssembleDataHooks = (data: Record<string, string | [number, string]>, dimensions: string[],attrName?:string[]) => {
const formatValueToNumber = (value: string | number, defaultValue = 0) =>
isNaN(value as number) ? defaultValue : Number(value)
const tempObj: Recordable = {}
dimensions
.filter(f => f !== 'ts')
.forEach((item: string) => {
Object.assign(tempObj, {
[item]: data[item]
})
})
const keys = Object.keys(tempObj)
const record = keys.reduce((prev, next,index) => {
const [latest] = data[next] || []
if (isNullOrUnDef(latest)) return prev
const [ts, value] = latest as unknown as string[]
//把值转为number类型 wendu:"23" 转为 wendu:23
return { ...prev, ts: dayjs(ts).format('YYYY-MM-DD HH:mm:ss'),[ attrName![index]]: formatValueToNumber(value) }
}, {})
return {
keys,
record
}
}