move to Donetick Org, First commit frontend

This commit is contained in:
Mo Tarbin 2024-06-30 18:55:39 -04:00
commit 2657469964
105 changed files with 21572 additions and 0 deletions

250
src/utils/Fetcher.jsx Normal file
View file

@ -0,0 +1,250 @@
import { API_URL } from '../Config'
import { Fetch, HEADERS } from './TokenManager'
const createChore = userID => {
return Fetch(`${API_URL}/chores/`, {
method: 'POST',
headers: HEADERS(),
body: JSON.stringify({
createdBy: Number(userID),
}),
}).then(response => response.json())
}
const signUp = (username, password, displayName, email) => {
return fetch(`${API_URL}/auth/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ username, password, displayName, email }),
})
}
const login = (username, password) => {
return fetch(`${API_URL}/auth/login`, {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
body: JSON.stringify({ username, password }),
})
}
const GetAllUsers = () => {
return fetch(`${API_URL}/users/`, {
method: 'GET',
headers: HEADERS(),
})
}
const GetChores = () => {
return Fetch(`${API_URL}/chores/`, {
method: 'GET',
headers: HEADERS(),
})
}
const GetChoreByID = id => {
return Fetch(`${API_URL}/chores/${id}`, {
method: 'GET',
headers: HEADERS(),
})
}
const CreateChore = chore => {
return Fetch(`${API_URL}/chores/`, {
method: 'POST',
headers: HEADERS(),
body: JSON.stringify(chore),
})
}
const DeleteChore = id => {
return Fetch(`${API_URL}/chores/${id}`, {
method: 'DELETE',
headers: HEADERS(),
})
}
const SaveChore = chore => {
console.log('chore', chore)
return Fetch(`${API_URL}/chores/`, {
method: 'PUT',
headers: HEADERS(),
body: JSON.stringify(chore),
})
}
const GetChoreHistory = choreId => {
return Fetch(`${API_URL}/chores/${choreId}/history`, {
method: 'GET',
headers: HEADERS(),
})
}
const GetAllCircleMembers = () => {
return Fetch(`${API_URL}/circles/members`, {
method: 'GET',
headers: HEADERS(),
})
}
const GetUserProfile = () => {
return Fetch(`${API_URL}/users/profile`, {
method: 'GET',
headers: HEADERS(),
})
}
const GetUserCircle = () => {
return Fetch(`${API_URL}/circles/`, {
method: 'GET',
headers: HEADERS(),
})
}
const JoinCircle = inviteCode => {
return Fetch(`${API_URL}/circles/join?invite_code=${inviteCode}`, {
method: 'POST',
headers: HEADERS(),
})
}
const GetCircleMemberRequests = () => {
return Fetch(`${API_URL}/circles/members/requests`, {
method: 'GET',
headers: HEADERS(),
})
}
const AcceptCircleMemberRequest = id => {
return Fetch(`${API_URL}/circles/members/requests/accept?requestId=${id}`, {
method: 'PUT',
headers: HEADERS(),
})
}
const LeaveCircle = id => {
return Fetch(`${API_URL}/circles/leave?circle_id=${id}`, {
method: 'DELETE',
headers: HEADERS(),
})
}
const DeleteCircleMember = (circleID, memberID) => {
return Fetch(
`${API_URL}/circles/${circleID}/members/delete?member_id=${memberID}`,
{
method: 'DELETE',
headers: HEADERS(),
},
)
}
const UpdateUserDetails = userDetails => {
return Fetch(`${API_URL}/users`, {
method: 'PUT',
headers: HEADERS(),
body: JSON.stringify(userDetails),
})
}
const GetSubscriptionSession = () => {
return Fetch(API_URL + `/payments/create-subscription`, {
method: 'GET',
headers: HEADERS(),
})
}
const CancelSubscription = () => {
return Fetch(API_URL + `/payments/cancel-subscription`, {
method: 'POST',
headers: HEADERS(),
})
}
const GetThings = () => {
return Fetch(`${API_URL}/things`, {
method: 'GET',
headers: HEADERS(),
})
}
const CreateThing = thing => {
return Fetch(`${API_URL}/things`, {
method: 'POST',
headers: HEADERS(),
body: JSON.stringify(thing),
})
}
const SaveThing = thing => {
return Fetch(`${API_URL}/things`, {
method: 'PUT',
headers: HEADERS(),
body: JSON.stringify(thing),
})
}
const UpdateThingState = thing => {
return Fetch(`${API_URL}/things/${thing.id}/state?value=${thing.state}`, {
method: 'PUT',
headers: HEADERS(),
})
}
const DeleteThing = id => {
return Fetch(`${API_URL}/things/${id}`, {
method: 'DELETE',
headers: HEADERS(),
})
}
const CreateLongLiveToken = name => {
return Fetch(`${API_URL}/users/tokens`, {
method: 'POST',
headers: HEADERS(),
body: JSON.stringify({ name }),
})
}
const DeleteLongLiveToken = id => {
return Fetch(`${API_URL}/users/tokens/${id}`, {
method: 'DELETE',
headers: HEADERS(),
})
}
const GetLongLiveTokens = () => {
return Fetch(`${API_URL}/users/tokens`, {
method: 'GET',
headers: HEADERS(),
})
}
export {
AcceptCircleMemberRequest,
CancelSubscription,
createChore,
CreateChore,
CreateLongLiveToken,
CreateThing,
DeleteChore,
DeleteCircleMember,
DeleteLongLiveToken,
DeleteThing,
GetAllCircleMembers,
GetAllUsers,
GetChoreByID,
GetChoreHistory,
GetChores,
GetCircleMemberRequests,
GetLongLiveTokens,
GetSubscriptionSession,
GetThings,
GetUserCircle,
GetUserProfile,
JoinCircle,
LeaveCircle,
login,
SaveChore,
SaveThing,
signUp,
UpdateThingState,
UpdateUserDetails,
}

7
src/utils/Helpers.jsx Normal file
View file

@ -0,0 +1,7 @@
import moment from 'moment'
const isPlusAccount = userProfile => {
return userProfile?.expiration && moment(userProfile?.expiration).isAfter()
}
export { isPlusAccount }

View file

@ -0,0 +1,65 @@
import Cookies from 'js-cookie'
import { API_URL } from '../Config'
export function Fetch(url, options) {
if (!isTokenValid()) {
console.log('FETCH: Token is not valid')
console.log(localStorage.getItem('ca_token'))
// store current location in cookie
Cookies.set('ca_redirect', window.location.pathname)
// Assuming you have a function isTokenValid() that checks token validity
window.location.href = '/login' // Redirect to login page
// return Promise.reject("Token is not valid");
}
if (!options) {
options = {}
}
options.headers = { ...options.headers, ...HEADERS() }
return fetch(url, options)
}
export const HEADERS = () => {
return {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + localStorage.getItem('ca_token'),
}
}
export const isTokenValid = () => {
const expiration = localStorage.getItem('ca_expiration')
const token = localStorage.getItem('ca_token')
if (localStorage.getItem('ca_token')) {
const now = new Date()
const expire = new Date(expiration)
if (now < expire) {
if (now.getTime() + 24 * 60 * 60 * 1000 > expire.getTime()) {
refreshAccessToken()
}
return true
} else {
localStorage.removeItem('ca_token')
localStorage.removeItem('ca_expiration')
}
return false
}
}
export const refreshAccessToken = () => {
fetch(API_URL + '/auth/refresh', {
method: 'GET',
headers: HEADERS(),
}).then(res => {
if (res.status === 200) {
res.json().then(data => {
localStorage.setItem('ca_token', data.token)
localStorage.setItem('ca_expiration', data.expire)
})
} else {
return res.json().then(error => {
console.log(error)
})
}
})
}