Files
supabase/apps/studio/components
David WhittingtonandClaude Opus 5.5 3bf710eae9 feat(studio): pause unified logs live mode when nobody is watching
Live mode polled every 10 seconds for as long as the page stayed open,
including in hidden tabs and tabs left unattended for hours. Move the
polling loop into a useLivePolling hook that:

- stops polling while the tab is hidden and polls immediately when it is
  visible again
- pauses live mode after 15 minutes of visible time with no pointer, key,
  wheel, or scroll activity, with a notice to resume it
- backs off from 10s to 20s, 40s, then 60s while polls find no new rows,
  resetting on new rows, activity, or the tab becoming visible

Track clicks on the notice's "Resume live mode" button
(unified_logs_live_mode_resume_button_clicked).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 12:02:58 -05:00
..

Writing components

Where to create your components

  • For components that declare the general structure and layout of a page:
    • /components/layouts/xxx
  • For components that are tightly coupled to a specific interface:
    • /components/interfaces/xxx
  • For components that are meant to be reusable across multiple pages:
    • /components/ui/xxx
  • Note: We're gradually moving files out of the to-be-cleaned folder into the respective folders as we refactor

Component structure

  • If a component has constants and utility methods that are tightly coupled to itself, keep them close to the component and enclose them in a folder with an index.tsx as an entry point
  • Otherwise it can just be a file on its own
  • For example:
    • components/ui
      - SampleComponentA
        - SampleComponentA.tsx
        - SampleComponentA.constants.ts
        - SampleComponentA.utils.ts
        - SampleComponentA.types.ts
        - index.ts
      - SampleComponentB.tsx
      

Template for building components


// Declare the prop types of your component
interface ComponentAProps {
  sampleProp: string
}

// Name your component accordingly — use a named export, not a default export
export const ComponentA = ({ sampleProp }: ComponentAProps) => {
  return <div>ComponentA: {sampleProp}</div>
}