mirror of
https://github.com/streamich/react-use.git
synced 2025-12-08 18:02:14 +00:00
38 lines
702 B
TypeScript
38 lines
702 B
TypeScript
import { useState } from 'react';
|
|
|
|
export interface QueueMethods<T> {
|
|
add: (item: T) => void;
|
|
remove: () => T;
|
|
first: T;
|
|
last: T;
|
|
size: number;
|
|
}
|
|
|
|
const useQueue = <T>(initialValue: T[] = []): QueueMethods<T> => {
|
|
const [state, set] = useState(initialValue);
|
|
return {
|
|
add: (value) => {
|
|
set((queue) => [...queue, value]);
|
|
},
|
|
remove: () => {
|
|
let result;
|
|
set(([first, ...rest]) => {
|
|
result = first;
|
|
return rest;
|
|
});
|
|
return result;
|
|
},
|
|
get first() {
|
|
return state[0];
|
|
},
|
|
get last() {
|
|
return state[state.length - 1];
|
|
},
|
|
get size() {
|
|
return state.length;
|
|
},
|
|
};
|
|
};
|
|
|
|
export default useQueue;
|