import type { User, Node, Retailer, Maker, Product, Dispatch } from '../astroTypes'; import { useQuery, useMutation, useQueryClient, queryOptions } from "@tanstack/react-query"; import axios from "axios"; import { hasAuthCookie } from './authUtils'; const API_URL = "http://localhost:3001" const nonAuthHeaders = { "Content-Type": "application/json", } const getMakers = async () => { const url = `${API_URL}/api/makers` console.log("Fetching url:", url) const response = await axios.get(url); const makers: Maker[] = response.data.docs; console.log(`Fetch result from ${url}`, makers) return makers; } export const useGetMakers = () => { return useQuery({ queryFn: () => getMakers(), queryKey: ['makers'], enabled: true }) } const getRetailers = async () => { const url = `${API_URL}/api/retailers` console.log("Fetching url:", url) const response = await axios.get(url); const retailers: Retailer[] = response.data.docs; console.log(`Fetch result from ${url}`, retailers) return retailers; } export const useGetRetailers = () => { return useQuery({ queryFn: () => getRetailers(), queryKey: ['retailers'], enabled: true }) } const getUser = async (userId: string) => { const url = `${API_URL}/api/users/${userId}` console.log("Fetching url:", url) const response = await axios.get(url); const user: User = response.data.docs; console.log(`Fetch result from ${url}`, user) return user; } export const useGetUser = (userId: string) => { return useQuery({ queryFn: () => getUser(userId), queryKey: ['user'], enabled: true//If login cookie }) } const getMyself = async (authToken: string) => { const url = `${API_URL}/api/users/me` console.log("Fetching url:", url) const authHeaders = { "Content-Type": "application/json", "Authorization": `JWT ${authToken}`, } const response = await axios.get(`${API_URL}/api/users/me`, { withCredentials: true, headers: authHeaders }); const user: User = response.data console.log(`Fetch result from ${url}`, user) return user; } export const useGetMyself = (authToken: string) => { return useQuery({ queryFn: () => getMyself(authToken), queryKey: ['myself'], enabled: authToken !== '' }) } const getDispatches = async () => { const url = `${API_URL}/api/dispatches` console.log("Fetching url:", url) const response = await axios.get(url); const dispatches: Dispatch[] = response.data.docs; console.log(`Fetch result from ${url}`, dispatches) return dispatches; } export const useGetDispatches = () => { return useQuery({ queryFn: () => getDispatches(), queryKey: ['dispatches'], enabled: true }) }