// Copyright 2017-2025 @pezkuwi/react-hooks authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { QueryableStorageEntry } from '@pezkuwi/api/types'; import { useEffect, useRef, useState } from 'react'; import { stringify } from '@pezkuwi/util'; interface Options { transform?: (value: any[]) => T[]; } // FIXME This is generic, we cannot really use createNamedHook export function useMapKeys (entry: QueryableStorageEntry<'promise'> | null | false | undefined, params?: unknown[] | null, { transform }: Options = {}, at?: string | null | false): T[] | undefined { const [state, setState] = useState(); const checkRef = useRef(null); useEffect((): void => { if (entry && params) { const check = stringify({ at, params }); if (check !== checkRef.current) { checkRef.current = check; ( at && at !== '0' // eslint-disable-next-line deprecation/deprecation ? entry.keysAt(at, ...params) : entry.keys(...params) ).then((keys) => setState( transform ? transform(keys) : keys as unknown as T[] )).catch(console.error); } } }, [at, entry, params, transform]); return state; }