← Files DataARCHIVED FILE

templates/data-app/base/src/DataAppContext.jsx

1.03 KB · Sep 30, 2026 · 23:19 UTC

↓ Download file

import { createContext, useContext, useLayoutEffect } from "react";

export const DataAppContext = createContext(null);
export const DataAppBlockLayoutContext = createContext(null);

export function useDataAppShell() {
  const shell = useContext(DataAppContext);
  if (!shell) {
    throw new Error("Data app content must render inside the protected DataAppShell.");
  }
  return shell;
}

export function useOptionalDataAppShell() {
  return useContext(DataAppContext);
}

export function useDashboardTabs(definitions = []) {
  const { activeTabId, registerDashboardTabs } = useDataAppShell();
  const serializedDefinitions = JSON.stringify(definitions);

  useLayoutEffect(() => {
    registerDashboardTabs?.(JSON.parse(serializedDefinitions));
  }, [registerDashboardTabs, serializedDefinitions]);

  return { activeTabId };
}

export function useDataAppBlockLayouts() {
  const layouts = useContext(DataAppBlockLayoutContext);
  if (!layouts) throw new Error("Sortable blocks must render inside the protected DataAppShell.");
  return layouts;
}

SHA-256: 309d971e9fd4494b2f704087c81ded8837ec955ae4a57898f54dd776c8fca30f