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.
167 lines
4.6 KiB
167 lines
4.6 KiB
import { createContext, useState, useEffect, useContext, use, useRef } from "react";
|
|
import moment from "moment";
|
|
import { updateUser, writeToGoogleSheet } from "./backend";
|
|
import { useData } from "./useData";
|
|
|
|
const userContext=createContext();
|
|
|
|
const SessionTime={
|
|
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);
|
|
const [choice, setChoice] = useState(null);
|
|
const [summary, setSummary] = useState(null);
|
|
|
|
const refChoice=useRef();
|
|
const refPassword=useRef();
|
|
|
|
const {data}=useData();
|
|
|
|
function getSessionId(){
|
|
return `${SessionTime[sessionId]!=null? SessionTime[sessionId][0].replace(':',''):'no-session'}`;
|
|
}
|
|
function getFileId(){
|
|
if(!userId){
|
|
if(data?.id){
|
|
return `${refPassword.current||''}_PC${data.id.toString().padStart(2,'0')}`;
|
|
}
|
|
return `${refPassword.current||moment().format('hhmmss')}_testuser`;
|
|
}return `${refPassword.current||'0000'}_${userId}`;
|
|
}
|
|
function getDataId(){
|
|
if(!userId) return `${moment().format('YYYYMM')}/${moment().format("MMDD")}/${getSessionId()}/testuser_${moment().format('hhmmss')}`;
|
|
return `${moment().format('YYYYMM')}/${moment().format("MMDD")}/${getSessionId()}/${userId}`;
|
|
}
|
|
|
|
function getUploadFolder(){
|
|
return `${moment().format("YYYYMM")}/${moment().format("MMDD")}/${getSessionId()}`;
|
|
}
|
|
function setPassword(pass){
|
|
refPassword.current=pass;
|
|
console.log("Password changed:", pass);
|
|
}
|
|
function reset(){
|
|
setUserId(null);
|
|
setSessionId(null);
|
|
setPassword(null);
|
|
setChoice(null);
|
|
setSummary(null);
|
|
}
|
|
|
|
function saveHistory(history) {
|
|
console.log('Saving history:', history);
|
|
|
|
const data={
|
|
history,
|
|
}
|
|
updateUser('user/'+getDataId(), data)
|
|
.then(() => {
|
|
console.log("History saved successfully");
|
|
})
|
|
.catch((error) => {
|
|
console.error("Error saving history:", error);
|
|
});
|
|
}
|
|
|
|
function writeSheet(){
|
|
|
|
writeToGoogleSheet(
|
|
moment().format("YYYY/MM/DD"),
|
|
getSessionId(),
|
|
userId,
|
|
refPassword.current
|
|
).then(() => {
|
|
console.log("Data written to Google Sheet successfully");
|
|
})
|
|
.catch((error) => {
|
|
console.error("Error writing data to Google Sheet:", error);
|
|
});
|
|
}
|
|
|
|
|
|
useEffect(()=>{
|
|
console.log("User ID changed:", refPassword.current, sessionId, userId);
|
|
if(!userId) return;
|
|
|
|
const data={
|
|
userId,
|
|
// sessionId,
|
|
password: refPassword.current||'',
|
|
choice: choice||'',
|
|
summary: summary||'',
|
|
date: moment().format("YYYY-MM-DD hh:mm:ss"),
|
|
fileId: getFileId(),
|
|
};
|
|
|
|
console.log("Updating user data:", data);
|
|
|
|
updateUser('user/'+getDataId(), data)
|
|
.then(() => {
|
|
console.log("User data updated successfully");
|
|
})
|
|
.catch((error) => {
|
|
console.error("Error updating user data:", error);
|
|
});
|
|
|
|
},[choice, summary, refPassword.current]);
|
|
|
|
useEffect(() => {
|
|
|
|
let symbol='';
|
|
|
|
for(const [key, value] of Object.entries(SessionTime)){
|
|
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]);
|
|
useEffect(() => {
|
|
console.log("Session ID changed:", sessionId);
|
|
|
|
}, [sessionId]);
|
|
// useEffect(()=>{
|
|
// refChoice.current=choice;
|
|
// console.log("Choice changed:", choice);
|
|
// }, [choice]);
|
|
|
|
return (
|
|
<userContext.Provider value={{
|
|
userId, setUserId, getFileId, getUploadFolder,
|
|
reset, uploadHistory: saveHistory, setChoice,
|
|
choice,
|
|
setSummary, summary, getDataId,
|
|
setPassword,
|
|
writeSheet}}>
|
|
{children}
|
|
</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 }; |