/* Copyright 2026 Marimo. All rights reserved. */ import { useAtom, useAtomValue } from "jotai"; import { DatabaseIcon, VariableIcon } from "lucide-react"; import React, { useCallback } from "react"; import { DataSources } from "@/components/datasources/datasources"; import { Accordion } from "@/components/ui/accordion"; import { VariableTable } from "@/components/variables/variables-table"; import { useCellIds } from "@/core/cells/cells"; import { connectionsAtom } from "@/core/datasets/data-source-connections"; import { datasetTablesAtom } from "@/core/datasets/state"; import { useVariables } from "@/core/variables/state"; import { useDetectedDataSources } from "@/hooks/useDataSourceDiscovery"; import { DiscoveredSourcesBadge, PanelAccordionContent, PanelAccordionItem, PanelAccordionTrigger, PanelBadge, } from "./components"; import { sessionPanelAtom, type SessionPanelSection, } from "./panel-accordion-state"; const SessionPanel: React.FC = () => { const variables = useVariables(); const cellIds = useCellIds(); const tables = useAtomValue(datasetTablesAtom); const dataConnections = useAtomValue(connectionsAtom); const pendingDataSources = useDetectedDataSources("database"); const [state, setState] = useAtom(sessionPanelAtom); const datasourcesCount = tables.length + dataConnections.length; // If the user hasn't interacted with the accordion and there are connections, show datasources open const openSections = !state.hasUserInteracted && datasourcesCount > 0 ? [...new Set([...state.openSections, "datasources"])] : state.openSections; const handleValueChange = useCallback( (value: SessionPanelSection[]) => { setState({ openSections: value, hasUserInteracted: true, }); }, [setState], ); const isDatasourcesOpen = openSections.includes("datasources"); const showDatasourcesBadge = !isDatasourcesOpen && datasourcesCount > 0; const showDiscoveredDataSourcesBadge = pendingDataSources.length > 0; return ( Data sources {showDatasourcesBadge && {datasourcesCount}} {showDiscoveredDataSourcesBadge && ( )} Variables {Object.keys(variables).length === 0 ? (
No variables defined
) : ( )}
); }; export default SessionPanel;