You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.6 KiB

4 months ago
import { createContext, useState, useEffect, useContext, use } from "react";
4 months ago
import moment from "moment";
4 months ago
import { updateUser } from "./backend";
4 months ago
const userContext=createContext();
4 months ago
const SessionTime={
4 months ago
A:["12:00", "13:30"],
B:["13:30", "15:00"],
C:["15:00", "17:30"],
D:["17:30", "19:00"],
E:["19:00", "20:30"],
F:["20:30", "22:00"]
}
export function UserProvider({children}) {
const [userId, setUserId] = useState(null);
const [sessionId, setSessionId] = useState(null);
const [password, setPassword] = useState(null);
4 months ago
const [choice, setChoice] = useState(null);
const [summary, setSummary] = useState(null);
4 months ago
4 months ago
function getFileId(pass){
if(!userId) return `${password||moment().format('hhmmss')}_testuser`;
return `${password||pass||''}_${userId}`;
4 months ago
}
4 months ago
function getDataId(){
4 months ago
if(!userId) return `${moment().format('YYYYMM')}/${moment().format("MMDD")}/${SessionTime[sessionId]!=null? SessionTime[sessionId][0].replace(':',''):'no-session'}/testuser_${moment().format('hhmmss')}`;
return `${moment().format('YYYYMM')}/${moment().format("MMDD")}/${SessionTime[sessionId]!=null? SessionTime[sessionId][0].replace(':',''):'no-session'}/${userId}`;
4 months ago
}
function getUploadFolder(){
4 months ago
return `${moment().format("YYYYMM")}/${moment().format("MMDD")}/${sessionId!=null? SessionTime[sessionId][0].replace(':',''):'no-session'}`;
4 months ago
}
function reset(){
setUserId(null);
setSessionId(null);
setPassword(null);
4 months ago
setChoice(null);
setSummary(null);
}
4 months ago
4 months ago
function saveHistory(history) {
console.log('Saving history:', history);
const data={
history,
}
4 months ago
updateUser('user/'+getDataId(), data)
4 months ago
.then(() => {
console.log("History saved successfully");
})
.catch((error) => {
console.error("Error saving history:", error);
});
}
useEffect(()=>{
console.log("User ID changed:", password, sessionId, userId);
if(!userId) return;
const data={
userId,
4 months ago
// sessionId,
4 months ago
password: password||'',
choice: choice||'',
summary: summary||'',
4 months ago
date: moment().format("YYYY-MM-DD hh:mm:ss"),
4 months ago
fileId: getFileId(),
};
console.log("Updating user data:", data);
4 months ago
updateUser('user/'+getDataId(), data)
4 months ago
.then(() => {
console.log("User data updated successfully");
})
.catch((error) => {
console.error("Error updating user data:", error);
});
4 months ago
},[password, choice, summary]);
4 months ago
4 months ago
useEffect(() => {
let symbol='';
4 months ago
for(const [key, value] of Object.entries(SessionTime)){
4 months ago
const start=moment(value[0], "HH:mm");
const end=moment(value[1], "HH:mm");
if(moment().isBetween(start, end)){
symbol=key;
break;
}
}
setSessionId(symbol);
}, [userId]);
4 months ago
useEffect(() => {
console.log("Session ID changed:", sessionId);
}, [sessionId]);
4 months ago
return (
4 months ago
<userContext.Provider value={{
4 months ago
userId, setUserId, getFileId, getUploadFolder,
4 months ago
reset, uploadHistory: saveHistory, setChoice,
4 months ago
setSummary, summary, getDataId,
4 months ago
setPassword}}>
4 months ago
{children}
4 months ago
</userContext.Provider>
);
}
export function useUser() {
const context = useContext(userContext);
if (!context) {
throw new Error("useUser must be used within a UserProvider");
}
return context;
}
export { userContext };