From da1f27da9168fb8014881d3cd13c7f21761189e2 Mon Sep 17 00:00:00 2001 From: Francisco Pessano Date: Sun, 26 Sep 2021 22:43:15 -0300 Subject: [PATCH] Upload to the API introduced to user document in Firestore done --- src/components/Account Childrens/Message.jsx | 34 ++++++++ src/components/Account.jsx | 87 ++++++++++++++++++-- 2 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 src/components/Account Childrens/Message.jsx diff --git a/src/components/Account Childrens/Message.jsx b/src/components/Account Childrens/Message.jsx new file mode 100644 index 0000000..da6bee1 --- /dev/null +++ b/src/components/Account Childrens/Message.jsx @@ -0,0 +1,34 @@ +import React from 'react' + +const Message = (props) => { + + const [message, setMessage] = React.useState('') + + React.useEffect( () => { + switch (props.message) { + case 'API NOT VALID': + setMessage('The API is not valid') + break; + + case 'API NOT UPLOADED': + setMessage(`There's been an error while we upload your API Key. Please try again`) + break; + + case 'API UPLOADED': + setMessage(`API uploaded successfully`) + break; + default: + setMessage('') + break; + } + + }, []) + + return ( +
+

{message}

+
+ ) +} + +export default Message diff --git a/src/components/Account.jsx b/src/components/Account.jsx index eaa8416..1b6c598 100644 --- a/src/components/Account.jsx +++ b/src/components/Account.jsx @@ -1,37 +1,58 @@ import React, {useState} from 'react' import {firebase} from './Firebase/firebase' import {getAuth, onAuthStateChanged} from 'firebase/auth' +import { doc, updateDoc, getFirestore } from "firebase/firestore"; +import Message from './Account Childrens/Message'; const Account = () => { const [signIn, setSignIn] = useState('false') const [apiKey, setApiKey] = useState('') + const [fristThreeApiKey, setFristThreeApiKey] = useState('') + + const [actualState, setActualState] = useState('') const auth = getAuth() + let userUID + onAuthStateChanged(auth, (user) => { if (user) { setSignIn(true) + userUID = user.uid } else { setSignIn(false) } + }) - const uploadApiKey = async (e) => { + const submitApiKey = async (e) => { e.preventDefault() + e.target.reset() const data = await makeRequest() console.log(data) if (await validateRequest(data)) { + + setActualState('API VALID') + if (await uploadApiKey()) { + + setActualState('API UPLOADED') + setFristThreeApiKey(apiKey[0] + apiKey[1] + apiKey[2]) + } else { + + setActualState('API NOT UPLOADED') + } } else { - + setActualState('API NOT VALID') } + setApiKey('') } const makeRequest = async () => { @@ -39,7 +60,7 @@ const Account = () => { const request = { method: "GET", headers: { - 'X-Api-Key': apiKey, + 'X-Api-Key': apiKey.trim(), "content-type": "application/json" } } @@ -55,23 +76,49 @@ const Account = () => { const validateRequest = async (data) => { if (data.code !== 1000) { - console.log('TODO BIEN') + return true } else { - console.log('TODO MAL') + + return false + } + } + + const uploadApiKey = async () => { + + try { + const db = await getFirestore(firebase) + const referenceDocument = await doc(db, 'users', userUID) + + await updateDoc(referenceDocument, { + keyClockify: apiKey + }) + + return await true + } + + catch (error) { + console.log(error) return false } } return (
+ { + actualState === 'API NOT VALID' || actualState === 'API NOT UPLOADED' || actualState === 'API UPLOADED' ? : null + } { signIn ?

One more step...

Insert your Clockify API here

{ type="submit" />
+ { + actualState === 'API UPLOADED' ? + +
+ + + + + +
+ : null + }
:

Sign in before access to this page...

}