@nfq/react-grid
Version:
An fork of react-awesome-styled-grid with more screen classes and some features.
30 lines (27 loc) • 1.2 kB
JavaScript
import { useRef, useContext, useEffect, useSyncExternalStore } from 'react';
import { v4 } from 'uuid';
import { ScreenSizeContext } from '../ScreenSizeProvider/ScreenSizeProvider.js';
const useSkeleton = (count, group) => {
const id = useRef(v4());
const store = useContext(ScreenSizeContext);
const selector = state => state[String(group)];
useEffect(() => {
const stateId = id.current;
store.skeletonStore.register(group, {
count,
id: stateId
});
return () => store.skeletonStore.unregister(group, stateId);
}, [count, group, store.skeletonStore]);
const state = useSyncExternalStore(store.skeletonStore.subscribe, () => selector(store.skeletonStore.get()), () => selector(store.skeletonStore.get()));
useEffect(() => {
if (group !== 'default') {
document.querySelectorAll(`[data-skeletongroup="${group}"]`).forEach((element, index) => {
const delay = window.getComputedStyle(element).getPropertyValue('--nfq-grid-skeleton-animation-delay');
element.style.setProperty('--skeleton-delay', `${parseFloat(delay) * index}s`);
});
}
}, [group, state]);
};
export { useSkeleton };
//# sourceMappingURL=useSkeleton.js.map