import React, {useState} from 'react' //import { makeRequest } from '../Clockify/clockify' import { firebase } from './Firebase/firebase'; import { getAuth, onAuthStateChanged } from "firebase/auth"; import { doc, updateDoc, getFirestore, collection, getDoc } from "firebase/firestore"; import loadingGifLightTheme from './img/loading-light-theme.png' import loadingGifDarkTheme from './img/loading-dark-theme.png' import detectKeys from './Misc/detectKeys'; const ClockifyTasksDisplay = (props) => { const auth = getAuth() const [userUID, setUserUID] = useState('') const [workspaces, setWorkspaces] = useState([]) const [workspacesReady, setWorkspacesReady] = useState(false) const [projects, setProjects] = useState([]) const [projectsDone, setProjectsDone] = useState(false) const [loading, setLoading] = useState(true) const [apiAvailable, setApiAvailable] = useState(false) const getApiKey = async () => { try { const db = await getFirestore(firebase) const reference = await doc(db, 'users', userUID) const dataSnap = await getDoc(reference) const result = await dataSnap.data() if (result.keyClockify) { setApiAvailable(true) await generateArrayOfWorkspaces(result.keyClockify) } } catch (error) { } } const makeRequestWorkspaces = async (apiClockify) => { try { const request = { method: "GET", headers: { 'X-Api-Key': apiClockify, "content-type": "application/json" } } const response = await fetch(`https://api.clockify.me/api/v1/workspaces/`, request) const data = await response.json() props.setApiKey(apiClockify) return await data } catch (error) { } } const generateArrayOfWorkspaces = async (key) => { const getApiKeyReturn = key const data = await makeRequestWorkspaces(key) if (data.code !== 1000) { let workspacesCopy = [] await data.forEach(workspace => { workspacesCopy.push(workspace) }); await setWorkspaces(workspacesCopy) setWorkspacesReady(true) setLoading(false) } } React.useEffect( () => { if (props.signIn) { onAuthStateChanged(auth, async (user) => { if (user) { setUserUID(await user.uid) if (userUID) { await getApiKey() } } else { return (<>) } }) } }, [props, onAuthStateChanged, setUserUID, userUID]) const makeRequestProjects = async (e) => { try { const request = { method: "GET", headers: { 'X-Api-Key': props.apiKey, "content-type": "application/json" } } const response = await fetch(`https://api.clockify.me/api/v1/workspaces/${e}/projects`, request) const data = await response.json() return await data } catch (error) { } } const defineProjects = async (e) => { if (e === 0) { setProjectsDone(false) setProjects([]) } else { setProjectsDone(true) } props.setWorspaceID(e) const data = await makeRequestProjects(e) await setProjects(data) if (projects) { setProjectsDone(true) } } const selectProject = (e) => { props.setProjectID(e) } if (loading && userUID) { if (!apiAvailable) { return (
) } else { return (
) } } return (
{ userUID ?
{props.setTaskName(e.target.value)}} value={props.taskName} placeholder="Add task description" className={props.projectID !== 0 ? null: 'disabled'} onKeyPress={event => { if (event.key === 'Enter') { props.setTimerOn(true) } }} />
: null }
) } export default ClockifyTasksDisplay