got store working. now working on product-dimension switcher.
This commit is contained in:
59
features/product/productSlice.ts
Normal file
59
features/product/productSlice.ts
Normal file
@ -0,0 +1,59 @@
|
||||
import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';
|
||||
import { Id, Product } from '@/lib/product';
|
||||
import uuid from "react-native-uuid";
|
||||
import { RootState } from '@/app/store';
|
||||
|
||||
const initialState = {
|
||||
products: [] as Product [],
|
||||
}
|
||||
|
||||
const productsState = createSlice({
|
||||
name: 'products-slice',
|
||||
initialState,
|
||||
reducers: {
|
||||
createProduct(state, action: PayloadAction<Product>) {
|
||||
if (!state) {
|
||||
return initialState
|
||||
}
|
||||
const product = action.payload;
|
||||
if (!product.id) product.id = uuid.v4().toString();
|
||||
state.products = [...state.products, action.payload];
|
||||
return state;
|
||||
},
|
||||
updateProduct(state, action: PayloadAction<Product>) {
|
||||
if (!state) return initialState;
|
||||
const product = action.payload;
|
||||
if (!product.id) {
|
||||
throw new Error("Product has no ID");
|
||||
}
|
||||
state.products = state.products.map((prod) => {
|
||||
return prod.id === product.id ? product : prod;
|
||||
})
|
||||
return state;
|
||||
},
|
||||
deleteProduct(state, action: PayloadAction<Id>) {
|
||||
if (!state) return initialState;
|
||||
state.products = state.products.filter((prod) => {
|
||||
prod.id !== action.payload;
|
||||
})
|
||||
return state;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export const selectProducts = (state : RootState) => {
|
||||
return state.products
|
||||
}
|
||||
|
||||
|
||||
export const actions = {
|
||||
...productsState.actions
|
||||
};
|
||||
|
||||
export const {
|
||||
createProduct,
|
||||
updateProduct,
|
||||
deleteProduct,
|
||||
} = productsState.actions;
|
||||
|
||||
export default productsState.reducer;
|
Reference in New Issue
Block a user