@ima/react-page-renderer
Version:
IMA.js React page renderer.
48 lines (47 loc) • 1.52 kB
JavaScript
import { useMemo, useRef } from 'react';
import { usePageContext } from './pageContext';
/**
* "Constructor" like hook, which makes sure, that provided callback
* is called only once during component's lifecycle.
*
* @example
* useOnce(() => {
* oneTimeAction();
* });
*
* @param {Function} callback
*/ export function useOnce(callback) {
const called = useRef(false);
if (called.current) {
return;
}
callback && callback();
called.current = true;
}
/**
* Base hook you can use to initialize your component.
*
* Returns object, which gives you access to the same features you would
* get in your class component:
* - Utility methods: cssClasses, localize, link, fire, listen, unlisten.
* - Objects: utils (=== ComponentUtils).
*
* @example
* const { utils, cssClasses } = useComponent();
*
* @returns Object containing context data and utility methods.
*/ export function useComponent() {
const { $Utils } = usePageContext();
return useMemo(()=>({
utils: $Utils,
cssClasses: (...params)=>$Utils.$CssClasses(...params),
localize: (...params)=>$Utils.$Dictionary.get(...params),
link: (...params)=>$Utils.$Router.link(...params),
fire: (...params)=>$Utils.$EventBus.fire(...params),
listen: (...params)=>$Utils.$EventBus.listen(...params),
unlisten: (...params)=>$Utils.$EventBus.unlisten(...params)
}), [
$Utils
]);
}
//# sourceMappingURL=component.js.map