keycloakify
Version:
Framework to create custom Keycloak UIs
55 lines • 2.07 kB
JavaScript
import { clsx_withTransform } from "../tools/clsx_withTransform";
import { clsx } from "../tools/clsx";
import { assert, is } from "tsafe/assert";
export function createGetKcClsx(params) {
const { defaultClasses } = params;
function areSameParams(params1, params2) {
if (params1.doUseDefaultCss !== params2.doUseDefaultCss) {
return false;
}
if (params1.classes === params2.classes) {
return true;
}
if (params1.classes === undefined || params2.classes === undefined) {
return false;
}
if (Object.keys(params1.classes).length !== Object.keys(params2.classes).length) {
return false;
}
for (const key in params1.classes) {
if (params1.classes[key] !== params2.classes[key]) {
return false;
}
}
return true;
}
let cache = undefined;
function getKcClsx(params) {
// NOTE: We implement a cache here only so that getClassName can be stable across renders.
// We don't want to use useConstCallback because we want this to be useable outside of React.
use_cache: {
if (cache === undefined) {
break use_cache;
}
if (!areSameParams(cache.params, params)) {
break use_cache;
}
return cache.result;
}
const { classes, doUseDefaultCss } = params;
function kcClsx(...args) {
return clsx_withTransform({
args,
transform: classKey => {
var _a;
assert(is(classKey));
return clsx(classKey, (_a = classes === null || classes === void 0 ? void 0 : classes[classKey]) !== null && _a !== void 0 ? _a : (doUseDefaultCss ? defaultClasses[classKey] : undefined));
}
});
}
cache = { params, result: { kcClsx } };
return { kcClsx };
}
return { getKcClsx };
}
//# sourceMappingURL=getKcClsx.js.map