import type { DisplayObject } from '@antv/g';
import { get, set } from '@antv/util';
const CacheTargetKey = 'cachedStyle';
const getStyleCacheKey = (name: string) => `__${name}__`;
/**
* 缓存图形样式
*
* Cache shape style
* @param element - 图形元素 | shape element
* @param name - 样式名 | style name
*/
export function cacheStyle(element: DisplayObject, name: string | string[]) {
const names = Array.isArray(name) ? name : [name];
if (!get(element, CacheTargetKey)) set(element, CacheTargetKey, {});
names.forEach((n) => {
set(get(element, CacheTargetKey), getStyleCacheKey(n), element.attributes[n]);
});
}
/**
* 获取缓存的样式
*
* Get cached style
* @param element - 图形元素 | shape element
* @param name - 样式名 | style name
* @returns 样式值 | style value
*/
export function getCachedStyle(element: DisplayObject, name: string) {
return get(element, [CacheTargetKey, getStyleCacheKey(name)]);
}
/**
* 是否有缓存的样式
*
* Whether there is a cached style
* @param element - 图形元素 | shape element
* @param name - 样式名 | style name
* @returns 是否有缓存的样式 | Whether there is a cached style
*/
export function hasCachedStyle(element: DisplayObject, name: string) {
return getStyleCacheKey(name) in (get(element, CacheTargetKey) || {});
}
/**
* 设置缓存的样式
*
* Set cached style
* @param element - 图形元素 | shape element
* @param name - 样式名 | style name
* @param value - 样式值 | style value
*/
export function setCacheStyle(element: DisplayObject, name: string, value: any) {
set(element, [CacheTargetKey, getStyleCacheKey(name)], value);
}