@theoplayer/react-native-engage
Version:
Engage connector for @theoplayer/react-native
39 lines (34 loc) • 1.21 kB
text/typescript
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;
}