( selector: (item: Element) => ReturnedElements = (item) => item as unknown as ReturnedElements, isEqual: (a: ReturnedElements, b: ReturnedElements) => boolean = util.isEqual )
| 34 | * @returns The selected element based on the current cell id. |
| 35 | */ |
| 36 | export function useElement<Element extends GraphElement, ReturnedElements = Element>( |
| 37 | selector: (item: Element) => ReturnedElements = (item) => item as unknown as ReturnedElements, |
| 38 | isEqual: (a: ReturnedElements, b: ReturnedElements) => boolean = util.isEqual |
| 39 | ): ReturnedElements { |
| 40 | const id = useCellId(); |
| 41 | const { subscribe, getElement } = useGraphStore(); |
| 42 | |
| 43 | const subscribeForElement = useCallback( |
| 44 | (subscribeCallback: () => void) => { |
| 45 | return subscribe((changedIds) => { |
| 46 | if (changedIds?.has(id)) { |
| 47 | subscribeCallback(); |
| 48 | } |
| 49 | }); |
| 50 | }, |
| 51 | [id, subscribe] |
| 52 | ); |
| 53 | |
| 54 | const element = useSyncExternalStoreWithSelector( |
| 55 | subscribeForElement, |
| 56 | () => getElement<Element>(id), |
| 57 | () => getElement<Element>(id), |
| 58 | selector, |
| 59 | isEqual |
| 60 | ); |
| 61 | return element; |
| 62 | } |
no test coverage detected