strudel/website/src/useStore.mjs
2023-02-19 22:32:28 +01:00

23 lines
626 B
JavaScript

import { useEffect, useState } from 'react';
// import { useEvent } from '@strudel.cycles/react';
import * as Store from '../public/store.mjs';
import {} from 'react';
function useStore() {
const [state, setState] = useState(Store.get());
useEvent(Store.storeKey, (e) => setState(e.detail.next));
return { state, ...Store };
}
// TODO: dedupe
function useEvent(name, onTrigger, useCapture = false) {
useEffect(() => {
document.addEventListener(name, onTrigger, useCapture);
return () => {
document.removeEventListener(name, onTrigger, useCapture);
};
}, [onTrigger]);
}
export default useStore;