2023-05-18 13:02:17 -05:00
// Copyright (C) 2022-present Daniel31x13 <daniel31x13@gmail.com>
// This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3.
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
import { create } from "zustand" ;
2023-05-20 14:25:00 -05:00
import { AccountSettings } from "@/types/global" ;
2023-05-23 18:07:26 -05:00
import avatarExists from "@/lib/client/avatarExists" ;
2023-05-18 13:02:17 -05:00
type AccountStore = {
2023-05-23 18:07:26 -05:00
account : AccountSettings ;
2023-05-23 00:15:24 -05:00
setAccount : ( email : string ) = > void ;
2023-05-21 04:54:42 -05:00
updateAccount : ( user : AccountSettings ) = > Promise < boolean > ;
2023-05-18 13:02:17 -05:00
} ;
2023-05-23 18:07:26 -05:00
const determineProfilePicSource = async ( data : any ) = > {
const path = ` /api/avatar/ ${ data . response . id } ` ;
const imageExists = await avatarExists ( path ) ;
if ( imageExists ) return path + "?" + Date . now ( ) ;
else return null ;
} ;
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-05-23 00:15:24 -05:00
setAccount : async ( email ) = > {
2023-05-18 13:02:17 -05:00
const response = await fetch ( ` /api/routes/users?email= ${ email } ` ) ;
const data = await response . json ( ) ;
2023-05-23 18:07:26 -05:00
const profilePic = await determineProfilePicSource ( data ) ;
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 ) = > {
const response = await fetch ( "/api/routes/users" , {
method : "PUT" ,
body : JSON.stringify ( user ) ,
headers : {
"Content-Type" : "application/json" ,
} ,
} ) ;
const data = await response . json ( ) ;
console . log ( data ) ;
2023-05-23 18:07:26 -05:00
const profilePic = await determineProfilePicSource ( data ) ;
if ( response . ok ) set ( { account : { . . . data . response , profilePic } } ) ;
2023-05-21 04:54:42 -05:00
return response . ok ;
2023-05-18 13:02:17 -05:00
} ,
} ) ) ;
export default useAccountStore ;