File size: 1,029 Bytes
8a37e0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { createMemoizedSelector } from 'app/store/createMemoizedSelector';
import { useAppSelector } from 'app/store/storeHooks';
import { selectCanvasSlice, selectEntityIdentifierBelowThisOne } from 'features/controlLayers/store/selectors';
import type { CanvasRenderableEntityIdentifier } from 'features/controlLayers/store/types';
import { getEntityIdentifier } from 'features/controlLayers/store/types';
import { useMemo } from 'react';

export const useEntityIdentifierBelowThisOne = <T extends CanvasRenderableEntityIdentifier>(
  entityIdentifier: T
): T | null => {
  const selector = useMemo(
    () =>
      createMemoizedSelector(selectCanvasSlice, (canvas) => {
        const nextEntity = selectEntityIdentifierBelowThisOne(canvas, entityIdentifier);
        if (!nextEntity) {
          return null;
        }
        return getEntityIdentifier(nextEntity);
      }),
    [entityIdentifier]
  );
  const entityIdentifierBelowThisOne = useAppSelector(selector);

  return entityIdentifierBelowThisOne as T | null;
};