2023-05-18 13:02:17 -05:00
|
|
|
import { create } from "zustand";
|
2023-05-20 14:25:00 -05:00
|
|
|
import { AccountSettings } from "@/types/global";
|
2023-05-18 13:02:17 -05:00
|
|
|
|
2023-06-26 17:33:40 -05:00
|
|
|
type ResponseObject = {
|
|
|
|
ok: boolean;
|
2023-07-19 15:39:59 -05:00
|
|
|
data: Omit<AccountSettings, "password"> | object | string;
|
2023-06-26 17:33:40 -05:00
|
|
|
};
|
|
|
|
|
2023-05-18 13:02:17 -05:00
|
|
|
type AccountStore = {
|
2023-05-23 18:07:26 -05:00
|
|
|
account: AccountSettings;
|
2023-07-19 11:14:52 -05:00
|
|
|
setAccount: (id: number) => void;
|
2023-06-26 17:33:40 -05:00
|
|
|
updateAccount: (user: AccountSettings) => Promise<ResponseObject>;
|
2023-05-18 13:02:17 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
const useAccountStore = create<AccountStore>()((set) => ({
|
2023-05-23 18:07:26 -05:00
|
|
|
account: {} as AccountSettings,
|
2023-07-19 11:14:52 -05:00
|
|
|
setAccount: async (id) => {
|
2023-10-22 23:28:39 -05:00
|
|
|
const response = await fetch(`/api/v1/users/${id}`);
|
2023-05-18 13:02:17 -05:00
|
|
|
|
|
|
|
const data = await response.json();
|
|
|
|
|
2023-10-22 23:28:39 -05:00
|
|
|
const profilePic = `/api/v1/avatar/${data.response.id}?${Date.now()}`;
|
2023-05-18 13:02:17 -05:00
|
|
|
|
2023-05-23 18:07:26 -05:00
|
|
|
if (response.ok) set({ account: { ...data.response, profilePic } });
|
2023-05-20 14:25:00 -05:00
|
|
|
},
|
|
|
|
updateAccount: async (user) => {
|
2023-10-22 23:28:39 -05:00
|
|
|
const response = await fetch(`/api/v1/users/${user.id}`, {
|
2023-05-20 14:25:00 -05:00
|
|
|
method: "PUT",
|
|
|
|
body: JSON.stringify(user),
|
|
|
|
headers: {
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
const data = await response.json();
|
|
|
|
|
2023-06-08 08:39:22 -05:00
|
|
|
if (response.ok) set({ account: { ...data.response } });
|
2023-05-21 04:54:42 -05:00
|
|
|
|
2023-06-26 17:33:40 -05:00
|
|
|
return { ok: response.ok, data: data.response };
|
2023-05-18 13:02:17 -05:00
|
|
|
},
|
|
|
|
}));
|
|
|
|
|
|
|
|
export default useAccountStore;
|