import { registerDevice, signOutAction } from "@/app/actions"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { LogOut } from "lucide-react"; import DoctorForm from "./DoctorForm"; import GeneralUserForm from "./UserForm"; import { Slider } from "@/components/ui/slider"; import { updateUser } from "@/db/users"; import _ from "lodash"; import { createClient } from "@/utils/supabase/client"; import React, { useCallback } from "react"; import { doesUserHaveADevice, updateDevice } from "@/db/devices"; import { useToast } from "@/components/ui/use-toast"; import { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider, } from "@/components/ui/tooltip"; interface AppSettingsProps { selectedUser: IUser; heading: React.ReactNode; } const AppSettings: React.FC = ({ selectedUser, heading, }) => { const supabase = createClient(); const { toast } = useToast(); const [isConnected, setIsConnected] = React.useState(false); const doctorFormRef = React.useRef<{ submitForm: () => void } | null>(null); const userFormRef = React.useRef<{ submitForm: () => void } | null>(null); const [deviceCode, setDeviceCode] = React.useState(""); const [error, setError] = React.useState(""); const handleSave = () => { if (selectedUser.user_info.user_type === "doctor") { doctorFormRef.current?.submitForm(); } else { userFormRef.current?.submitForm(); } }; const checkIfUserHasDevice = useCallback(async () => { setIsConnected( await doesUserHaveADevice(supabase, selectedUser.user_id) ); }, [selectedUser.user_id, supabase]); const [volume, setVolume] = React.useState([ selectedUser.device?.volume ?? 50, ]); const debouncedUpdateVolume = _.debounce(async () => { if (selectedUser.device?.device_id) { await updateDevice( supabase, { volume: volume[0] }, selectedUser.device.device_id ); } }, 1000); // Adjust the debounce delay as needed const updateVolume = (value: number[]) => { setVolume(value); debouncedUpdateVolume(); }; const onSave = async (values: any, userType: "doctor" | "user") => { console.log("onSave", values, userType); if (userType === "doctor") { await updateUser( supabase, { user_info: { user_type: userType, user_metadata: values, }, }, selectedUser!.user_id); } else { await updateUser( supabase, { supervisee_age: values.supervisee_age, supervisee_name: values.supervisee_name, supervisee_persona: values.supervisee_persona, user_info: { user_type: userType, user_metadata: values, }, }, selectedUser!.user_id); } toast({ description: "Your prefereces have been saved!", }); } return ( <> {selectedUser.user_info.user_type === "doctor" ? ( handleSave()} /> ) : ( handleSave()} /> )}

Device settings

?

For simplicity, you can register your ESP32 MAC address here.
Ideally you want this to be a friendly code for your device.

setDeviceCode(e.target.value)} placeholder={isConnected ? "**********" : "Enter your ESP32-S3 MAC address"} />

{isConnected ? Registered! : error ? {error}. : "Add your ESP32-S3 MAC address (e.g. 12:34:56:78:9A:BC) to your account to register it." }

{isConnected &&

{volume}%

}
); }; export default AppSettings;