1- import { useCallback , useMemo , useState } from 'react' ;
1+ import { useMemo } from 'react' ;
22import { UseStateful } from './useStateful' ;
3+ import useMapArray from './array/useMap' ;
34
45export type MapOrEntries < K , V > = Map < K , V > | [ K , V ] [ ] ;
56export type UseMap < K , V > = UseStateful < Map < K , V > > & {
@@ -10,41 +11,13 @@ export type UseMap<K, V> = UseStateful<Map<K, V>> & {
1011} ;
1112
1213export function useMap < K , V > ( initialState : MapOrEntries < K , V > = new Map ( ) ) : UseMap < K , V > {
13- const [ map , setMap ] = useState ( Array . isArray ( initialState ) ? new Map ( initialState ) : initialState ) ;
14-
15- const set = useCallback ( ( key , value ) => {
16- setMap ( aMap => {
17- const copy = new Map ( aMap ) ;
18- return copy . set ( key , value ) ;
19- } ) ;
20- } , [ ] ) ;
21-
22- const deleteByKey = useCallback ( key => {
23- setMap ( _map => {
24- const copy = new Map ( _map ) ;
25- copy . delete ( key ) ;
26- return copy ;
27- } ) ;
28- } , [ ] ) ;
29-
30- const clear = useCallback ( ( ) => {
31- setMap ( ( ) => new Map ( ) ) ;
32- } , [ ] ) ;
33-
34- const initialize = useCallback ( ( mapOrTuple : MapOrEntries < K , V > = [ ] ) => {
35- setMap ( ( ) => new Map ( mapOrTuple ) ) ;
36- } , [ ] ) ;
37-
14+ const [ map , actions ] = useMapArray ( initialState ) ;
3815 return useMemo (
3916 ( ) => ( {
4017 value : map ,
41- setValue : setMap ,
42- clear,
43- set,
44- remove : deleteByKey ,
45- initialize,
18+ ...actions ,
4619 } ) ,
47- [ clear , deleteByKey , initialize , map , set ] ,
20+ [ actions , map ] ,
4821 ) ;
4922}
5023
0 commit comments