-
Notifications
You must be signed in to change notification settings - Fork 0
/
useInitialState.tsx
66 lines (59 loc) · 1.39 KB
/
useInitialState.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { useState } from 'react';
import initialState from '../initialState';
interface StateObject {
id: string;
image: string;
title: string;
price: number;
description: string;
}
interface ObjectBuyer {
name: string | null;
email: string | null;
address: string | null;
apt: string | null;
country: string | null;
state: string | null;
pc: string | null;
city: string | null;
phone: string | null;
}
interface AppState {
cart?: StateObject[];
buyer?: ObjectBuyer;
products?: StateObject[];
}
interface InitState {
addToCart: (payload: StateObject) => void;
removeFromCart: (payload: StateObject, indexToRemove: number) => void;
addToBuyer: (payload: ObjectBuyer) => void;
state: AppState;
}
const useInitialState = (): InitState => {
const [state, setState] = useState(initialState);
const addToCart = (payload: StateObject) => {
setState({
...state,
cart: [...state.cart, payload],
});
};
const removeFromCart = (_payload: StateObject, indexToRemove: number) => {
setState({
...state,
cart: state?.cart?.filter((_item, indexCurrent) => indexCurrent !== indexToRemove),
});
};
const addToBuyer = (payload: ObjectBuyer) => {
setState({
...state,
...(state.buyer = payload),
});
};
return {
addToCart,
removeFromCart,
addToBuyer,
state,
};
};
export default useInitialState;