UNPKG

@mcdevsl/superset-ui

Version:
52 lines (45 loc) 1.38 kB
import { TextStyle } from '../types'; const STYLE_FIELDS: (keyof TextStyle)[] = [ 'font', 'fontWeight', 'fontStyle', 'fontSize', 'fontFamily', 'letterSpacing', ]; export default function updateTextNode( node: SVGTextElement, { className, style = {}, text, }: { className?: string; style?: TextStyle; text?: string; } = {}, ) { const textNode = node; if (textNode.textContent !== text) { textNode.textContent = typeof text === 'undefined' ? null : text; } if (textNode.getAttribute('class') !== className) { textNode.setAttribute('class', className ?? ''); } // Clear style // Note: multi-word property names are hyphenated and not camel-cased. textNode.style.removeProperty('font'); textNode.style.removeProperty('font-weight'); textNode.style.removeProperty('font-style'); textNode.style.removeProperty('font-size'); textNode.style.removeProperty('font-family'); textNode.style.removeProperty('letter-spacing'); // Apply new style // Note: the font field will auto-populate other font fields when applicable. STYLE_FIELDS.filter( (field: keyof TextStyle) => typeof style[field] !== 'undefined' && style[field] !== null, ).forEach((field: keyof TextStyle) => { textNode.style[field] = `${style[field]}`; }); return textNode; }