1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-01 00:08:27 +01:00
unleash.unleash/frontend/src/hooks/useWeakMap.ts
Nuno Góis 4167a60588
feat: biome lint frontend (#4903)
Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome
to the frontend as well.


![image](https://github.com/Unleash/unleash/assets/14320932/1906faf1-fc29-4172-a4d4-b2716d72cd65)

Added a few `biome-ignore` to speed up the process but we may want to
check and fix them in the future.
2023-10-02 13:25:46 +01:00

34 lines
861 B
TypeScript

import { useState, useCallback, useRef, useMemo } from 'react';
interface IUseWeakMap<K, V> {
set: (k: K, v: V) => void;
get: (k: K) => V | undefined;
}
// A WeakMap associates extra data with an object instance.
// This hook encapsulates a WeakMap, and will trigger
// a rerender whenever `set` is called.
export const useWeakMap = <K extends object, V>(
initial?: WeakMap<K, V>,
): IUseWeakMap<K, V> => {
const ref = useRef(initial ?? new WeakMap<K, V>());
const [, setState] = useState(0);
const set = useCallback((key: K, value: V) => {
ref.current.set(key, value);
setState((prev) => prev + 1);
}, []);
const get = useCallback((key: K) => {
return ref.current.get(key);
}, []);
return useMemo(
() => ({
set,
get,
}),
[set, get],
);
};