Files
supabase/apps/studio/components/interfaces/Explorer/utils.ts
Joshen Lim 9a3500aad2 Set up infinite loading for notebooks (#49321)
## Context

Sets up infinite loading for notebooks with the `InfiniteListDefault`
component

Also adds the notebook and chats count on the explorer home nav
<img width="275" height="137" alt="image"
src="https://github.com/user-attachments/assets/c3f16e8f-f520-4107-a188-43b1abcca043"
/>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
  * Explorer navigation now displays accurate notebook and chat counts.
* Notebook lists support infinite scrolling, loading indicators, and
improved active-state styling.
  * Notebook navigation remains available as additional items load.

* **Bug Fixes**
* Corrected default markdown cell formatting by removing unintended
leading spaces from headings and notes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>
2026-08-21 11:15:26 +08:00

59 lines
1.4 KiB
TypeScript

import { untrustedSql } from '@supabase/pg-meta'
import { DEFAULT_CELL_ROW_LIMIT } from './QueryCell/QueryCell.utils'
import { generateDraftId } from '@/data/content/notebooks/notebook-schema'
import { untrustedLogSql } from '@/data/logs/safe-analytics-sql'
import type { Notebooks } from '@/types'
export const createQueryCellSkeleton = ({ title, sql }: { title?: string; sql?: string } = {}) => {
return {
title,
_tag: 'database_cell' as const,
_id: generateDraftId(),
view: 'table' as const,
chart: undefined,
unchecked_sql: untrustedSql(sql ?? ''),
row_limit: DEFAULT_CELL_ROW_LIMIT,
}
}
const DEFAULT_LOG_TIME_RANGE: Notebooks.TimeRange = {
_tag: 'relative_time_range',
unit: 'hour',
amount: 1,
}
export const createLogCellSkeleton = ({
sql,
title,
time_range = DEFAULT_LOG_TIME_RANGE,
}: { sql?: string; title?: string; time_range?: Notebooks.TimeRange } = {}) => {
return {
title,
_tag: 'log_cell' as const,
_id: generateDraftId(),
view: 'table' as const,
chart: undefined,
unchecked_sql: untrustedLogSql(sql ?? ''),
time_range,
}
}
const DEFAULT_MARKDOWN_CONTENT = `
# New section
Add notes about your queries and results
`.trim()
export const createMarkdownCellSkeleton = ({
content = DEFAULT_MARKDOWN_CONTENT,
}: {
content?: string
} = {}) => {
return {
_tag: 'markdown_cell' as const,
_id: generateDraftId(),
text: content,
}
}