grid-component-editor
Version:
延长loading超时时间;转义伪类中文,防止乱码
89 lines (75 loc) • 3.15 kB
text/typescript
import { InjectToProps } from './const'
import { CSSVar, Query, EditorComponent } from '../types'
export const _assign = (target: any, ...assignObj: any[]) => Object.assign(target, ...assignObj)
export const _entries = <T>(target: Record<string, T>) => Object.entries(target)
// export const _warning = (warning: string) => console.warn(warning);
export const _createIndex = (index = Date.now() + ''): string =>
index.substring(index.length - 3, index.length)
const defaultCSSVar: Record<CSSVar, string> = {
'--color-primary': ' rgb(12, 188, 241)',
'--text-color-primary': ' #f5f1f1',
'--bdcolor-input': ' rgba(55, 71, 104, 1)',
'--bgcolor-primary': ' rgba(29, 46, 77, 1)',
}
export const getCSSVar = (varName: CSSVar = '--color-primary'): string =>
window.getComputedStyle(document.body).getPropertyValue(varName) || defaultCSSVar[varName]
// 在请求之前格式化query
export const _formatQuery = ({ aggregator, dimensions, measure, ...rest }: Query) => ({
...rest,
aggStatus: false,
dimensions: dimensions.map(([fieldName, fieldType]) => ({
fieldName, fieldType
})),
measure: measure.map(([fieldName, fieldType]) => ({
fieldName, fieldType, aggregator: aggregator[fieldName]
}))
})
// 在保存之前清除gdata
export const _clearCache = (components: Record<string, EditorComponent>): Record<string, EditorComponent> => {
let com: Record<string, EditorComponent> = JSON.parse(JSON.stringify(components))
for (let index in com) {
if (com[index].isDraggable) delete com[index].isDraggable //剔除可能干扰显示模式的属性
_assign(com[index].props, InjectToProps.display)
}
return com
}
// 在对象上注册一个监听器
export const _notifyIn = <T>(targetObj: object, pro: string, notify: (para: T) => T) => {
const privateKey = '_$' + pro
Object.defineProperties(targetObj, {
[privateKey]: {
value: notify(targetObj[pro]),
writable: true
},
[pro]: {
enumerable: true,
get() {
return this[privateKey]
},
set(val) {
notify(this[privateKey] = val)
},
},
})
}
type EventRemover = Function
// 注册Ctrl组合键
export const _ctrlPlus = (notifies: Record<string, Function>): EventRemover => {
const listener = (e: KeyboardEvent) => {
const key = e.key
if (e.ctrlKey && key in notifies) {
if (key === 'z' && (e.target as HTMLElement).tabIndex !== -1) return
e.preventDefault()
notifies[key]()
}
}
document.addEventListener('keydown', listener, false)
return () => {
document.removeEventListener('keydown', listener, false)
}
}
// type StorageK = keyof typeof StorageKey
export const _setStorage = <T extends any>(key: string, val: T) => {
localStorage.setItem(key, JSON.stringify(val))
}
export const _getStorage = <T extends any>(key: string): T => JSON.parse(localStorage.getItem(key))