From 2014a3bcf5cb7f3fb1ac5d4b4ab535eeb0527629 Mon Sep 17 00:00:00 2001 From: Alejandra <90076947+alejsdev@users.noreply.github.com> Date: Mon, 12 Feb 2024 14:03:08 -0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20state=20store=20to=20new=20fr?= =?UTF-8?q?ontend=20(#592)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/new-frontend/package.json | 4 +++- src/new-frontend/src/store/items-store.tsx | 25 ++++++++++++++++++++++ src/new-frontend/src/store/user-store.tsx | 19 ++++++++++++++++ src/new-frontend/src/store/users-store.tsx | 21 ++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/new-frontend/src/store/items-store.tsx create mode 100644 src/new-frontend/src/store/user-store.tsx create mode 100644 src/new-frontend/src/store/users-store.tsx diff --git a/src/new-frontend/package.json b/src/new-frontend/package.json index e1187f3..da94d40 100644 --- a/src/new-frontend/package.json +++ b/src/new-frontend/package.json @@ -22,7 +22,9 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "7.49.3", - "react-router-dom": "6.21.1" + "react-icons": "5.0.1", + "react-router-dom": "6.21.1", + "zustand": "4.5.0" }, "devDependencies": { "@types/node": "20.10.5", diff --git a/src/new-frontend/src/store/items-store.tsx b/src/new-frontend/src/store/items-store.tsx new file mode 100644 index 0000000..dbd6ac7 --- /dev/null +++ b/src/new-frontend/src/store/items-store.tsx @@ -0,0 +1,25 @@ +import { create } from "zustand"; +import { ItemCreate, ItemOut, ItemsService } from "../client"; + +interface ItemsStore { + items: ItemOut[]; + getItems: () => Promise; + addItem: (item: ItemCreate) => Promise; + deleteItem: (id: number) => Promise; +} + +export const useItemsStore = create((set) => ({ + items: [], + getItems: async () => { + const itemsResponse = await ItemsService.readItems({ skip: 0, limit: 10 }); + set({ items: itemsResponse }); + }, + addItem: async (item: ItemCreate) => { + const itemResponse = await ItemsService.createItem({ requestBody: item}); + set((state) => ({ items: [...state.items, itemResponse] })); + }, + deleteItem: async (id: number) => { + await ItemsService.deleteItem({ id }); + set((state) => ({ items: state.items.filter((item) => item.id !== id) })); + } +})); \ No newline at end of file diff --git a/src/new-frontend/src/store/user-store.tsx b/src/new-frontend/src/store/user-store.tsx new file mode 100644 index 0000000..0d4312d --- /dev/null +++ b/src/new-frontend/src/store/user-store.tsx @@ -0,0 +1,19 @@ +import { create } from "zustand"; +import { UserOut, UsersService } from "../client"; + +interface UserStore { + user: UserOut | null; + getUser: () => Promise; + resetUser: () => void; +} + +export const useUserStore = create((set) => ({ + user: null, + getUser: async () => { + const user = await UsersService.readUserMe(); + set({ user }); + }, + resetUser: () => { + set({ user: null }); + } +})); \ No newline at end of file diff --git a/src/new-frontend/src/store/users-store.tsx b/src/new-frontend/src/store/users-store.tsx new file mode 100644 index 0000000..5a0af29 --- /dev/null +++ b/src/new-frontend/src/store/users-store.tsx @@ -0,0 +1,21 @@ +import { create } from "zustand"; +import { UserCreate, UserOut, UsersService } from "../client"; + +interface UsersStore { + users: UserOut[]; + getUsers: () => Promise; + addUser: (user: UserCreate) => Promise; +} + +export const useUsersStore = create((set) => ({ + users: [], + getUsers: async () => { + const usersResponse = await UsersService.readUsers({ skip: 0, limit: 10 }); + set({ users: usersResponse }); + }, + addUser: async (user: UserCreate) => { + const userResponse = await UsersService.createUser({ requestBody: user }); + set((state) => ({ users: [...state.users, userResponse] })); + }, + // TODO: Add delete user +})) \ No newline at end of file