import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover' import Checkbox from '@/components/ui/Checkbox' import Button from '@/components/ui/Button' import Separator from '@/components/ui/Separator' import Input from '@/components/ui/Input' import { useState, useCallback, useEffect } from 'react' import { controlButtonVariant } from '@/lib/constants' import { useSettingsStore } from '@/stores/settings' import { useBackendState } from '@/stores/state' import { SettingsIcon } from 'lucide-react' /** * Component that displays a checkbox with a label. */ const LabeledCheckBox = ({ checked, onCheckedChange, label }: { checked: boolean onCheckedChange: () => void label: string }) => { return (
) } /** * Component that displays a popover with settings options. */ export default function Settings() { const [opened, setOpened] = useState(false) const [tempApiKey, setTempApiKey] = useState('') const showPropertyPanel = useSettingsStore.use.showPropertyPanel() const showNodeSearchBar = useSettingsStore.use.showNodeSearchBar() const showNodeLabel = useSettingsStore.use.showNodeLabel() const enableEdgeEvents = useSettingsStore.use.enableEdgeEvents() const enableNodeDrag = useSettingsStore.use.enableNodeDrag() const enableHideUnselectedEdges = useSettingsStore.use.enableHideUnselectedEdges() const showEdgeLabel = useSettingsStore.use.showEdgeLabel() const enableHealthCheck = useSettingsStore.use.enableHealthCheck() const apiKey = useSettingsStore.use.apiKey() useEffect(() => { setTempApiKey(apiKey || '') }, [apiKey, opened]) const setEnableNodeDrag = useCallback( () => useSettingsStore.setState((pre) => ({ enableNodeDrag: !pre.enableNodeDrag })), [] ) const setEnableEdgeEvents = useCallback( () => useSettingsStore.setState((pre) => ({ enableEdgeEvents: !pre.enableEdgeEvents })), [] ) const setEnableHideUnselectedEdges = useCallback( () => useSettingsStore.setState((pre) => ({ enableHideUnselectedEdges: !pre.enableHideUnselectedEdges })), [] ) const setShowEdgeLabel = useCallback( () => useSettingsStore.setState((pre) => ({ showEdgeLabel: !pre.showEdgeLabel })), [] ) // const setShowPropertyPanel = useCallback( () => useSettingsStore.setState((pre) => ({ showPropertyPanel: !pre.showPropertyPanel })), [] ) const setShowNodeSearchBar = useCallback( () => useSettingsStore.setState((pre) => ({ showNodeSearchBar: !pre.showNodeSearchBar })), [] ) const setShowNodeLabel = useCallback( () => useSettingsStore.setState((pre) => ({ showNodeLabel: !pre.showNodeLabel })), [] ) const setEnableHealthCheck = useCallback( () => useSettingsStore.setState((pre) => ({ enableHealthCheck: !pre.enableHealthCheck })), [] ) const setApiKey = useCallback(async () => { useSettingsStore.setState({ apiKey: tempApiKey || null }) await useBackendState.getState().check() setOpened(false) }, [tempApiKey]) const handleTempApiKeyChange = useCallback( (e: React.ChangeEvent) => { setTempApiKey(e.target.value) }, [setTempApiKey] ) return ( e.preventDefault()} >
e.preventDefault()}>
) }