UNPKG

@deck.gl/react

Version:

React Components for deck.gl

35 lines 1.54 kB
// deck.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import { useContext, useMemo, useEffect } from 'react'; import { DeckGlContext } from "./deckgl-context.js"; import { log, _deepEqual as deepEqual } from '@deck.gl/core'; export function useWidget(WidgetClass, props) { const context = useContext(DeckGlContext); const { widgets, deck } = context; useEffect(() => { // warn if the user supplied a pure-js widget, since it will be ignored // NOTE: This effect runs once per widget. Context widgets and deck widget props are synced after first effect runs. const internalWidgets = deck?.props.widgets; if (widgets?.length && internalWidgets?.length && !deepEqual(internalWidgets, widgets, 1)) { log.warn('"widgets" prop will be ignored because React widgets are in use.')(); } return () => { // Remove widget from context when it is unmounted const index = widgets?.indexOf(widget); if (index && index !== -1) { widgets?.splice(index, 1); deck?.setProps({ widgets }); } }; }, []); const widget = useMemo(() => new WidgetClass(props), [WidgetClass]); // Hook rebuilds widgets on every render: [] then [FirstWidget] then [FirstWidget, SecondWidget] widgets?.push(widget); widget.setProps(props); useEffect(() => { deck?.setProps({ widgets }); }, [widgets]); return widget; } //# sourceMappingURL=use-widget.js.map