UNPKG

@theoplayer/react-native-engage

Version:
39 lines (34 loc) 1.21 kB
import { Cluster, ClusterConfig, ClusterType, EngageClient, EngageClusterEventType, Entity } from '@theoplayer/react-native-engage'; import { useEffect, useState } from 'react'; /** * useCluster is a convenience hook that listens for changes in the cluster instance, triggering a state update. * * @param engage * @param type * @param config */ export function useCluster(engage?: EngageClient, type?: ClusterType, config?: ClusterConfig) { const [, setEntities] = useState<Entity[]>([]); const [cluster, setCluster] = useState<Cluster | undefined>(undefined); useEffect(() => { if (engage) { const cluster = engage.getCluster(type, config); setCluster(cluster); // Set initial entities list setEntities(cluster?.entities); } }, [engage]); useEffect(() => { const onEntitiesChanged = () => { if (cluster) { // Update new entities list setEntities(cluster?.entities); } }; cluster?.addEventListener(EngageClusterEventType.EntitiesChanged, onEntitiesChanged); return () => { cluster?.removeEventListener(EngageClusterEventType.EntitiesChanged, onEntitiesChanged); }; }, [cluster]); return cluster; }