Skip to content

Commit

Permalink
✨ Add state store to new frontend (#592)
Browse files Browse the repository at this point in the history
  • Loading branch information
alejsdev authored Feb 12, 2024
1 parent 889d97f commit 2014a3b
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/new-frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
25 changes: 25 additions & 0 deletions src/new-frontend/src/store/items-store.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { create } from "zustand";
import { ItemCreate, ItemOut, ItemsService } from "../client";

interface ItemsStore {
items: ItemOut[];
getItems: () => Promise<void>;
addItem: (item: ItemCreate) => Promise<void>;
deleteItem: (id: number) => Promise<void>;
}

export const useItemsStore = create<ItemsStore>((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) }));
}
}));
19 changes: 19 additions & 0 deletions src/new-frontend/src/store/user-store.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { create } from "zustand";
import { UserOut, UsersService } from "../client";

interface UserStore {
user: UserOut | null;
getUser: () => Promise<void>;
resetUser: () => void;
}

export const useUserStore = create<UserStore>((set) => ({
user: null,
getUser: async () => {
const user = await UsersService.readUserMe();
set({ user });
},
resetUser: () => {
set({ user: null });
}
}));
21 changes: 21 additions & 0 deletions src/new-frontend/src/store/users-store.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { create } from "zustand";
import { UserCreate, UserOut, UsersService } from "../client";

interface UsersStore {
users: UserOut[];
getUsers: () => Promise<void>;
addUser: (user: UserCreate) => Promise<void>;
}

export const useUsersStore = create<UsersStore>((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
}))

0 comments on commit 2014a3b

Please sign in to comment.