LCOV - code coverage report
Current view: top level - dashql-app/src/shell_app - use_shell_query_result.ts Coverage Total Hit
Test: DashQL d805a4b Lines: 100.0 % 27 27
Test Date: 2026-11-09 20:22:13

            Line data    Source code
       1              : import * as React from 'react';
       2              : 
       3              : import type { QueryExecutionState } from '../query/query_execution_state.js';
       4              : import type { ShellQueryExecutionTracker } from '../shell/query_execution.js';
       5              : 
       6              : /// The result that the overlay of the shell shows. Closing the overlay keeps the result so that it can open again, the
       7              : /// computation of a result is released once another result replaces it.
       8            1 : export function useShellQueryResult(queryExecutions: ShellQueryExecutionTracker, releaseResult: (queryId: number) => void) {
       9            1 :     const [lastQuery, setLastQuery] = React.useState<QueryExecutionState | null>(null);
      10            1 :     const [open, setOpen] = React.useState(false);
      11            1 :     const lastQueryRef = React.useRef(lastQuery);
      12            1 :     lastQueryRef.current = lastQuery;
      13            1 :     const lastQueryId = lastQuery?.queryId ?? null;
      14            1 :     React.useEffect(() => {
      15            1 :         if (lastQueryId == null) return;
      16            1 :         return () => releaseResult(lastQueryId);
      17            1 :     }, [lastQueryId, releaseResult]);
      18            1 :     const showResultQuery = React.useCallback((queryId: number) => {
      19            1 :         const query = queryExecutions.getSnapshot().find(candidate => candidate.queryId === queryId) ?? null;
      20            1 :         setLastQuery(query);
      21            1 :         setOpen(query != null);
      22            1 :     }, [queryExecutions]);
      23            1 :     const closeResultQuery = React.useCallback(() => setOpen(false), []);
      24            1 :     const reopenResultQuery = React.useCallback(() => {
      25            1 :         if (lastQueryRef.current == null) return false;
      26            1 :         setOpen(true);
      27            1 :         return true;
      28            1 :     }, []);
      29              :     /// A result that failed to render doesn't open again
      30            1 :     const dropResultQuery = React.useCallback(() => {
      31            1 :         setLastQuery(null);
      32            1 :         setOpen(false);
      33            1 :     }, []);
      34              : 
      35            1 :     return { resultQuery: open ? lastQuery : null, showResultQuery, closeResultQuery, reopenResultQuery, dropResultQuery };
      36            1 : }
        

Generated by: LCOV version 2.0-1