+
(
+ { key: item.produto.uid, name: item.produto.nome, quantidade: item.quantidade, preco: item.produto.preco }
+ ))
+ }
+ pagination={false}
+ bordered={true}
+ scroll={{ x: 300, y: 300 }}
+ style={{minHeight:300}}
+ >
+
+
+
+
+ (
+
+ }
+ size="large"
+ title="Deletar"
+ onClick={() => { handleDelete(record.key) }}
/>
+
+ )}
+ />
+
+
+
+
+
+
-
+
- )
- }]}
+
+
+ Total: {`R$ ${valorTotal.toFixed(2)}`}
+
+
+
- />
)
}
diff --git a/first-app/src/pages/Encomenda/encomenda.module.css b/first-app/src/pages/Encomenda/encomenda.module.css
index caad5b9..52861c8 100644
--- a/first-app/src/pages/Encomenda/encomenda.module.css
+++ b/first-app/src/pages/Encomenda/encomenda.module.css
@@ -1,18 +1,33 @@
-.container_table {
+.container_encomenda {
width: 800px;
height: 100%;
margin-top: 3em;
+ gap: 1em;
display: flex;
flex-direction: column;
}
-.container_table__filter{
- width: 100%;
+
+.container_cliente {
+ display: flex;
+ justify-content: space-between;
+ align-items: baseline;
+ gap: 0.5em;
+}
+
+.container_finalize{
display: flex;
- justify-content: end;
- margin-bottom: 1em;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
}
-.container_table__search{
- width: 300px;
+.container_finalize__total{
+ font-size: 1.3em;
}
+
+.container_table {
+ width: 800px;
+ display: flex;
+ flex-direction: column;
+}
\ No newline at end of file
diff --git a/first-app/src/pages/Encomenda/encomendaFilter.tsx b/first-app/src/pages/Encomenda/encomendaFilter.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/first-app/src/services/EncomendaService.ts b/first-app/src/services/EncomendaService.ts
new file mode 100644
index 0000000..c086c51
--- /dev/null
+++ b/first-app/src/services/EncomendaService.ts
@@ -0,0 +1,47 @@
+import { Environments} from "../environments";
+import { Encomenda } from "../interfaces/Encomenda";
+import { ParamsType } from "../interfaces/ParamsType";
+const { URLApi } = Environments;
+
+const newEncomenda = async (encomenda:Encomenda) => {
+
+ const config = {
+ method:"POST",
+ body:JSON.stringify(encomenda),
+ headers: {
+ "Content-type":"application/json",
+ }
+ }
+
+ try {
+ const data = await fetch(`${URLApi}/encomenda`,config)
+ .then((res)=>res.json())
+ .catch((err)=>err);
+
+ return data;
+ } catch (error) {
+ console.log(error)
+ }
+}
+
+const getAllEncomenda = async (parans:ParamsType) => {
+
+ const config = {
+ method:"POST",
+ body:JSON.stringify(parans),
+ headers: {
+ "Content-type":"application/json",
+ }
+ }
+
+ const data = await fetch(`${URLApi}/encomenda/list`,config)
+ .then((res)=>res.json())
+ .catch((err)=>err);
+
+ return data;
+}
+
+export const encomendaService = {
+ newEncomenda,
+ getAllEncomenda
+}
\ No newline at end of file
diff --git a/first-app/src/slices/CarrinhoSlice.ts b/first-app/src/slices/CarrinhoSlice.ts
index af95262..c036d30 100644
--- a/first-app/src/slices/CarrinhoSlice.ts
+++ b/first-app/src/slices/CarrinhoSlice.ts
@@ -22,7 +22,13 @@ export const addItem = createAsyncThunk(
}
)
+export const removeItem = createAsyncThunk(
+ "cart/remove",
+ async (uid:string) => {
+ return uid;
+ }
+)
export const cartSlice = createSlice({
name:"cliente",
@@ -43,7 +49,11 @@ export const cartSlice = createSlice({
notify('Produto adicionado com sucessso!','success')
})
-
+ .addCase(removeItem.fulfilled,(state,action:any)=>{
+ state.itens = state.itens.filter((item:ItemCart) => (item.produto.uid != action.payload));
+ state.valorTotal = calclQuantidade(state.itens);
+ notify('Produto removido com sucessso!','success')
+ })
},
});
diff --git a/first-app/src/slices/EncomendaSlice.ts b/first-app/src/slices/EncomendaSlice.ts
new file mode 100644
index 0000000..5e1ab7b
--- /dev/null
+++ b/first-app/src/slices/EncomendaSlice.ts
@@ -0,0 +1,72 @@
+import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
+import { notify } from "../hooks/useToastfy";
+import { Encomenda } from "../interfaces/Encomenda";
+import { encomendaService } from "../services/EncomendaService";
+import { ParamsType } from "../interfaces/ParamsType";
+
+const initialState = {
+ encomendas:[] as any,
+ loading:false,
+ error:false,
+ message:''
+}
+
+export const newEncomenda = createAsyncThunk(
+ "encomenda/new",
+ async (encomenda:Encomenda, ThunkApi) => {
+ const data = await encomendaService.newEncomenda(encomenda);
+
+ if (data.error) {
+ return ThunkApi.rejectWithValue(data);
+ }
+ return data;
+ }
+)
+
+export const getAllEncomenda = createAsyncThunk(
+ "encomenda/getAll",
+ async (parans:ParamsType) => {
+ const data = await encomendaService.getAllEncomenda(parans);
+ return data;
+ }
+)
+
+export const encomendaSlice = createSlice({
+ name:"cliente",
+ initialState,
+
+ reducers:{
+ resetState:(state)=>{
+ state.loading = false,
+ state.error = false;
+ state.message = ''
+ },
+ },
+
+ extraReducers(builder) {
+ builder
+ .addCase(newEncomenda.pending,(state)=>{
+ state.loading = true;
+ }).addCase(newEncomenda.fulfilled,(state)=>{
+ state.loading = false;
+ state.error = false;
+ notify('Encomenda feita com sucesso!','success')
+ }).addCase(newEncomenda.rejected,(state,action:any)=>{
+ state.loading = false,
+ state.error = true;
+ state.message = action.payload.messege ? action.payload.messege : '';
+ notify(state.message,'error');
+ })
+
+ .addCase(getAllEncomenda.pending,(state)=>{
+ state.loading = true;
+ }).addCase(getAllEncomenda.fulfilled,(state, action:any)=>{
+ state.loading = false;
+ state.error = false;
+ state.encomendas = action.payload.results;
+ })
+ },
+});
+
+export const { resetState } = encomendaSlice.actions;
+export default encomendaSlice.reducer;
\ No newline at end of file
diff --git a/first-app/src/store.ts b/first-app/src/store.ts
index 918c831..fa49a36 100644
--- a/first-app/src/store.ts
+++ b/first-app/src/store.ts
@@ -4,11 +4,13 @@ import { configureStore } from "@reduxjs/toolkit";
import ClienteSlice from "./slices/ClienteSlice";
import ProdutoSlice from "./slices/ProdutoSlice";
import CarrinhoSlice from "./slices/CarrinhoSlice";
+import EncomendaSlice from "./slices/EncomendaSlice";
export default configureStore({
reducer:{
cliente:ClienteSlice,
produto:ProdutoSlice,
- cart:CarrinhoSlice
+ cart:CarrinhoSlice,
+ encomenda:EncomendaSlice
}
})
\ No newline at end of file