[Perf] Teact: Simplify extra classes management

This commit is contained in:
Alexander Zinchuk 2024-09-19 20:43:25 +02:00
parent dfb54bfcc9
commit 590a6f5b4c
2 changed files with 12 additions and 41 deletions

View File

@ -152,7 +152,9 @@ function Transition({
addExtraClass(el, CLASSES.slide); addExtraClass(el, CLASSES.slide);
if (slideClassName) { if (slideClassName) {
addExtraClass(el, slideClassName); slideClassName.split(/\s+/).forEach((token) => {
addExtraClass(el, token);
});
} }
}); });

View File

@ -802,18 +802,7 @@ function updateStyle(element: DOMElement, value: string) {
} }
} }
export function addExtraClass(element: DOMElement, className: string, forceSingle = false) { export function addExtraClass(element: DOMElement, className: string) {
if (!forceSingle) {
const classNames = className.split(' ');
if (classNames.length > 1) {
for (const cn of classNames) {
addExtraClass(element, cn, true);
}
return;
}
}
element.classList.add(className); element.classList.add(className);
const classList = extraClasses.get(element); const classList = extraClasses.get(element);
@ -824,18 +813,7 @@ export function addExtraClass(element: DOMElement, className: string, forceSingl
} }
} }
export function removeExtraClass(element: DOMElement, className: string, forceSingle = false) { export function removeExtraClass(element: DOMElement, className: string) {
if (!forceSingle) {
const classNames = className.split(' ');
if (classNames.length > 1) {
for (const cn of classNames) {
removeExtraClass(element, cn, true);
}
return;
}
}
element.classList.remove(className); element.classList.remove(className);
const classList = extraClasses.get(element); const classList = extraClasses.get(element);
@ -848,24 +826,15 @@ export function removeExtraClass(element: DOMElement, className: string, forceSi
} }
} }
export function toggleExtraClass(element: DOMElement, className: string, force?: boolean, forceSingle = false) { export function toggleExtraClass(element: DOMElement, className: string, force?: boolean) {
if (!forceSingle) { if (force === true) {
const classNames = className.split(' ');
if (classNames.length > 1) {
for (const cn of classNames) {
toggleExtraClass(element, cn, force, true);
}
return;
}
}
element.classList.toggle(className, force);
if (element.classList.contains(className)) {
addExtraClass(element, className); addExtraClass(element, className);
} else { } else if (force === false) {
removeExtraClass(element, className); removeExtraClass(element, className);
} else if (extraClasses.get(element)?.has(className)) {
removeExtraClass(element, className);
} else {
addExtraClass(element, className);
} }
} }