UNPKG

@appbuckets/react-ui-core

Version:

Core utilities built for AppBuckets React UI Framework

57 lines (54 loc) 1.63 kB
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 };