import { useCallback } from "react";
import { getClassString } from "../getClassString";
/**
* Добавляет функцию генерации класса для элементов
* @param baseClass - базовый класс (блок)
* @returns {TGetCNFunction} Возвращает функцию `getCN`, которая формирует className по базе блока, элементу, модификаторам и утилитарным классам.
* @example
* import { useCN } from "@delement/ui/utils/react/useCN";
*
* const App = () => {
* const { getCN } = useCN("myAppBaseClass");
* return (
*
*
*
Title with two blocks
*
* )
* }
*/
export type TGetCNFunction = ReturnType["getCN"];
/* eslint-disable-next-line */
/**
*
*/
export const useCN = (baseClass: string = "") => {
const getCN = useCallback((elem: string = "", mod: Record = {}, utilClasses: string[] = []) => {
if (typeof baseClass === "string" && baseClass.length) {
const cn = getClassString(baseClass, elem, mod);
return utilClasses.length ? [ cn, ...utilClasses ].join(" ") : cn;
} else {
return "";
}
}, [ baseClass ]);
return { getCN };
};