@appbuckets/react-ui-core
Version:
Core utilities built for AppBuckets React UI Framework
57 lines (54 loc) • 1.63 kB
JavaScript
import { __read } from 'tslib';
import difference from 'lodash/difference';
import forEach from 'lodash/forEach';
import isNil from 'lodash/isNil';
import flow from 'lodash/fp/flow';
import toArray from 'lodash/fp/toArray';
import map from 'lodash/fp/map';
import flatMap from 'lodash/fp/flatMap';
import split from 'lodash/fp/split';
import filter from 'lodash/fp/filter';
import identity from 'lodash/fp/identity';
import uniq from 'lodash/fp/uniq';
var computeClassNames = flow(
toArray,
map('props.className'),
flatMap(split(/\s+/)),
filter(identity),
uniq
);
var computeClassNameDifference = function (prev, curr) {
return [
difference(curr, prev !== null && prev !== void 0 ? prev : []),
difference(prev, curr !== null && curr !== void 0 ? curr : []),
];
};
var prevClassName = new Map();
function handleClassNamesChange(ref, components) {
if (isNil(ref) || isNil(components)) {
return;
}
var currentClassNames = computeClassNames(components);
var _a = __read(
computeClassNameDifference(prevClassName.get(ref), currentClassNames),
2
),
toAdd = _a[0],
toRemove = _a[1];
if (ref.current !== null) {
forEach(toAdd, function (className) {
var _a;
return (_a = ref.current) === null || _a === void 0
? void 0
: _a.classList.add(className);
});
forEach(toRemove, function (className) {
var _a;
return (_a = ref.current) === null || _a === void 0
? void 0
: _a.classList.remove(className);
});
}
prevClassName.set(ref, currentClassNames);
}
export { handleClassNamesChange as default };