@@ -3,7 +3,11 @@ import { UseStateful } from '../useStateful';
33
44export type UseArrayActions < T > = {
55 setValue : UseStateful < T [ ] > [ 'setValue' ] ;
6- add : ( value : T ) => void ;
6+ add : ( value : T | T [ ] ) => void ;
7+ push : ( value : T | T [ ] ) => void ;
8+ pop : ( ) => void ;
9+ shift : ( ) => void ;
10+ unshift : ( value : T | T [ ] ) => void ;
711 clear : ( ) => void ;
812 move : ( from : number , to : number ) => void ;
913 removeById : ( id : T extends { id : string } ? string : T extends { id : number } ? number : unknown ) => void ;
@@ -13,7 +17,12 @@ export type UseArray<T = any> = [T[], UseArrayActions<T>];
1317
1418export function useArray < T = any > ( initial : T [ ] ) : UseArray < T > {
1519 const [ value , setValue ] = useState ( initial ) ;
16- const add = useCallback ( a => setValue ( v => [ ...v , a ] ) , [ ] ) ;
20+ const push = useCallback ( a => {
21+ setValue ( v => [ ...v , ...( Array . isArray ( a ) ? a : [ a ] ) ] ) ;
22+ } , [ ] ) ;
23+ const unshift = useCallback ( a => setValue ( v => [ ...( Array . isArray ( a ) ? a : [ a ] ) , ...v ] ) , [ ] ) ;
24+ const pop = useCallback ( ( ) => setValue ( v => v . slice ( 0 , - 1 ) ) , [ ] ) ;
25+ const shift = useCallback ( ( ) => setValue ( v => v . slice ( 1 ) ) , [ ] ) ;
1726 const move = useCallback (
1827 ( from : number , to : number ) =>
1928 setValue ( it => {
@@ -41,14 +50,17 @@ export function useArray<T = any>(initial: T[]): UseArray<T> {
4150 const actions = useMemo (
4251 ( ) => ( {
4352 setValue,
44- add,
45- push : add ,
53+ add : push ,
54+ unshift,
55+ push,
4656 move,
4757 clear,
4858 removeById,
4959 removeIndex,
60+ pop,
61+ shift,
5062 } ) ,
51- [ add , clear , move , removeById , removeIndex ] ,
63+ [ push , unshift , move , clear , removeById , removeIndex , pop , shift ] ,
5264 ) ;
5365 return [ value , actions ] ;
5466}
0 commit comments