@adminide-stack/yantra-mobile 12.0.142 → 12.0.145-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/attachments/displayUserMessageText.js +2 -2
- package/lib/features/attachments/displayUserMessageText.js.map +1 -1
- package/lib/features/devices/readings.js.map +1 -1
- package/lib/features/devices/session.js +2 -22
- package/lib/features/devices/session.js.map +1 -1
- package/lib/features/notion/NotionAgentPanel.js +987 -0
- package/lib/features/notion/NotionAgentPanel.js.map +1 -0
- package/lib/features/notion/NotionAskAiSheet.js +362 -0
- package/lib/features/notion/NotionAskAiSheet.js.map +1 -0
- package/lib/features/notion/NotionBlockView.js +4 -3
- package/lib/features/notion/NotionBlockView.js.map +1 -1
- package/lib/features/notion/NotionConnectionsSheet.js +47 -13
- package/lib/features/notion/NotionConnectionsSheet.js.map +1 -1
- package/lib/features/notion/NotionPageView.js +68 -8
- package/lib/features/notion/NotionPageView.js.map +1 -1
- package/lib/features/notion/NotionSidebarSections.js +1 -1
- package/lib/features/notion/NotionSidebarSections.js.map +1 -1
- package/lib/features/notion/NotionWorkspaceView.js +14 -9
- package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
- package/lib/features/notion/database/DatabaseCells.js +3 -1
- package/lib/features/notion/database/DatabaseCells.js.map +1 -1
- package/lib/features/notion/database/DatabaseDateLayouts.js +1 -1
- package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -1
- package/lib/features/notion/database/NotionDatabaseView.js +1 -1
- package/lib/features/notion/database/NotionDatabaseView.js.map +1 -1
- package/lib/features/notion/notionAgentRunStatus.js +2 -2
- package/lib/features/notion/notionAgentRunStatus.js.map +1 -1
- package/lib/features/notion/notionAgentRuns.js +57 -0
- package/lib/features/notion/notionAgentRuns.js.map +1 -0
- package/lib/features/notion/notionAiContext.js +91 -0
- package/lib/features/notion/notionAiContext.js.map +1 -0
- package/lib/features/notion/notionConnections.js +42 -4
- package/lib/features/notion/notionConnections.js.map +1 -1
- package/lib/features/notion/notionDocuments.js +61 -1
- package/lib/features/notion/notionDocuments.js.map +1 -1
- package/lib/features/notion/notionNotesAgent.js +173 -3
- package/lib/features/notion/notionNotesAgent.js.map +1 -1
- package/lib/features/notion/notionPageKinds.js +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +229 -97
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +33 -7
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/buildJob.js +2 -2
- package/lib/features/webbuilder/buildJob.js.map +1 -1
- package/lib/features/webbuilder/codeFiles.js +18 -1
- package/lib/features/webbuilder/codeFiles.js.map +1 -1
- package/lib/features/webbuilder/components/BottomTabs.js.map +1 -1
- package/lib/features/webbuilder/components/CodeView.js +134 -56
- package/lib/features/webbuilder/components/CodeView.js.map +1 -1
- package/lib/features/webbuilder/components/Composer.js +2 -2
- package/lib/features/webbuilder/components/Composer.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewFrame.js +19 -3
- package/lib/features/webbuilder/components/PreviewFrame.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewScreen.js +310 -46
- package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectChat.js +141 -12
- package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectSheets.js +792 -0
- package/lib/features/webbuilder/components/ProjectSheets.js.map +1 -0
- package/lib/features/webbuilder/components/ProjectsScreen.js +14 -2
- package/lib/features/webbuilder/components/ProjectsScreen.js.map +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js +914 -58
- package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
- package/lib/features/webbuilder/components/TemplateCard.js +9 -6
- package/lib/features/webbuilder/components/TemplateCard.js.map +1 -1
- package/lib/features/webbuilder/components/TemplatesSheet.js +5 -17
- package/lib/features/webbuilder/components/TemplatesSheet.js.map +1 -1
- package/lib/features/webbuilder/connectorTemplates.js +171 -0
- package/lib/features/webbuilder/connectorTemplates.js.map +1 -0
- package/lib/features/webbuilder/fileTree.js +163 -0
- package/lib/features/webbuilder/fileTree.js.map +1 -0
- package/lib/features/webbuilder/followUps.js +67 -0
- package/lib/features/webbuilder/followUps.js.map +1 -0
- package/lib/features/webbuilder/previewProbe.js +49 -0
- package/lib/features/webbuilder/previewProbe.js.map +1 -0
- package/lib/features/webbuilder/previewRoutes.js +156 -0
- package/lib/features/webbuilder/previewRoutes.js.map +1 -0
- package/lib/features/webbuilder/projectTools.js +341 -0
- package/lib/features/webbuilder/projectTools.js.map +1 -0
- package/lib/features/webbuilder/publishTools.js +475 -0
- package/lib/features/webbuilder/publishTools.js.map +1 -0
- package/lib/features/webbuilder/sleepNotice.js +13 -0
- package/lib/features/webbuilder/sleepNotice.js.map +1 -0
- package/lib/features/webbuilder/stepLabels.js +37 -7
- package/lib/features/webbuilder/stepLabels.js.map +1 -1
- package/lib/features/webbuilder/studioCatalog.js +5 -1
- package/lib/features/webbuilder/studioCatalog.js.map +1 -1
- package/lib/features/webbuilder/templateCatalog.js +140 -0
- package/lib/features/webbuilder/templateCatalog.js.map +1 -0
- package/lib/features/webbuilder/webbuilderPrompts.js +31 -5
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/features/webbuilder/workflow.js +8 -4
- package/lib/features/webbuilder/workflow.js.map +1 -1
- package/lib/screens/Devices/index.js +3 -205
- package/lib/screens/Devices/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +9 -6
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -1
- package/lib/screens/WebBuilderNative/index.js +1 -1
- package/lib/screens/WebBuilderNative/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/keepAlive.js +53 -3
- package/lib/screens/WebBuilderNative/keepAlive.js.map +1 -1
- package/lib/screens/WebBuilderNative/unreachableRetry.js +23 -0
- package/lib/screens/WebBuilderNative/unreachableRetry.js.map +1 -0
- package/lib/screens/WebBuilderNative/useConnectorTemplates.js +37 -0
- package/lib/screens/WebBuilderNative/useConnectorTemplates.js.map +1 -0
- package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js +6 -0
- package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +302 -40
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderJobs.js +2 -2
- package/lib/screens/WebBuilderNative/useWebBuilderJobs.js.map +1 -1
- package/lib/screens/WebBuilderNative/versionUndo.js +1 -1
- package/lib/screens/WebBuilderNative/versionUndo.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +147 -77
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- package/package.json +4 -4
- package/lib/features/devices/bodyComposition.js +0 -116
- package/lib/features/devices/bodyComposition.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotionDatabaseView.js","sources":["../../../../src/features/notion/database/NotionDatabaseView.tsx"],"sourcesContent":["/**\n * Native database page - the web containers/DatabasePage on a phone: the database title, its\n * views as tabs (+ New view; long-press a tab to rename, duplicate or delete it), the toolbar\n * (search, filter, sort, properties, view options, select, New) and the active view's layout.\n *\n * Rows open as pages (`database_row` blocks open in the page editor). Cell edits, schema edits and\n * deletes are optimistic (useNotionDatabase); deletes offer Undo. Property renames / type changes\n * page in every row first and migrate each row's value, and every view that names the property is\n * updated too - like the web.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Pressable, ScrollView, Share, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useMutation } from '@apollo/client';\nimport { StackActions, useNavigation } from '@react-navigation/native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { NATIVE_NOTION_DUPLICATE_BLOCK } from '../notionDocuments';\nimport { NotionToast, TextPromptDialog, useNotionToast } from '../NotionPageMenu';\nimport { notionPalette } from '../notionTheme';\nimport { EmptyState, ui } from '../notionUi';\nimport { recordRecent } from '../notionRecents';\nimport { CellEditorSheet, rowTitle } from './DatabaseCells';\nimport { BoardLayout, GalleryLayout, ListLayout, TableLayout, type LayoutProps } from './DatabaseLayouts';\nimport { CalendarLayout, ChartLayout, TimelineLayout } from './DatabaseDateLayouts';\nimport {\n ChoiceSheet,\n FilterSheet,\n NewViewSheet,\n PropertiesSheet,\n PropertyEditorSheet,\n SortSheet,\n ViewOptionsSheet,\n} from './DatabaseSheets';\nimport { applyRowFilter, activeConditions, dropConditionProperty, renameConditionProperty } from './databaseFilter';\nimport { databaseCsv, planDatabaseCsvImport } from './databaseCsvActions';\nimport { makeCellGetter } from './databaseFormula';\nimport { rollupResolver } from './databaseRollup';\nimport { RelationProvider, useRelationSource } from './relationSource';\nimport { prefillForGroup } from './databaseGroup';\nimport {\n addSchemaProperty,\n changeSchemaPropertyType,\n convertCellValue,\n dropSortProperty,\n groupRows,\n normalizeStatusOptions,\n removeSchemaProperty,\n renameRowPatch,\n renameSchemaProperty,\n renameSortProperty,\n selectValueToCell,\n sortRows,\n uniquePropertyName,\n type SortSpec,\n} from './databaseView';\nimport {\n DEFAULT_VIEW_ID,\n mergeViewSettings,\n parseHiddenProperties,\n parseViewWidths,\n parseVisibleProperties,\n remapSettingsProperty,\n renameViewProperty,\n serializeVisibleProperties,\n shownProperties,\n tableDisplayColumns,\n uniqueViewName,\n type ViewSettings,\n type ViewType,\n} from './databaseViews';\nimport { useNotionDatabase, type DatabaseColumn, type DatabaseRow, type DatabaseViewModel } from './useNotionDatabase';\n\ntype PickDocument = (opts: {\n type?: string | string[];\n copyToCacheDirectory?: boolean;\n}) => Promise<{ canceled?: boolean; assets?: Array<{ uri: string; name?: string }> | null }>;\n\nlet pickDocument: PickDocument | null = null;\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require\n pickDocument = require('expo-document-picker').getDocumentAsync ?? null;\n} catch {\n pickDocument = null;\n}\n\ntype Sheet =\n | 'filter'\n | 'sort'\n | 'properties'\n | 'options'\n | 'newView'\n | 'viewMenu'\n | 'rowMenu'\n | 'moveTo'\n | 'renameView'\n | 'renameDb'\n | 'dbMenu'\n | 'pasteCsv'\n | null;\n\nconst VIEW_ICONS: Record<ViewType, React.ComponentProps<typeof Ionicons>['name']> = {\n table: 'grid-outline',\n board: 'albums-outline',\n calendar: 'calendar-outline',\n timeline: 'git-commit-outline',\n gallery: 'images-outline',\n list: 'list-outline',\n chart: 'bar-chart-outline',\n};\n\nexport function NotionDatabaseView({\n orgName,\n blockId,\n isDark,\n}: {\n orgName: string | null;\n blockId: string;\n isDark: boolean;\n}) {\n const palette = notionPalette(isDark);\n const navigation = useNavigation<any>();\n const insets = useSafeAreaInsets();\n const db = useNotionDatabase(blockId);\n const { toast, show: showToast, hide: hideToast } = useNotionToast();\n const [duplicateBlock] = useMutation(NATIVE_NOTION_DUPLICATE_BLOCK);\n\n const [sheet, setSheet] = useState<Sheet>(null);\n const [search, setSearch] = useState('');\n const [searching, setSearching] = useState(false);\n const [selecting, setSelecting] = useState(false);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [menuRow, setMenuRow] = useState<DatabaseRow | null>(null);\n const [menuView, setMenuView] = useState<DatabaseViewModel | null>(null);\n const [editing, setEditing] = useState<{ rowId: string; column: string } | null>(null);\n const [editProperty, setEditProperty] = useState<{ name: string | null } | null>(null);\n const [refreshing, setRefreshing] = useState(false);\n\n const view = db.activeView;\n const columns = db.columns;\n const relations = useRelationSource(columns, blockId, db.rows, db.schema);\n const getValue = useMemo(\n () => makeCellGetter(columns, new Date(), rollupResolver(columns, relations)),\n [columns, relations],\n );\n\n const workspaceId = db.block?.workspaceId ?? null;\n useEffect(() => {\n if (workspaceId) recordRecent(workspaceId, { id: blockId, title: db.title, icon: db.icon });\n }, [blockId, db.icon, db.title, workspaceId]);\n\n // ---- Rows on screen: filter, search, sort ----\n const shownRows = useMemo(() => {\n const filtered = applyRowFilter(db.rows, columns, { search }, view.conditions, { getValue });\n return sortRows(filtered, view.sorts, columns, getValue);\n }, [columns, db.rows, getValue, search, view.conditions, view.sorts]);\n\n // ---- Properties shown by the view ----\n const visible = useMemo(() => parseVisibleProperties(view.properties, columns), [columns, view.properties]);\n const hidden = useMemo(() => parseHiddenProperties(view.properties), [view.properties]);\n const widths = useMemo(() => parseViewWidths(view.properties), [view.properties]);\n const tableColumns = useMemo(\n () => tableDisplayColumns(columns, visible, widths, hidden),\n [columns, hidden, visible, widths],\n );\n const visibleNames = useMemo(\n () => tableColumns.filter((c) => c.type !== 'title').map((c) => c.name),\n [tableColumns],\n );\n const cardProps = useMemo(\n () => shownProperties(columns, visible, { exclude: view.groupBy ? [view.groupBy] : [] }),\n [columns, view.groupBy, visible],\n );\n const nonTitleNames = useMemo(() => columns.filter((c) => c.type !== 'title').map((c) => c.name), [columns]);\n\n /** Open `next` once the current sheet has closed (iOS can't present a modal while one is dismissing). */\n const thenOpen = useCallback((next: Sheet) => {\n setSheet(null);\n setTimeout(() => setSheet(next), 450);\n }, []);\n\n const report = useCallback((err: string | null) => err && showToast({ message: err }), [showToast]);\n\n const changeView = useCallback(\n (change: Parameters<typeof db.changeView>[1]) => db.changeView(view.id, change).then(report),\n [db, report, view.id],\n );\n const changeSettings = (patch: Partial<ViewSettings>) =>\n changeView({ settings: mergeViewSettings(view.settings, patch) });\n const setVisibleNames = (names: string[]) =>\n changeView({ properties: serializeVisibleProperties(names, widths, nonTitleNames) });\n\n // ---- Navigation ----\n const openRow = useCallback(\n (row: DatabaseRow) =>\n navigation.dispatch(StackActions.push('MainStack.NotionPage', { orgName, blockId: row.id })),\n [navigation, orgName],\n );\n\n // ---- Rows ----\n const addRow = useCallback(\n async (group?: { column: DatabaseColumn; value: string | null }, values?: Record<string, unknown>) => {\n const initial: Record<string, unknown> = { ...values };\n if (group) {\n const v = prefillForGroup(group.column, group.value);\n if (v !== undefined) initial[group.column.name] = v;\n }\n const res = await db.addRow(initial);\n if (res.error) showToast({ message: `Couldn't add a row. ${res.error}` });\n else if (res.id) {\n const created = { id: res.id, properties: initial } as DatabaseRow;\n const title = columns.find((c) => c.type === 'title');\n if (title) setEditing({ rowId: created.id, column: title.name });\n }\n },\n [columns, db, showToast],\n );\n\n const deleteRows = useCallback(\n async (ids: string[]) => {\n if (!ids.length) return;\n const { deleted, error } = await db.deleteRows(ids);\n setSelected(new Set());\n setSelecting(false);\n if (error) showToast({ message: `Couldn't delete ${ids.length - deleted.length} row(s). ${error}` });\n else\n showToast({\n message: deleted.length === 1 ? 'Row deleted' : `${deleted.length} rows deleted`,\n actionLabel: 'Undo',\n onAction: () => db.restoreRows(deleted),\n });\n },\n [db, showToast],\n );\n\n const duplicateRow = useCallback(\n async (row: DatabaseRow) => {\n try {\n await duplicateBlock({ variables: { blockId: row.id, includeChildren: true }, errorPolicy: 'none' });\n await db.reloadRows();\n showToast({ message: 'Row duplicated' });\n } catch (err) {\n showToast({ message: `Couldn't duplicate. ${(err as Error)?.message ?? ''}` });\n }\n },\n [db, duplicateBlock, showToast],\n );\n\n const toggleCheckbox = useCallback(\n (row: DatabaseRow, column: DatabaseColumn) =>\n db.updateCell(row.id, column.name, !(row.properties?.[column.name] === true)).then(report),\n [db, report],\n );\n\n // ---- Schema edits (web DatabasePage rename / type change / delete) ----\n const forEachView = useCallback(\n async (fn: (v: DatabaseViewModel) => Parameters<typeof db.changeView>[1] | null) => {\n for (const v of db.views) {\n const change = fn(v);\n if (change) await db.changeView(v.id, change);\n }\n },\n [db],\n );\n\n const renameProperty = useCallback(\n async (from: string, to: string): Promise<string | null> => {\n const result = renameSchemaProperty(db.schema, from, to);\n if (!result.ok) return result.error;\n const all = await db.loadAll();\n const err = await db.saveSchema(result.schema);\n if (err) return err;\n await Promise.allSettled(\n all.map((r) => {\n const patch = renameRowPatch(r.properties, from, to);\n return patch ? db.patchRow(r.id, patch) : null;\n }),\n );\n await forEachView((v) => {\n const layout = renameViewProperty(v, from, to) ?? {};\n const sorts = renameSortProperty(v.sorts, from, to);\n const conditions = renameConditionProperty(v.conditions, from, to);\n const change = {\n ...(layout as object),\n ...(JSON.stringify(sorts) !== JSON.stringify(v.sorts) ? { sorts } : {}),\n ...(JSON.stringify(conditions) !== JSON.stringify(v.conditions) ? { conditions } : {}),\n };\n return Object.keys(change).length ? change : null;\n });\n setEditProperty({ name: to });\n return null;\n },\n [db, forEachView],\n );\n\n const changePropertyType = useCallback(\n async (name: string, type: string): Promise<string | null> => {\n const before = db.schema[name];\n const result = changeSchemaPropertyType(db.schema, name, type);\n if (!result.ok) return result.error;\n const all = await db.loadAll();\n const err = await db.saveSchema(result.schema);\n if (err) return err;\n const fromType = String(before?.type ?? 'text');\n await Promise.allSettled(\n all.map((r) => {\n const value = r.properties?.[name];\n if (value === undefined) return null;\n const next = convertCellValue(value, fromType, type);\n return JSON.stringify(next) === JSON.stringify(value) ? null : db.patchRow(r.id, { [name]: next });\n }),\n );\n return null;\n },\n [db],\n );\n\n const deleteProperty = useCallback(\n async (name: string) => {\n const result = removeSchemaProperty(db.schema, name);\n if (!result.ok) {\n showToast({ message: result.error });\n return;\n }\n const err = await db.saveSchema(result.schema);\n if (err) {\n showToast({ message: err });\n return;\n }\n setEditProperty(null);\n await forEachView((v) => {\n const sorts = dropSortProperty(v.sorts, name);\n const conditions = dropConditionProperty(v.conditions, name);\n const settings = remapSettingsProperty(v.settings, name, null);\n const change: Parameters<typeof db.changeView>[1] = {};\n if (sorts.length !== v.sorts.length) change.sorts = sorts;\n if (conditions.length !== v.conditions.length) change.conditions = conditions;\n if (settings) change.settings = settings;\n if (v.groupBy === name) change.groupBy = null;\n return Object.keys(change).length ? change : null;\n });\n showToast({ message: `Deleted “${name}”` });\n },\n [db, forEachView, showToast],\n );\n\n const createProperty = useCallback(\n async (name: string, type: string): Promise<string | null> => {\n const finalName = name || uniquePropertyName(db.schema);\n const result = addSchemaProperty(db.schema, finalName, type);\n if (!result.ok) return result.error;\n const err = await db.saveSchema(result.schema);\n if (err) return err;\n if (visible) setVisibleNames([...visibleNames, finalName]);\n return null;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [db, visible, visibleNames],\n );\n\n // ---- CSV (web \"Export → CSV\" / \"Merge with CSV\") ----\n const exportCsv = useCallback(async () => {\n const all = db.hasMore ? await db.loadAll() : db.rows;\n const rows = sortRows(\n applyRowFilter(all, columns, { search }, view.conditions, { getValue }),\n view.sorts,\n columns,\n getValue,\n );\n const csv = databaseCsv(rows, tableColumns, getValue);\n try {\n await Share.share({ title: `${db.title || 'Database'}.csv`, message: csv });\n } catch {\n /* dismissed */\n }\n }, [columns, db, getValue, search, tableColumns, view.conditions, view.sorts]);\n\n const importCsv = useCallback(\n async (text: string) => {\n const plan = planDatabaseCsvImport(text, db.schema);\n if (!plan.ok) {\n showToast({ message: plan.error });\n return;\n }\n if (plan.schemaChanged) {\n const err = await db.saveSchema(plan.schema);\n if (err) {\n showToast({ message: `Couldn't add the CSV columns. ${err}` });\n return;\n }\n }\n showToast({ message: `Importing ${plan.rows.length} rows…` });\n let created = 0;\n for (const properties of plan.rows) {\n const res = await db.addRow(properties);\n if (res.id) created += 1;\n }\n showToast({\n message:\n created === plan.rows.length\n ? `Imported ${created} ${created === 1 ? 'row' : 'rows'}`\n : `Imported ${created} of ${plan.rows.length} rows`,\n });\n },\n [db, showToast],\n );\n\n const importCsvFile = useCallback(async () => {\n if (!pickDocument) {\n setSheet('pasteCsv');\n return;\n }\n try {\n const picked = await pickDocument({\n type: ['text/csv', 'text/comma-separated-values', 'text/plain', 'public.comma-separated-values-text'],\n copyToCacheDirectory: true,\n });\n const asset = picked.canceled ? null : picked.assets?.[0];\n if (!asset) return;\n const text = await (await fetch(asset.uri)).text();\n await importCsv(text);\n } catch (err) {\n showToast({ message: `Couldn't read that file. ${(err as Error)?.message ?? ''}`.trim() });\n }\n }, [importCsv, showToast]);\n\n // ---- Board \"Move to\" ----\n const groupColumn = view.groupBy ? columns.find((c) => c.name === view.groupBy) : undefined;\n const moveTargets = useMemo(() => {\n if (!groupColumn || (groupColumn.type !== 'select' && groupColumn.type !== 'status')) return [];\n const options =\n groupColumn.type === 'status' ? normalizeStatusOptions(groupColumn.options) : (groupColumn.options ?? []);\n return groupRows([], groupColumn.name, options);\n }, [groupColumn]);\n\n const refresh = useCallback(async () => {\n setRefreshing(true);\n await db.refresh();\n setRefreshing(false);\n }, [db]);\n\n const editingRow = editing ? (db.rows.find((r) => r.id === editing.rowId) ?? null) : null;\n const editingColumn = editing ? (columns.find((c) => c.name === editing.column) ?? null) : null;\n const propertyColumn = editProperty?.name ? (columns.find((c) => c.name === editProperty.name) ?? null) : null;\n const activeFilterCount = activeConditions(view.conditions, columns).length;\n\n if (db.loading && !db.rows.length && !db.block) {\n return (\n <View style={[styles.center, { backgroundColor: palette.bg }]}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n );\n }\n if (db.error && !db.block) {\n return (\n <View style={[ui.flex, { backgroundColor: palette.bg }]}>\n <EmptyState\n palette={palette}\n icon=\"cloud-offline-outline\"\n title=\"Couldn't open this database\"\n text={db.error}\n action={{ label: 'Try again', onPress: refresh }}\n />\n </View>\n );\n }\n\n const layoutProps: LayoutProps = {\n rows: shownRows,\n columns: tableColumns,\n allColumns: columns,\n getValue,\n groupBy: view.groupBy,\n settings: view.settings,\n isDark,\n palette,\n selecting,\n selected,\n onToggleSelect: (row) =>\n setSelected((prev) => {\n const next = new Set(prev);\n if (next.has(row.id)) next.delete(row.id);\n else next.add(row.id);\n return next;\n }),\n onOpenRow: openRow,\n onRowMenu: (row) => {\n setMenuRow(row);\n setSheet('rowMenu');\n },\n onEditCell: (row, column) => setEditing({ rowId: row.id, column: column.name }),\n onToggleCheckbox: toggleCheckbox,\n onAddRow: addRow,\n hasMore: db.hasMore,\n loadingMore: db.loadingMore,\n onLoadMore: db.loadMore,\n refreshing,\n onRefresh: refresh,\n };\n\n const dateProps = {\n ...layoutProps,\n rowProps: cardProps,\n onChangeSettings: changeSettings,\n onAddRowWith: (values: Record<string, unknown>) => addRow(undefined, values),\n };\n\n const body = () => {\n switch (view.type) {\n case 'board':\n return <BoardLayout {...layoutProps} cardProps={cardProps} />;\n case 'gallery':\n return <GalleryLayout {...layoutProps} cardProps={cardProps} />;\n case 'list':\n return <ListLayout {...layoutProps} rowProps={cardProps} />;\n case 'table':\n return <TableLayout {...layoutProps} />;\n case 'calendar':\n return <CalendarLayout {...dateProps} />;\n case 'timeline':\n return <TimelineLayout {...dateProps} />;\n case 'chart':\n return <ChartLayout {...dateProps} />;\n default:\n return <TableLayout {...layoutProps} />;\n }\n };\n\n const total = db.totalCount ?? db.rows.length;\n\n return (\n <RelationProvider source={relations}>\n <View style={[ui.flex, { backgroundColor: palette.bg }]}>\n {/* Title */}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Rename database\"\n onPress={() => setSheet('renameDb')}\n style={styles.titleRow}\n >\n <Text style={styles.icon}>{db.icon || '🗂️'}</Text>\n <View style={ui.flex}>\n <Text\n numberOfLines={2}\n style={[styles.title, { color: db.title ? palette.text : palette.textFaint }]}\n >\n {db.title || 'Untitled database'}\n </Text>\n <Text style={[styles.meta, { color: palette.textMuted }]}>\n {`${total} ${total === 1 ? 'row' : 'rows'}${\n shownRows.length !== db.rows.length ? ` · ${shownRows.length} shown` : ''\n }`}\n </Text>\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Database actions\"\n onPress={() => setSheet('dbMenu')}\n hitSlop={8}\n style={[styles.more, { backgroundColor: palette.fill }]}\n >\n <Ionicons name=\"ellipsis-horizontal\" size={18} color={palette.text} />\n </Pressable>\n </Pressable>\n\n {/* View tabs */}\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.tabs}\n style={styles.tabsBar}\n >\n {db.views.map((v) => {\n const on = v.id === view.id;\n return (\n <Pressable\n key={v.id}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: on }}\n onPress={() => db.setActiveViewId(v.id)}\n onLongPress={() => {\n setMenuView(v);\n setSheet('viewMenu');\n }}\n style={[\n styles.tab,\n { backgroundColor: on ? palette.card : 'transparent' },\n on && styles.tabOn,\n ]}\n >\n <Ionicons\n name={VIEW_ICONS[v.type]}\n size={15}\n color={on ? palette.text : palette.textMuted}\n />\n <Text style={[styles.tabText, { color: on ? palette.text : palette.textMuted }]}>\n {v.name}\n </Text>\n </Pressable>\n );\n })}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"New view\"\n onPress={() => setSheet('newView')}\n style={styles.tab}\n >\n <Ionicons name=\"add\" size={18} color={palette.textMuted} />\n </Pressable>\n </ScrollView>\n\n {/* Toolbar */}\n {selecting ? (\n <View style={[styles.toolbar, { borderBottomColor: palette.hairline }]}>\n <Text style={[styles.selCount, { color: palette.text }]}>{`${selected.size} selected`}</Text>\n <View style={ui.flex} />\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n setSelected(\n selected.size === shownRows.length\n ? new Set()\n : new Set(shownRows.map((r) => r.id)),\n )\n }\n style={[styles.tool, { backgroundColor: palette.fill }]}\n >\n <Text style={[styles.toolText, { color: palette.text }]}>\n {selected.size === shownRows.length ? 'None' : 'All'}\n </Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n disabled={!selected.size}\n onPress={() => deleteRows([...selected])}\n style={[\n styles.tool,\n { backgroundColor: palette.dangerSoft, opacity: selected.size ? 1 : 0.5 },\n ]}\n >\n <Ionicons name=\"trash-outline\" size={16} color={palette.danger} />\n <Text style={[styles.toolText, { color: palette.danger }]}>Delete</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n setSelecting(false);\n setSelected(new Set());\n }}\n style={styles.tool}\n >\n <Text style={[styles.toolText, { color: palette.primary }]}>Done</Text>\n </Pressable>\n </View>\n ) : (\n <View style={[styles.toolbarWrap, { borderBottomColor: palette.hairline }]}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.toolbar}\n >\n <ToolButton\n palette={palette}\n icon=\"search\"\n active={searching || Boolean(search)}\n onPress={() => setSearching((s) => !s)}\n />\n <ToolButton\n palette={palette}\n icon=\"filter\"\n label={activeFilterCount ? `Filter · ${activeFilterCount}` : 'Filter'}\n active={activeFilterCount > 0}\n onPress={() => setSheet('filter')}\n />\n <ToolButton\n palette={palette}\n icon=\"swap-vertical\"\n label={view.sorts.length ? `Sort · ${view.sorts.length}` : 'Sort'}\n active={view.sorts.length > 0}\n onPress={() => setSheet('sort')}\n />\n <ToolButton\n palette={palette}\n icon=\"eye-outline\"\n label=\"Properties\"\n onPress={() => setSheet('properties')}\n />\n <ToolButton\n palette={palette}\n icon=\"options-outline\"\n label=\"View\"\n onPress={() => setSheet('options')}\n />\n <ToolButton\n palette={palette}\n icon=\"checkmark-circle-outline\"\n label=\"Select\"\n onPress={() => setSelecting(true)}\n />\n </ScrollView>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"New row\"\n onPress={() => addRow()}\n style={[styles.newButton, { backgroundColor: palette.primary }]}\n >\n <Ionicons name=\"add\" size={18} color={palette.onPrimary} />\n <Text style={[styles.newText, { color: palette.onPrimary }]}>New</Text>\n </Pressable>\n </View>\n )}\n {searching ? (\n <View style={[styles.search, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"search\" size={16} color={palette.textMuted} />\n <TextInput\n value={search}\n onChangeText={setSearch}\n autoFocus\n placeholder=\"Search rows\"\n placeholderTextColor={palette.textFaint}\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: palette.text }]}\n />\n </View>\n ) : null}\n\n <View style={[ui.flex, { paddingBottom: insets.bottom }]}>\n {db.rows.length || db.loading ? (\n body()\n ) : (\n <EmptyState\n palette={palette}\n icon=\"grid-outline\"\n title=\"No rows yet\"\n text=\"Add the first row to this database.\"\n action={{ label: 'New row', onPress: () => addRow() }}\n />\n )}\n </View>\n\n {/* Sheets */}\n <FilterSheet\n visible={sheet === 'filter'}\n palette={palette}\n columns={columns}\n conditions={view.conditions}\n onChange={(conditions) => changeView({ conditions })}\n onClose={() => setSheet(null)}\n />\n <SortSheet\n visible={sheet === 'sort'}\n palette={palette}\n columns={columns}\n sorts={view.sorts}\n onChange={(sorts: SortSpec[]) => changeView({ sorts })}\n onClose={() => setSheet(null)}\n />\n <PropertiesSheet\n visible={sheet === 'properties'}\n palette={palette}\n columns={columns}\n visibleNames={visibleNames}\n onChangeVisible={setVisibleNames}\n onEdit={(c) => setEditProperty({ name: c.name })}\n onAdd={() => setEditProperty({ name: null })}\n onClose={() => {\n setEditProperty(null);\n setSheet(null);\n }}\n >\n <PropertyEditorSheet\n visible={editProperty !== null}\n palette={palette}\n column={propertyColumn}\n isNew={editProperty?.name === null}\n calculation={\n propertyColumn\n ? (view.settings.calculations as Record<string, string> | undefined)?.[\n propertyColumn.name\n ]\n : undefined\n }\n onClose={() => setEditProperty(null)}\n onRename={(to) =>\n propertyColumn ? renameProperty(propertyColumn.name, to) : Promise.resolve(null)\n }\n onChangeType={(type) =>\n propertyColumn ? changePropertyType(propertyColumn.name, type) : Promise.resolve(null)\n }\n onDelete={() => propertyColumn && deleteProperty(propertyColumn.name)}\n onCalculation={(kind) => {\n if (!propertyColumn) return;\n const calcs = { ...((view.settings.calculations as Record<string, string>) ?? {}) };\n if (kind === 'none') delete calcs[propertyColumn.name];\n else calcs[propertyColumn.name] = kind;\n changeSettings({ calculations: Object.keys(calcs).length ? calcs : undefined });\n }}\n onCreate={createProperty}\n />\n </PropertiesSheet>\n <ViewOptionsSheet\n visible={sheet === 'options'}\n palette={palette}\n type={view.type}\n groupBy={view.groupBy}\n settings={view.settings}\n columns={columns}\n onChangeType={(type) => changeView({ type })}\n onChangeGroupBy={(groupBy) => changeView({ groupBy })}\n onChangeSettings={changeSettings}\n onClose={() => setSheet(null)}\n />\n <NewViewSheet\n visible={sheet === 'newView'}\n palette={palette}\n columns={columns}\n onCreate={(input) =>\n db.addView({ name: input.name, type: input.type, groupBy: input.groupBy ?? null })\n }\n onClose={() => setSheet(null)}\n />\n <ChoiceSheet\n visible={sheet === 'viewMenu'}\n title={menuView?.name ?? 'View'}\n palette={palette}\n choices={[\n { value: 'rename', label: 'Rename', icon: 'pencil-outline' as const },\n { value: 'duplicate', label: 'Duplicate', icon: 'copy-outline' as const },\n ...(menuView && menuView.id !== DEFAULT_VIEW_ID && db.views.length > 1\n ? [{ value: 'delete', label: 'Delete view', icon: 'trash-outline' as const }]\n : []),\n ]}\n onClose={() => setSheet(null)}\n onPick={async (action) => {\n const target = menuView;\n if (!target) return;\n if (action === 'rename') {\n thenOpen('renameView');\n return;\n }\n setSheet(null);\n if (action === 'duplicate') {\n report(await db.duplicateView(target, uniqueViewName(db.views, target.name)));\n } else if (action === 'delete') {\n report(await db.removeView(target.id));\n }\n }}\n />\n <ChoiceSheet\n visible={sheet === 'rowMenu'}\n title={menuRow ? rowTitle(menuRow) || 'Untitled' : 'Row'}\n palette={palette}\n choices={[\n { value: 'open', label: 'Open', icon: 'open-outline' as const },\n { value: 'rename', label: 'Rename', icon: 'pencil-outline' as const },\n ...(moveTargets.length\n ? [{ value: 'move', label: `Move to…`, icon: 'swap-horizontal-outline' as const }]\n : []),\n { value: 'duplicate', label: 'Duplicate', icon: 'copy-outline' as const },\n { value: 'select', label: 'Select', icon: 'checkmark-circle-outline' as const },\n { value: 'delete', label: 'Delete', icon: 'trash-outline' as const },\n ]}\n onClose={() => setSheet(null)}\n onPick={(action) => {\n const row = menuRow;\n if (!row) return;\n if (action === 'move') {\n thenOpen('moveTo');\n return;\n }\n setSheet(null);\n if (action === 'open') openRow(row);\n else if (action === 'rename') {\n const title = columns.find((c) => c.type === 'title');\n if (title) setTimeout(() => setEditing({ rowId: row.id, column: title.name }), 350);\n } else if (action === 'duplicate') duplicateRow(row);\n else if (action === 'select') {\n setSelecting(true);\n setSelected(new Set([row.id]));\n } else if (action === 'delete') deleteRows([row.id]);\n }}\n />\n <ChoiceSheet\n visible={sheet === 'moveTo'}\n title=\"Move to\"\n palette={palette}\n value={menuRow && groupColumn ? (menuRow.properties?.[groupColumn.name]?.name ?? null) : null}\n choices={moveTargets.map((g) => ({ value: g.value ?? '__none', label: g.name }))}\n onClose={() => setSheet(null)}\n onPick={(value) => {\n setSheet(null);\n if (!menuRow || !groupColumn) return;\n db.updateCell(\n menuRow.id,\n groupColumn.name,\n value === '__none' ? null : selectValueToCell(value),\n ).then(report);\n }}\n />\n <TextPromptDialog\n visible={sheet === 'renameView'}\n palette={palette}\n title=\"Rename view\"\n initial={menuView?.name ?? ''}\n confirmLabel=\"Rename\"\n onClose={() => setSheet(null)}\n onConfirm={async (name) => {\n if (!menuView) return;\n const err = await db.changeView(menuView.id, { name: name.trim() });\n if (err) throw new Error(err);\n }}\n />\n <TextPromptDialog\n visible={sheet === 'renameDb'}\n palette={palette}\n title=\"Rename database\"\n initial={db.title}\n placeholder=\"Untitled database\"\n confirmLabel=\"Rename\"\n onClose={() => setSheet(null)}\n onConfirm={async (name) => {\n const err = await db.renameDatabase(name.trim());\n if (err) throw new Error(err);\n await db.refresh();\n }}\n />\n <ChoiceSheet\n visible={sheet === 'dbMenu'}\n title={db.title || 'Database'}\n palette={palette}\n choices={[\n { value: 'rename', label: 'Rename', icon: 'pencil-outline' as const },\n { value: 'export', label: 'Export CSV', icon: 'share-outline' as const },\n ...(pickDocument\n ? [\n {\n value: 'importFile',\n label: 'Import CSV file',\n icon: 'document-attach-outline' as const,\n },\n ]\n : []),\n { value: 'paste', label: 'Paste CSV', icon: 'clipboard-outline' as const },\n ]}\n onClose={() => setSheet(null)}\n onPick={(action) => {\n if (action === 'rename' || action === 'paste') {\n thenOpen(action === 'rename' ? 'renameDb' : 'pasteCsv');\n return;\n }\n setSheet(null);\n // Let the sheet finish closing before the share sheet / file picker opens.\n setTimeout(() => (action === 'export' ? exportCsv() : importCsvFile()), 450);\n }}\n />\n <TextPromptDialog\n visible={sheet === 'pasteCsv'}\n palette={palette}\n title=\"Import CSV\"\n message=\"Paste CSV with a header row. Columns that match a property fill it; new ones become properties.\"\n placeholder={'Name,Status\\nFirst task,Done'}\n multiline\n confirmLabel=\"Import\"\n onClose={() => setSheet(null)}\n onConfirm={(text) => {\n setSheet(null);\n importCsv(text);\n }}\n />\n <CellEditorSheet\n visible={Boolean(editingRow && editingColumn)}\n row={editingRow}\n column={editingColumn}\n schema={db.schema}\n getValue={getValue}\n isDark={isDark}\n palette={palette}\n onClose={() => setEditing(null)}\n onSave={(value) =>\n editingRow && editingColumn\n ? db.updateCell(editingRow.id, editingColumn.name, value)\n : Promise.resolve(null)\n }\n onSaveSchema={db.saveSchema}\n />\n <NotionToast toast={toast} palette={palette} onHide={hideToast} />\n </View>\n </RelationProvider>\n );\n}\n\nfunction ToolButton({\n palette,\n icon,\n label,\n active,\n onPress,\n}: {\n palette: ReturnType<typeof notionPalette>;\n icon: React.ComponentProps<typeof Ionicons>['name'];\n label?: string;\n active?: boolean;\n onPress: () => void;\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label ?? icon}\n onPress={onPress}\n style={[styles.tool, { backgroundColor: active ? palette.primarySoft : palette.fill }]}\n >\n <Ionicons name={icon} size={16} color={active ? palette.primary : palette.text} />\n {label ? (\n <Text style={[styles.toolText, { color: active ? palette.primary : palette.text }]}>{label}</Text>\n ) : null}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n center: { flex: 1, alignItems: 'center', justifyContent: 'center' },\n titleRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingHorizontal: 16,\n paddingTop: 14,\n paddingBottom: 8,\n },\n icon: { fontSize: 30 },\n more: { width: 34, height: 34, borderRadius: 10, alignItems: 'center', justifyContent: 'center' },\n title: { fontSize: 24, fontWeight: '800', letterSpacing: -0.3 },\n meta: { fontSize: 13, marginTop: 2 },\n tabsBar: { flexGrow: 0 },\n tabs: { paddingHorizontal: 12, gap: 4, alignItems: 'center', paddingVertical: 4 },\n tab: { flexDirection: 'row', alignItems: 'center', gap: 6, paddingHorizontal: 12, height: 34, borderRadius: 10 },\n tabOn: {\n shadowColor: '#000',\n shadowOpacity: 0.06,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n tabText: { fontSize: 14, fontWeight: '600' },\n toolbarWrap: {\n flexDirection: 'row',\n alignItems: 'center',\n borderBottomWidth: StyleSheet.hairlineWidth,\n paddingRight: 12,\n },\n toolbar: { flexDirection: 'row', alignItems: 'center', gap: 8, paddingHorizontal: 12, paddingVertical: 8 },\n tool: { flexDirection: 'row', alignItems: 'center', gap: 5, paddingHorizontal: 11, height: 34, borderRadius: 10 },\n toolText: { fontSize: 14, fontWeight: '600' },\n newButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n paddingHorizontal: 12,\n height: 34,\n borderRadius: 10,\n },\n newText: { fontSize: 14, fontWeight: '700' },\n selCount: { fontSize: 15, fontWeight: '700' },\n search: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginHorizontal: 12,\n marginTop: 8,\n paddingHorizontal: 12,\n height: 40,\n borderRadius: 12,\n },\n searchInput: { flex: 1, fontSize: 16, paddingVertical: 0 },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NotionDatabaseView.js","sources":["../../../../src/features/notion/database/NotionDatabaseView.tsx"],"sourcesContent":["/**\n * Native database page - the web containers/DatabasePage on a phone: the database title, its\n * views as tabs (+ New view; long-press a tab to rename, duplicate or delete it), the toolbar\n * (search, filter, sort, properties, view options, select, New) and the active view's layout.\n *\n * Rows open as pages (`database_row` blocks open in the page editor). Cell edits, schema edits and\n * deletes are optimistic (useNotionDatabase); deletes offer Undo. Property renames / type changes\n * page in every row first and migrate each row's value, and every view that names the property is\n * updated too - like the web.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Pressable, ScrollView, Share, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useMutation } from '@apollo/client';\nimport { StackActions, useNavigation } from '@react-navigation/native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { NATIVE_NOTION_DUPLICATE_BLOCK } from '../notionDocuments';\nimport { NotionToast, TextPromptDialog, useNotionToast } from '../NotionPageMenu';\nimport { notionPalette } from '../notionTheme';\nimport { EmptyState, ui } from '../notionUi';\nimport { recordRecent } from '../notionRecents';\nimport { CellEditorSheet, rowTitle } from './DatabaseCells';\nimport { BoardLayout, GalleryLayout, ListLayout, TableLayout, type LayoutProps } from './DatabaseLayouts';\nimport { CalendarLayout, ChartLayout, TimelineLayout } from './DatabaseDateLayouts';\nimport {\n ChoiceSheet,\n FilterSheet,\n NewViewSheet,\n PropertiesSheet,\n PropertyEditorSheet,\n SortSheet,\n ViewOptionsSheet,\n} from './DatabaseSheets';\nimport { applyRowFilter, activeConditions, dropConditionProperty, renameConditionProperty } from './databaseFilter';\nimport { databaseCsv, planDatabaseCsvImport } from './databaseCsvActions';\nimport { makeCellGetter } from './databaseFormula';\nimport { rollupResolver } from './databaseRollup';\nimport { RelationProvider, useRelationSource } from './relationSource';\nimport { prefillForGroup } from './databaseGroup';\nimport {\n addSchemaProperty,\n changeSchemaPropertyType,\n convertCellValue,\n dropSortProperty,\n groupRows,\n normalizeStatusOptions,\n removeSchemaProperty,\n renameRowPatch,\n renameSchemaProperty,\n renameSortProperty,\n selectValueToCell,\n sortRows,\n uniquePropertyName,\n type SortSpec,\n} from './databaseView';\nimport {\n DEFAULT_VIEW_ID,\n mergeViewSettings,\n parseHiddenProperties,\n parseViewWidths,\n parseVisibleProperties,\n remapSettingsProperty,\n renameViewProperty,\n serializeVisibleProperties,\n shownProperties,\n tableDisplayColumns,\n uniqueViewName,\n type ViewSettings,\n type ViewType,\n} from './databaseViews';\nimport { useNotionDatabase, type DatabaseColumn, type DatabaseRow, type DatabaseViewModel } from './useNotionDatabase';\n\ntype PickDocument = (opts: {\n type?: string | string[];\n copyToCacheDirectory?: boolean;\n}) => Promise<{ canceled?: boolean; assets?: Array<{ uri: string; name?: string }> | null }>;\n\nlet pickDocument: PickDocument | null = null;\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require\n pickDocument = require('expo-document-picker').getDocumentAsync ?? null;\n} catch {\n pickDocument = null;\n}\n\ntype Sheet =\n | 'filter'\n | 'sort'\n | 'properties'\n | 'options'\n | 'newView'\n | 'viewMenu'\n | 'rowMenu'\n | 'moveTo'\n | 'renameView'\n | 'renameDb'\n | 'dbMenu'\n | 'pasteCsv'\n | null;\n\nconst VIEW_ICONS: Record<ViewType, React.ComponentProps<typeof Ionicons>['name']> = {\n table: 'grid-outline',\n board: 'albums-outline',\n calendar: 'calendar-outline',\n timeline: 'git-commit-outline',\n gallery: 'images-outline',\n list: 'list-outline',\n chart: 'bar-chart-outline',\n};\n\nexport function NotionDatabaseView({\n orgName,\n blockId,\n isDark,\n}: {\n orgName: string | null;\n blockId: string;\n isDark: boolean;\n}) {\n const palette = notionPalette(isDark);\n const navigation = useNavigation<any>();\n const insets = useSafeAreaInsets();\n const db = useNotionDatabase(blockId);\n const { toast, show: showToast, hide: hideToast } = useNotionToast();\n const [duplicateBlock] = useMutation(NATIVE_NOTION_DUPLICATE_BLOCK);\n\n const [sheet, setSheet] = useState<Sheet>(null);\n const [search, setSearch] = useState('');\n const [searching, setSearching] = useState(false);\n const [selecting, setSelecting] = useState(false);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [menuRow, setMenuRow] = useState<DatabaseRow | null>(null);\n const [menuView, setMenuView] = useState<DatabaseViewModel | null>(null);\n const [editing, setEditing] = useState<{ rowId: string; column: string } | null>(null);\n const [editProperty, setEditProperty] = useState<{ name: string | null } | null>(null);\n const [refreshing, setRefreshing] = useState(false);\n\n const view = db.activeView;\n const columns = db.columns;\n const relations = useRelationSource(columns, blockId, db.rows, db.schema);\n const getValue = useMemo(\n () => makeCellGetter(columns, new Date(), rollupResolver(columns, relations)),\n [columns, relations],\n );\n\n const workspaceId = db.block?.workspaceId ?? null;\n useEffect(() => {\n if (workspaceId) recordRecent(workspaceId, { id: blockId, title: db.title, icon: db.icon });\n }, [blockId, db.icon, db.title, workspaceId]);\n\n // ---- Rows on screen: filter, search, sort ----\n const shownRows = useMemo(() => {\n const filtered = applyRowFilter(db.rows, columns, { search }, view.conditions, { getValue });\n return sortRows(filtered, view.sorts, columns, getValue);\n }, [columns, db.rows, getValue, search, view.conditions, view.sorts]);\n\n // ---- Properties shown by the view ----\n const visible = useMemo(() => parseVisibleProperties(view.properties, columns), [columns, view.properties]);\n const hidden = useMemo(() => parseHiddenProperties(view.properties), [view.properties]);\n const widths = useMemo(() => parseViewWidths(view.properties), [view.properties]);\n const tableColumns = useMemo(\n () => tableDisplayColumns(columns, visible, widths, hidden),\n [columns, hidden, visible, widths],\n );\n const visibleNames = useMemo(\n () => tableColumns.filter((c) => c.type !== 'title').map((c) => c.name),\n [tableColumns],\n );\n const cardProps = useMemo(\n () => shownProperties(columns, visible, { exclude: view.groupBy ? [view.groupBy] : [] }),\n [columns, view.groupBy, visible],\n );\n const nonTitleNames = useMemo(() => columns.filter((c) => c.type !== 'title').map((c) => c.name), [columns]);\n\n /** Open `next` once the current sheet has closed (iOS can't present a modal while one is dismissing). */\n const thenOpen = useCallback((next: Sheet) => {\n setSheet(null);\n setTimeout(() => setSheet(next), 450);\n }, []);\n\n const report = useCallback((err: string | null) => err && showToast({ message: err }), [showToast]);\n\n const changeView = useCallback(\n (change: Parameters<typeof db.changeView>[1]) => db.changeView(view.id, change).then(report),\n [db, report, view.id],\n );\n const changeSettings = (patch: Partial<ViewSettings>) =>\n changeView({ settings: mergeViewSettings(view.settings, patch) });\n const setVisibleNames = (names: string[]) =>\n changeView({ properties: serializeVisibleProperties(names, widths, nonTitleNames) });\n\n // ---- Navigation ----\n const openRow = useCallback(\n (row: DatabaseRow) =>\n navigation.dispatch(StackActions.push('MainStack.NotionPage', { orgName, blockId: row.id })),\n [navigation, orgName],\n );\n\n // ---- Rows ----\n const addRow = useCallback(\n async (group?: { column: DatabaseColumn; value: string | null }, values?: Record<string, unknown>) => {\n const initial: Record<string, unknown> = { ...values };\n if (group) {\n const v = prefillForGroup(group.column, group.value);\n if (v !== undefined) initial[group.column.name] = v;\n }\n const res = await db.addRow(initial);\n if (res.error) showToast({ message: `Couldn't add a row. ${res.error}` });\n else if (res.id) {\n const created = { id: res.id, properties: initial } as DatabaseRow;\n const title = columns.find((c) => c.type === 'title');\n if (title) setEditing({ rowId: created.id, column: title.name });\n }\n },\n [columns, db, showToast],\n );\n\n const deleteRows = useCallback(\n async (ids: string[]) => {\n if (!ids.length) return;\n const { deleted, error } = await db.deleteRows(ids);\n setSelected(new Set());\n setSelecting(false);\n if (error) showToast({ message: `Couldn't delete ${ids.length - deleted.length} row(s). ${error}` });\n else\n showToast({\n message: deleted.length === 1 ? 'Row deleted' : `${deleted.length} rows deleted`,\n actionLabel: 'Undo',\n onAction: () => db.restoreRows(deleted),\n });\n },\n [db, showToast],\n );\n\n const duplicateRow = useCallback(\n async (row: DatabaseRow) => {\n try {\n await duplicateBlock({ variables: { blockId: row.id, includeChildren: true }, errorPolicy: 'none' });\n await db.reloadRows();\n showToast({ message: 'Row duplicated' });\n } catch (err) {\n showToast({ message: `Couldn't duplicate. ${(err as Error)?.message ?? ''}` });\n }\n },\n [db, duplicateBlock, showToast],\n );\n\n const toggleCheckbox = useCallback(\n (row: DatabaseRow, column: DatabaseColumn) =>\n db.updateCell(row.id, column.name, !(row.properties?.[column.name] === true)).then(report),\n [db, report],\n );\n\n // ---- Schema edits (web DatabasePage rename / type change / delete) ----\n const forEachView = useCallback(\n async (fn: (v: DatabaseViewModel) => Parameters<typeof db.changeView>[1] | null) => {\n for (const v of db.views) {\n const change = fn(v);\n if (change) await db.changeView(v.id, change);\n }\n },\n [db],\n );\n\n const renameProperty = useCallback(\n async (from: string, to: string): Promise<string | null> => {\n const result = renameSchemaProperty(db.schema, from, to);\n if (!result.ok) return result.error;\n const all = await db.loadAll();\n const err = await db.saveSchema(result.schema);\n if (err) return err;\n await Promise.allSettled(\n all.map((r) => {\n const patch = renameRowPatch(r.properties, from, to);\n return patch ? db.patchRow(r.id, patch) : null;\n }),\n );\n await forEachView((v) => {\n const layout = renameViewProperty(v, from, to) ?? {};\n const sorts = renameSortProperty(v.sorts, from, to);\n const conditions = renameConditionProperty(v.conditions, from, to);\n const change = {\n ...(layout as object),\n ...(JSON.stringify(sorts) !== JSON.stringify(v.sorts) ? { sorts } : {}),\n ...(JSON.stringify(conditions) !== JSON.stringify(v.conditions) ? { conditions } : {}),\n };\n return Object.keys(change).length ? change : null;\n });\n setEditProperty({ name: to });\n return null;\n },\n [db, forEachView],\n );\n\n const changePropertyType = useCallback(\n async (name: string, type: string): Promise<string | null> => {\n const before = db.schema[name];\n const result = changeSchemaPropertyType(db.schema, name, type);\n if (!result.ok) return result.error;\n const all = await db.loadAll();\n const err = await db.saveSchema(result.schema);\n if (err) return err;\n const fromType = String(before?.type ?? 'text');\n await Promise.allSettled(\n all.map((r) => {\n const value = r.properties?.[name];\n if (value === undefined) return null;\n const next = convertCellValue(value, fromType, type);\n return JSON.stringify(next) === JSON.stringify(value) ? null : db.patchRow(r.id, { [name]: next });\n }),\n );\n return null;\n },\n [db],\n );\n\n const deleteProperty = useCallback(\n async (name: string) => {\n const result = removeSchemaProperty(db.schema, name);\n if (!result.ok) {\n showToast({ message: result.error });\n return;\n }\n const err = await db.saveSchema(result.schema);\n if (err) {\n showToast({ message: err });\n return;\n }\n setEditProperty(null);\n await forEachView((v) => {\n const sorts = dropSortProperty(v.sorts, name);\n const conditions = dropConditionProperty(v.conditions, name);\n const settings = remapSettingsProperty(v.settings, name, null);\n const change: Parameters<typeof db.changeView>[1] = {};\n if (sorts.length !== v.sorts.length) change.sorts = sorts;\n if (conditions.length !== v.conditions.length) change.conditions = conditions;\n if (settings) change.settings = settings;\n if (v.groupBy === name) change.groupBy = null;\n return Object.keys(change).length ? change : null;\n });\n showToast({ message: `Deleted “${name}”` });\n },\n [db, forEachView, showToast],\n );\n\n const createProperty = useCallback(\n async (name: string, type: string): Promise<string | null> => {\n const finalName = name || uniquePropertyName(db.schema);\n const result = addSchemaProperty(db.schema, finalName, type);\n if (!result.ok) return result.error;\n const err = await db.saveSchema(result.schema);\n if (err) return err;\n if (visible) setVisibleNames([...visibleNames, finalName]);\n return null;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [db, visible, visibleNames],\n );\n\n // ---- CSV (web \"Export → CSV\" / \"Merge with CSV\") ----\n const exportCsv = useCallback(async () => {\n const all = db.hasMore ? await db.loadAll() : db.rows;\n const rows = sortRows(\n applyRowFilter(all, columns, { search }, view.conditions, { getValue }),\n view.sorts,\n columns,\n getValue,\n );\n const csv = databaseCsv(rows, tableColumns, getValue);\n try {\n await Share.share({ title: `${db.title || 'Database'}.csv`, message: csv });\n } catch {\n /* dismissed */\n }\n }, [columns, db, getValue, search, tableColumns, view.conditions, view.sorts]);\n\n const importCsv = useCallback(\n async (text: string) => {\n const plan = planDatabaseCsvImport(text, db.schema);\n if ('error' in plan) {\n showToast({ message: plan.error });\n return;\n }\n if (plan.schemaChanged) {\n const err = await db.saveSchema(plan.schema);\n if (err) {\n showToast({ message: `Couldn't add the CSV columns. ${err}` });\n return;\n }\n }\n showToast({ message: `Importing ${plan.rows.length} rows…` });\n let created = 0;\n for (const properties of plan.rows) {\n const res = await db.addRow(properties);\n if (res.id) created += 1;\n }\n showToast({\n message:\n created === plan.rows.length\n ? `Imported ${created} ${created === 1 ? 'row' : 'rows'}`\n : `Imported ${created} of ${plan.rows.length} rows`,\n });\n },\n [db, showToast],\n );\n\n const importCsvFile = useCallback(async () => {\n if (!pickDocument) {\n setSheet('pasteCsv');\n return;\n }\n try {\n const picked = await pickDocument({\n type: ['text/csv', 'text/comma-separated-values', 'text/plain', 'public.comma-separated-values-text'],\n copyToCacheDirectory: true,\n });\n const asset = picked.canceled ? null : picked.assets?.[0];\n if (!asset) return;\n const text = await (await fetch(asset.uri)).text();\n await importCsv(text);\n } catch (err) {\n showToast({ message: `Couldn't read that file. ${(err as Error)?.message ?? ''}`.trim() });\n }\n }, [importCsv, showToast]);\n\n // ---- Board \"Move to\" ----\n const groupColumn = view.groupBy ? columns.find((c) => c.name === view.groupBy) : undefined;\n const moveTargets = useMemo(() => {\n if (!groupColumn || (groupColumn.type !== 'select' && groupColumn.type !== 'status')) return [];\n const options =\n groupColumn.type === 'status' ? normalizeStatusOptions(groupColumn.options) : (groupColumn.options ?? []);\n return groupRows([], groupColumn.name, options);\n }, [groupColumn]);\n\n const refresh = useCallback(async () => {\n setRefreshing(true);\n await db.refresh();\n setRefreshing(false);\n }, [db]);\n\n const editingRow = editing ? (db.rows.find((r) => r.id === editing.rowId) ?? null) : null;\n const editingColumn = editing ? (columns.find((c) => c.name === editing.column) ?? null) : null;\n const propertyColumn = editProperty?.name ? (columns.find((c) => c.name === editProperty.name) ?? null) : null;\n const activeFilterCount = activeConditions(view.conditions, columns).length;\n\n if (db.loading && !db.rows.length && !db.block) {\n return (\n <View style={[styles.center, { backgroundColor: palette.bg }]}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n );\n }\n if (db.error && !db.block) {\n return (\n <View style={[ui.flex, { backgroundColor: palette.bg }]}>\n <EmptyState\n palette={palette}\n icon=\"cloud-offline-outline\"\n title=\"Couldn't open this database\"\n text={db.error}\n action={{ label: 'Try again', onPress: refresh }}\n />\n </View>\n );\n }\n\n const layoutProps: LayoutProps = {\n rows: shownRows,\n columns: tableColumns,\n allColumns: columns,\n getValue,\n groupBy: view.groupBy,\n settings: view.settings,\n isDark,\n palette,\n selecting,\n selected,\n onToggleSelect: (row) =>\n setSelected((prev) => {\n const next = new Set(prev);\n if (next.has(row.id)) next.delete(row.id);\n else next.add(row.id);\n return next;\n }),\n onOpenRow: openRow,\n onRowMenu: (row) => {\n setMenuRow(row);\n setSheet('rowMenu');\n },\n onEditCell: (row, column) => setEditing({ rowId: row.id, column: column.name }),\n onToggleCheckbox: toggleCheckbox,\n onAddRow: addRow,\n hasMore: db.hasMore,\n loadingMore: db.loadingMore,\n onLoadMore: db.loadMore,\n refreshing,\n onRefresh: refresh,\n };\n\n const dateProps = {\n ...layoutProps,\n rowProps: cardProps,\n onChangeSettings: changeSettings,\n onAddRowWith: (values: Record<string, unknown>) => addRow(undefined, values),\n };\n\n const body = () => {\n switch (view.type) {\n case 'board':\n return <BoardLayout {...layoutProps} cardProps={cardProps} />;\n case 'gallery':\n return <GalleryLayout {...layoutProps} cardProps={cardProps} />;\n case 'list':\n return <ListLayout {...layoutProps} rowProps={cardProps} />;\n case 'table':\n return <TableLayout {...layoutProps} />;\n case 'calendar':\n return <CalendarLayout {...dateProps} />;\n case 'timeline':\n return <TimelineLayout {...dateProps} />;\n case 'chart':\n return <ChartLayout {...dateProps} />;\n default:\n return <TableLayout {...layoutProps} />;\n }\n };\n\n const total = db.totalCount ?? db.rows.length;\n\n return (\n <RelationProvider source={relations}>\n <View style={[ui.flex, { backgroundColor: palette.bg }]}>\n {/* Title */}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Rename database\"\n onPress={() => setSheet('renameDb')}\n style={styles.titleRow}\n >\n <Text style={styles.icon}>{db.icon || '🗂️'}</Text>\n <View style={ui.flex}>\n <Text\n numberOfLines={2}\n style={[styles.title, { color: db.title ? palette.text : palette.textFaint }]}\n >\n {db.title || 'Untitled database'}\n </Text>\n <Text style={[styles.meta, { color: palette.textMuted }]}>\n {`${total} ${total === 1 ? 'row' : 'rows'}${\n shownRows.length !== db.rows.length ? ` · ${shownRows.length} shown` : ''\n }`}\n </Text>\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Database actions\"\n onPress={() => setSheet('dbMenu')}\n hitSlop={8}\n style={[styles.more, { backgroundColor: palette.fill }]}\n >\n <Ionicons name=\"ellipsis-horizontal\" size={18} color={palette.text} />\n </Pressable>\n </Pressable>\n\n {/* View tabs */}\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.tabs}\n style={styles.tabsBar}\n >\n {db.views.map((v) => {\n const on = v.id === view.id;\n return (\n <Pressable\n key={v.id}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: on }}\n onPress={() => db.setActiveViewId(v.id)}\n onLongPress={() => {\n setMenuView(v);\n setSheet('viewMenu');\n }}\n style={[\n styles.tab,\n { backgroundColor: on ? palette.card : 'transparent' },\n on && styles.tabOn,\n ]}\n >\n <Ionicons\n name={VIEW_ICONS[v.type]}\n size={15}\n color={on ? palette.text : palette.textMuted}\n />\n <Text style={[styles.tabText, { color: on ? palette.text : palette.textMuted }]}>\n {v.name}\n </Text>\n </Pressable>\n );\n })}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"New view\"\n onPress={() => setSheet('newView')}\n style={styles.tab}\n >\n <Ionicons name=\"add\" size={18} color={palette.textMuted} />\n </Pressable>\n </ScrollView>\n\n {/* Toolbar */}\n {selecting ? (\n <View style={[styles.toolbar, { borderBottomColor: palette.hairline }]}>\n <Text style={[styles.selCount, { color: palette.text }]}>{`${selected.size} selected`}</Text>\n <View style={ui.flex} />\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n setSelected(\n selected.size === shownRows.length\n ? new Set()\n : new Set(shownRows.map((r) => r.id)),\n )\n }\n style={[styles.tool, { backgroundColor: palette.fill }]}\n >\n <Text style={[styles.toolText, { color: palette.text }]}>\n {selected.size === shownRows.length ? 'None' : 'All'}\n </Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n disabled={!selected.size}\n onPress={() => deleteRows([...selected])}\n style={[\n styles.tool,\n { backgroundColor: palette.dangerSoft, opacity: selected.size ? 1 : 0.5 },\n ]}\n >\n <Ionicons name=\"trash-outline\" size={16} color={palette.danger} />\n <Text style={[styles.toolText, { color: palette.danger }]}>Delete</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n setSelecting(false);\n setSelected(new Set());\n }}\n style={styles.tool}\n >\n <Text style={[styles.toolText, { color: palette.primary }]}>Done</Text>\n </Pressable>\n </View>\n ) : (\n <View style={[styles.toolbarWrap, { borderBottomColor: palette.hairline }]}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.toolbar}\n >\n <ToolButton\n palette={palette}\n icon=\"search\"\n active={searching || Boolean(search)}\n onPress={() => setSearching((s) => !s)}\n />\n <ToolButton\n palette={palette}\n icon=\"filter\"\n label={activeFilterCount ? `Filter · ${activeFilterCount}` : 'Filter'}\n active={activeFilterCount > 0}\n onPress={() => setSheet('filter')}\n />\n <ToolButton\n palette={palette}\n icon=\"swap-vertical\"\n label={view.sorts.length ? `Sort · ${view.sorts.length}` : 'Sort'}\n active={view.sorts.length > 0}\n onPress={() => setSheet('sort')}\n />\n <ToolButton\n palette={palette}\n icon=\"eye-outline\"\n label=\"Properties\"\n onPress={() => setSheet('properties')}\n />\n <ToolButton\n palette={palette}\n icon=\"options-outline\"\n label=\"View\"\n onPress={() => setSheet('options')}\n />\n <ToolButton\n palette={palette}\n icon=\"checkmark-circle-outline\"\n label=\"Select\"\n onPress={() => setSelecting(true)}\n />\n </ScrollView>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"New row\"\n onPress={() => addRow()}\n style={[styles.newButton, { backgroundColor: palette.primary }]}\n >\n <Ionicons name=\"add\" size={18} color={palette.onPrimary} />\n <Text style={[styles.newText, { color: palette.onPrimary }]}>New</Text>\n </Pressable>\n </View>\n )}\n {searching ? (\n <View style={[styles.search, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"search\" size={16} color={palette.textMuted} />\n <TextInput\n value={search}\n onChangeText={setSearch}\n autoFocus\n placeholder=\"Search rows\"\n placeholderTextColor={palette.textFaint}\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: palette.text }]}\n />\n </View>\n ) : null}\n\n <View style={[ui.flex, { paddingBottom: insets.bottom }]}>\n {db.rows.length || db.loading ? (\n body()\n ) : (\n <EmptyState\n palette={palette}\n icon=\"grid-outline\"\n title=\"No rows yet\"\n text=\"Add the first row to this database.\"\n action={{ label: 'New row', onPress: () => addRow() }}\n />\n )}\n </View>\n\n {/* Sheets */}\n <FilterSheet\n visible={sheet === 'filter'}\n palette={palette}\n columns={columns}\n conditions={view.conditions}\n onChange={(conditions) => changeView({ conditions })}\n onClose={() => setSheet(null)}\n />\n <SortSheet\n visible={sheet === 'sort'}\n palette={palette}\n columns={columns}\n sorts={view.sorts}\n onChange={(sorts: SortSpec[]) => changeView({ sorts })}\n onClose={() => setSheet(null)}\n />\n <PropertiesSheet\n visible={sheet === 'properties'}\n palette={palette}\n columns={columns}\n visibleNames={visibleNames}\n onChangeVisible={setVisibleNames}\n onEdit={(c) => setEditProperty({ name: c.name })}\n onAdd={() => setEditProperty({ name: null })}\n onClose={() => {\n setEditProperty(null);\n setSheet(null);\n }}\n >\n <PropertyEditorSheet\n visible={editProperty !== null}\n palette={palette}\n column={propertyColumn}\n isNew={editProperty?.name === null}\n calculation={\n propertyColumn\n ? (view.settings.calculations as Record<string, string> | undefined)?.[\n propertyColumn.name\n ]\n : undefined\n }\n onClose={() => setEditProperty(null)}\n onRename={(to) =>\n propertyColumn ? renameProperty(propertyColumn.name, to) : Promise.resolve(null)\n }\n onChangeType={(type) =>\n propertyColumn ? changePropertyType(propertyColumn.name, type) : Promise.resolve(null)\n }\n onDelete={() => propertyColumn && deleteProperty(propertyColumn.name)}\n onCalculation={(kind) => {\n if (!propertyColumn) return;\n const calcs = { ...((view.settings.calculations as Record<string, string>) ?? {}) };\n if (kind === 'none') delete calcs[propertyColumn.name];\n else calcs[propertyColumn.name] = kind;\n changeSettings({ calculations: Object.keys(calcs).length ? calcs : undefined });\n }}\n onCreate={createProperty}\n />\n </PropertiesSheet>\n <ViewOptionsSheet\n visible={sheet === 'options'}\n palette={palette}\n type={view.type}\n groupBy={view.groupBy}\n settings={view.settings}\n columns={columns}\n onChangeType={(type) => changeView({ type })}\n onChangeGroupBy={(groupBy) => changeView({ groupBy })}\n onChangeSettings={changeSettings}\n onClose={() => setSheet(null)}\n />\n <NewViewSheet\n visible={sheet === 'newView'}\n palette={palette}\n columns={columns}\n onCreate={(input) =>\n db.addView({ name: input.name, type: input.type, groupBy: input.groupBy ?? null })\n }\n onClose={() => setSheet(null)}\n />\n <ChoiceSheet\n visible={sheet === 'viewMenu'}\n title={menuView?.name ?? 'View'}\n palette={palette}\n choices={[\n { value: 'rename', label: 'Rename', icon: 'pencil-outline' as const },\n { value: 'duplicate', label: 'Duplicate', icon: 'copy-outline' as const },\n ...(menuView && menuView.id !== DEFAULT_VIEW_ID && db.views.length > 1\n ? [{ value: 'delete', label: 'Delete view', icon: 'trash-outline' as const }]\n : []),\n ]}\n onClose={() => setSheet(null)}\n onPick={async (action) => {\n const target = menuView;\n if (!target) return;\n if (action === 'rename') {\n thenOpen('renameView');\n return;\n }\n setSheet(null);\n if (action === 'duplicate') {\n report(await db.duplicateView(target, uniqueViewName(db.views, target.name)));\n } else if (action === 'delete') {\n report(await db.removeView(target.id));\n }\n }}\n />\n <ChoiceSheet\n visible={sheet === 'rowMenu'}\n title={menuRow ? rowTitle(menuRow) || 'Untitled' : 'Row'}\n palette={palette}\n choices={[\n { value: 'open', label: 'Open', icon: 'open-outline' as const },\n { value: 'rename', label: 'Rename', icon: 'pencil-outline' as const },\n ...(moveTargets.length\n ? [{ value: 'move', label: `Move to…`, icon: 'swap-horizontal-outline' as const }]\n : []),\n { value: 'duplicate', label: 'Duplicate', icon: 'copy-outline' as const },\n { value: 'select', label: 'Select', icon: 'checkmark-circle-outline' as const },\n { value: 'delete', label: 'Delete', icon: 'trash-outline' as const },\n ]}\n onClose={() => setSheet(null)}\n onPick={(action) => {\n const row = menuRow;\n if (!row) return;\n if (action === 'move') {\n thenOpen('moveTo');\n return;\n }\n setSheet(null);\n if (action === 'open') openRow(row);\n else if (action === 'rename') {\n const title = columns.find((c) => c.type === 'title');\n if (title) setTimeout(() => setEditing({ rowId: row.id, column: title.name }), 350);\n } else if (action === 'duplicate') duplicateRow(row);\n else if (action === 'select') {\n setSelecting(true);\n setSelected(new Set([row.id]));\n } else if (action === 'delete') deleteRows([row.id]);\n }}\n />\n <ChoiceSheet\n visible={sheet === 'moveTo'}\n title=\"Move to\"\n palette={palette}\n value={menuRow && groupColumn ? (menuRow.properties?.[groupColumn.name]?.name ?? null) : null}\n choices={moveTargets.map((g) => ({ value: g.value ?? '__none', label: g.name }))}\n onClose={() => setSheet(null)}\n onPick={(value) => {\n setSheet(null);\n if (!menuRow || !groupColumn) return;\n db.updateCell(\n menuRow.id,\n groupColumn.name,\n value === '__none' ? null : selectValueToCell(value),\n ).then(report);\n }}\n />\n <TextPromptDialog\n visible={sheet === 'renameView'}\n palette={palette}\n title=\"Rename view\"\n initial={menuView?.name ?? ''}\n confirmLabel=\"Rename\"\n onClose={() => setSheet(null)}\n onConfirm={async (name) => {\n if (!menuView) return;\n const err = await db.changeView(menuView.id, { name: name.trim() });\n if (err) throw new Error(err);\n }}\n />\n <TextPromptDialog\n visible={sheet === 'renameDb'}\n palette={palette}\n title=\"Rename database\"\n initial={db.title}\n placeholder=\"Untitled database\"\n confirmLabel=\"Rename\"\n onClose={() => setSheet(null)}\n onConfirm={async (name) => {\n const err = await db.renameDatabase(name.trim());\n if (err) throw new Error(err);\n await db.refresh();\n }}\n />\n <ChoiceSheet\n visible={sheet === 'dbMenu'}\n title={db.title || 'Database'}\n palette={palette}\n choices={[\n { value: 'rename', label: 'Rename', icon: 'pencil-outline' as const },\n { value: 'export', label: 'Export CSV', icon: 'share-outline' as const },\n ...(pickDocument\n ? [\n {\n value: 'importFile',\n label: 'Import CSV file',\n icon: 'document-attach-outline' as const,\n },\n ]\n : []),\n { value: 'paste', label: 'Paste CSV', icon: 'clipboard-outline' as const },\n ]}\n onClose={() => setSheet(null)}\n onPick={(action) => {\n if (action === 'rename' || action === 'paste') {\n thenOpen(action === 'rename' ? 'renameDb' : 'pasteCsv');\n return;\n }\n setSheet(null);\n // Let the sheet finish closing before the share sheet / file picker opens.\n setTimeout(() => (action === 'export' ? exportCsv() : importCsvFile()), 450);\n }}\n />\n <TextPromptDialog\n visible={sheet === 'pasteCsv'}\n palette={palette}\n title=\"Import CSV\"\n message=\"Paste CSV with a header row. Columns that match a property fill it; new ones become properties.\"\n placeholder={'Name,Status\\nFirst task,Done'}\n multiline\n confirmLabel=\"Import\"\n onClose={() => setSheet(null)}\n onConfirm={(text) => {\n setSheet(null);\n importCsv(text);\n }}\n />\n <CellEditorSheet\n visible={Boolean(editingRow && editingColumn)}\n row={editingRow}\n column={editingColumn}\n schema={db.schema}\n getValue={getValue}\n isDark={isDark}\n palette={palette}\n onClose={() => setEditing(null)}\n onSave={(value) =>\n editingRow && editingColumn\n ? db.updateCell(editingRow.id, editingColumn.name, value)\n : Promise.resolve(null)\n }\n onSaveSchema={db.saveSchema}\n />\n <NotionToast toast={toast} palette={palette} onHide={hideToast} />\n </View>\n </RelationProvider>\n );\n}\n\nfunction ToolButton({\n palette,\n icon,\n label,\n active,\n onPress,\n}: {\n palette: ReturnType<typeof notionPalette>;\n icon: React.ComponentProps<typeof Ionicons>['name'];\n label?: string;\n active?: boolean;\n onPress: () => void;\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label ?? icon}\n onPress={onPress}\n style={[styles.tool, { backgroundColor: active ? palette.primarySoft : palette.fill }]}\n >\n <Ionicons name={icon} size={16} color={active ? palette.primary : palette.text} />\n {label ? (\n <Text style={[styles.toolText, { color: active ? palette.primary : palette.text }]}>{label}</Text>\n ) : null}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n center: { flex: 1, alignItems: 'center', justifyContent: 'center' },\n titleRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingHorizontal: 16,\n paddingTop: 14,\n paddingBottom: 8,\n },\n icon: { fontSize: 30 },\n more: { width: 34, height: 34, borderRadius: 10, alignItems: 'center', justifyContent: 'center' },\n title: { fontSize: 24, fontWeight: '800', letterSpacing: -0.3 },\n meta: { fontSize: 13, marginTop: 2 },\n tabsBar: { flexGrow: 0 },\n tabs: { paddingHorizontal: 12, gap: 4, alignItems: 'center', paddingVertical: 4 },\n tab: { flexDirection: 'row', alignItems: 'center', gap: 6, paddingHorizontal: 12, height: 34, borderRadius: 10 },\n tabOn: {\n shadowColor: '#000',\n shadowOpacity: 0.06,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n tabText: { fontSize: 14, fontWeight: '600' },\n toolbarWrap: {\n flexDirection: 'row',\n alignItems: 'center',\n borderBottomWidth: StyleSheet.hairlineWidth,\n paddingRight: 12,\n },\n toolbar: { flexDirection: 'row', alignItems: 'center', gap: 8, paddingHorizontal: 12, paddingVertical: 8 },\n tool: { flexDirection: 'row', alignItems: 'center', gap: 5, paddingHorizontal: 11, height: 34, borderRadius: 10 },\n toolText: { fontSize: 14, fontWeight: '600' },\n newButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n paddingHorizontal: 12,\n height: 34,\n borderRadius: 10,\n },\n newText: { fontSize: 14, fontWeight: '700' },\n selCount: { fontSize: 15, fontWeight: '700' },\n search: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginHorizontal: 12,\n marginTop: 8,\n paddingHorizontal: 12,\n height: 40,\n borderRadius: 12,\n },\n searchInput: { flex: 1, fontSize: 16, paddingVertical: 0 },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ const RUN_STATUS_OPTION = {
|
|
|
26
26
|
group: "complete"
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
|
-
Object.fromEntries(AGENT_RUN_STATUSES.map((s) => [s, RUN_STATUS_OPTION[s].name]));
|
|
29
|
+
const AGENT_RUN_LABEL = Object.fromEntries(AGENT_RUN_STATUSES.map((s) => [s, RUN_STATUS_OPTION[s].name]));
|
|
30
30
|
const STALE_RUN_MS = 15 * 60 * 1e3;
|
|
31
31
|
function isAgentRunStatus(v) {
|
|
32
32
|
return typeof v === "string" && AGENT_RUN_STATUSES.includes(v);
|
|
@@ -36,4 +36,4 @@ function effectiveRunStatus(status, at, now = Date.now()) {
|
|
|
36
36
|
const ms = typeof at === "number" ? at : typeof at === "string" ? Date.parse(at) : NaN;
|
|
37
37
|
if (!Number.isFinite(ms) || ms <= 0 || now - ms > STALE_RUN_MS) return "failed";
|
|
38
38
|
return "running";
|
|
39
|
-
}export{AGENT_RUN_STATUSES,RUN_STATUS_OPTION,STALE_RUN_MS,effectiveRunStatus,isAgentRunStatus};//# sourceMappingURL=notionAgentRunStatus.js.map
|
|
39
|
+
}export{AGENT_RUN_LABEL,AGENT_RUN_STATUSES,RUN_STATUS_OPTION,STALE_RUN_MS,effectiveRunStatus,isAgentRunStatus};//# sourceMappingURL=notionAgentRunStatus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notionAgentRunStatus.js","sources":["../../../src/features/notion/notionAgentRunStatus.ts"],"sourcesContent":["// Ported from forms-stack packages/notion-api/browser/src/utils/agentRunStatus.ts (develop).\n/* eslint-disable */\n/**\n * agentRunStatus — the ONE source for an agent run's status: the status values, their labels /\n * Runs-database options, and the \"effective\" status every surface shows (sidebar dot, Home,\n * agent page header). A `running` lastRun older than {@link STALE_RUN_MS} (tab closed mid-run)\n * — or one without a readable start time — counts as failed, so nothing reads \"Running\" forever.\n *\n * Framework-free and dependency-free: utils/pageKinds and utils/notesAgent both re-export it.\n */\n\nexport type AgentRunStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'needs_input';\n\nexport const AGENT_RUN_STATUSES: readonly AgentRunStatus[] = [\n 'queued',\n 'running',\n 'succeeded',\n 'failed',\n 'needs_input',\n];\n\n/** The Runs database's Status options (name = the label shown everywhere). */\nexport const RUN_STATUS_OPTION: Record<AgentRunStatus, { name: string; color: string; group: string }> = {\n queued: { name: 'Queued', color: 'gray', group: 'todo' },\n running: { name: 'Running', color: 'blue', group: 'in_progress' },\n needs_input: { name: 'Needs input', color: 'yellow', group: 'in_progress' },\n succeeded: { name: 'Succeeded', color: 'green', group: 'complete' },\n failed: { name: 'Failed', color: 'red', group: 'complete' },\n};\n\nexport const AGENT_RUN_LABEL: Record<AgentRunStatus, string> = Object.fromEntries(\n AGENT_RUN_STATUSES.map((s) => [s, RUN_STATUS_OPTION[s].name]),\n) as Record<AgentRunStatus, string>;\n\n/** A \"running\" lastRun older than this is treated as interrupted (tab closed mid-run). */\nexport const STALE_RUN_MS = 15 * 60 * 1000;\n\nexport function isAgentRunStatus(v: unknown): v is AgentRunStatus {\n return typeof v === 'string' && (AGENT_RUN_STATUSES as readonly string[]).includes(v);\n}\n\n/**\n * The status to show for a stored run: `running` that started more than 15 minutes ago (or at an\n * unknown time) is `failed`; anything else as stored. `at` is an ISO string or ms since epoch.\n */\nexport function effectiveRunStatus(\n status: AgentRunStatus,\n at: string | number | null | undefined,\n now: number = Date.now(),\n): AgentRunStatus {\n if (status !== 'running') return status;\n const ms = typeof at === 'number' ? at : typeof at === 'string' ? Date.parse(at) : NaN;\n if (!Number.isFinite(ms) || ms <= 0 || now - ms > STALE_RUN_MS) return 'failed';\n return 'running';\n}\n"],"names":[],"mappings":"AAYO,MAAM,qBAAgD,CAAC,QAAA,EAAU,SAAW,EAAA,WAAA,EAAa,UAAU,aAAa;AAGhH,MAAM,iBAIR,GAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,QAAA;AAAA,IACN,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,SAAA;AAAA,IACN,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,aAAA;AAAA,IACN,KAAO,EAAA,QAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,WAAA;AAAA,IACN,KAAO,EAAA,OAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,QAAA;AAAA,IACN,KAAO,EAAA,KAAA;AAAA,IACP,KAAO,EAAA;AAAA;AAEX;
|
|
1
|
+
{"version":3,"file":"notionAgentRunStatus.js","sources":["../../../src/features/notion/notionAgentRunStatus.ts"],"sourcesContent":["// Ported from forms-stack packages/notion-api/browser/src/utils/agentRunStatus.ts (develop).\n/* eslint-disable */\n/**\n * agentRunStatus — the ONE source for an agent run's status: the status values, their labels /\n * Runs-database options, and the \"effective\" status every surface shows (sidebar dot, Home,\n * agent page header). A `running` lastRun older than {@link STALE_RUN_MS} (tab closed mid-run)\n * — or one without a readable start time — counts as failed, so nothing reads \"Running\" forever.\n *\n * Framework-free and dependency-free: utils/pageKinds and utils/notesAgent both re-export it.\n */\n\nexport type AgentRunStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'needs_input';\n\nexport const AGENT_RUN_STATUSES: readonly AgentRunStatus[] = [\n 'queued',\n 'running',\n 'succeeded',\n 'failed',\n 'needs_input',\n];\n\n/** The Runs database's Status options (name = the label shown everywhere). */\nexport const RUN_STATUS_OPTION: Record<AgentRunStatus, { name: string; color: string; group: string }> = {\n queued: { name: 'Queued', color: 'gray', group: 'todo' },\n running: { name: 'Running', color: 'blue', group: 'in_progress' },\n needs_input: { name: 'Needs input', color: 'yellow', group: 'in_progress' },\n succeeded: { name: 'Succeeded', color: 'green', group: 'complete' },\n failed: { name: 'Failed', color: 'red', group: 'complete' },\n};\n\nexport const AGENT_RUN_LABEL: Record<AgentRunStatus, string> = Object.fromEntries(\n AGENT_RUN_STATUSES.map((s) => [s, RUN_STATUS_OPTION[s].name]),\n) as Record<AgentRunStatus, string>;\n\n/** A \"running\" lastRun older than this is treated as interrupted (tab closed mid-run). */\nexport const STALE_RUN_MS = 15 * 60 * 1000;\n\nexport function isAgentRunStatus(v: unknown): v is AgentRunStatus {\n return typeof v === 'string' && (AGENT_RUN_STATUSES as readonly string[]).includes(v);\n}\n\n/**\n * The status to show for a stored run: `running` that started more than 15 minutes ago (or at an\n * unknown time) is `failed`; anything else as stored. `at` is an ISO string or ms since epoch.\n */\nexport function effectiveRunStatus(\n status: AgentRunStatus,\n at: string | number | null | undefined,\n now: number = Date.now(),\n): AgentRunStatus {\n if (status !== 'running') return status;\n const ms = typeof at === 'number' ? at : typeof at === 'string' ? Date.parse(at) : NaN;\n if (!Number.isFinite(ms) || ms <= 0 || now - ms > STALE_RUN_MS) return 'failed';\n return 'running';\n}\n"],"names":[],"mappings":"AAYO,MAAM,qBAAgD,CAAC,QAAA,EAAU,SAAW,EAAA,WAAA,EAAa,UAAU,aAAa;AAGhH,MAAM,iBAIR,GAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,QAAA;AAAA,IACN,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,SAAA;AAAA,IACN,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,aAAA;AAAA,IACN,KAAO,EAAA,QAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,WAAA;AAAA,IACN,KAAO,EAAA,OAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,QAAA;AAAA,IACN,KAAO,EAAA,KAAA;AAAA,IACP,KAAO,EAAA;AAAA;AAEX;AACO,MAAM,eAAkD,GAAA,MAAA,CAAO,WAAY,CAAA,kBAAA,CAAmB,GAAI,CAAA,CAAA,CAAA,KAAK,CAAC,CAAA,EAAG,iBAAkB,CAAA,CAAC,CAAE,CAAA,IAAI,CAAC,CAAC;AAGhI,MAAA,YAAA,GAAe,KAAK,EAAK,GAAA;AAC/B,SAAS,iBAAiB,CAAiC,EAAA;AAChE,EAAA,OAAO,OAAO,CAAA,KAAM,QAAa,IAAA,kBAAA,CAAyC,SAAS,CAAC,CAAA;AACtF;AAMO,SAAS,mBAAmB,MAAwB,EAAA,EAAA,EAAwC,GAAc,GAAA,IAAA,CAAK,KAAuB,EAAA;AAC3I,EAAI,IAAA,MAAA,KAAW,WAAkB,OAAA,MAAA;AACjC,EAAM,MAAA,EAAA,GAAK,OAAO,EAAA,KAAO,QAAW,GAAA,EAAA,GAAK,OAAO,EAAA,KAAO,QAAW,GAAA,IAAA,CAAK,KAAM,CAAA,EAAE,CAAI,GAAA,GAAA;AACnF,EAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,EAAE,CAAA,IAAK,MAAM,CAAK,IAAA,GAAA,GAAM,EAAK,GAAA,YAAA,EAAqB,OAAA,QAAA;AACvE,EAAO,OAAA,SAAA;AACT"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import {TRIGGER_KIND_LABEL}from'./notionNotesAgent.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
const ACTIVE_SERVER_RUN_STATUSES = /* @__PURE__ */ new Set(["queued", "running"]);
|
|
21
|
+
const SERVER_RUNS_POLL_MS = 2e3;
|
|
22
|
+
function serverRunToRow(run) {
|
|
23
|
+
var _a, _b, _c, _d, _e, _f;
|
|
24
|
+
const raw = String(run.status);
|
|
25
|
+
const status = raw === "queued" || raw === "running" || raw === "succeeded" || raw === "needs_input" ? raw : "failed";
|
|
26
|
+
const summary = ((_a = run.summary) != null ? _a : "").trim() || (raw === "cancelled" ? "Cancelled" : ((_b = run.error) != null ? _b : "").trim() || "");
|
|
27
|
+
const at = Date.parse((_c = run.startedAt) != null ? _c : "") || Date.parse((_d = run.createdAt) != null ? _d : "") || 0;
|
|
28
|
+
return __spreadProps(__spreadValues({
|
|
29
|
+
id: String(run.id),
|
|
30
|
+
status,
|
|
31
|
+
startedAt: at,
|
|
32
|
+
trigger: (_f = TRIGGER_KIND_LABEL[(_e = run.triggerType) != null ? _e : "manual"]) != null ? _f : "Manual",
|
|
33
|
+
summary
|
|
34
|
+
}, run.sessionId ? {
|
|
35
|
+
sessionId: run.sessionId
|
|
36
|
+
} : {}), {
|
|
37
|
+
serverStatus: raw,
|
|
38
|
+
active: ACTIVE_SERVER_RUN_STATUSES.has(raw)
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function runDoneMessage(status, name, summary) {
|
|
42
|
+
switch (status) {
|
|
43
|
+
case "succeeded":
|
|
44
|
+
return `\u201C${name}\u201D finished.`;
|
|
45
|
+
case "needs_input":
|
|
46
|
+
return `\u201C${name}\u201D needs your input.`;
|
|
47
|
+
case "cancelled":
|
|
48
|
+
return `\u201C${name}\u201D was cancelled.`;
|
|
49
|
+
default:
|
|
50
|
+
return `\u201C${name}\u201D failed. ${summary}`.trim();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function isMissingOperationError(err) {
|
|
54
|
+
var _a;
|
|
55
|
+
const msg = String((_a = err == null ? void 0 : err.message) != null ? _a : "");
|
|
56
|
+
return /Cannot query field|Unknown (type|argument)|is not defined by type/i.test(msg);
|
|
57
|
+
}export{ACTIVE_SERVER_RUN_STATUSES,SERVER_RUNS_POLL_MS,isMissingOperationError,runDoneMessage,serverRunToRow};//# sourceMappingURL=notionAgentRuns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notionAgentRuns.js","sources":["../../../src/features/notion/notionAgentRuns.ts"],"sourcesContent":["/**\n * Server agent runs (`notionAgentRuns` / `startNotionAgentRun`) as the Runs list shows them - the\n * web utils/databaseBatch `serverRunToRow` and the \"run finished\" messages of AgentPageHeader.\n */\nimport { TRIGGER_KIND_LABEL, type AgentRunRow, type AgentTriggerType } from './notionNotesAgent';\n\nexport type ServerRunStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'needs_input' | 'cancelled';\n\nexport interface ServerRunLike {\n id: string;\n status: string;\n triggerType?: string | null;\n startedAt?: string | null;\n createdAt?: string | null;\n summary?: string | null;\n error?: string | null;\n sessionId?: string | null;\n}\n\nexport interface ServerRunRow extends AgentRunRow {\n serverStatus: ServerRunStatus;\n active: boolean;\n}\n\nexport const ACTIVE_SERVER_RUN_STATUSES: ReadonlySet<string> = new Set(['queued', 'running']);\n\n/** While a server run is queued / running the list re-reads this often. */\nexport const SERVER_RUNS_POLL_MS = 2000;\n\nexport function serverRunToRow(run: ServerRunLike): ServerRunRow {\n const raw = String(run.status) as ServerRunStatus;\n const status: AgentRunRow['status'] =\n raw === 'queued' || raw === 'running' || raw === 'succeeded' || raw === 'needs_input' ? raw : 'failed';\n const summary = (run.summary ?? '').trim() || (raw === 'cancelled' ? 'Cancelled' : (run.error ?? '').trim() || '');\n const at = Date.parse(run.startedAt ?? '') || Date.parse(run.createdAt ?? '') || 0;\n return {\n id: String(run.id),\n status,\n startedAt: at,\n trigger: TRIGGER_KIND_LABEL[(run.triggerType ?? 'manual') as AgentTriggerType] ?? 'Manual',\n summary,\n ...(run.sessionId ? { sessionId: run.sessionId } : {}),\n serverStatus: raw,\n active: ACTIVE_SERVER_RUN_STATUSES.has(raw),\n };\n}\n\n/** The toast when a run started here finishes. */\nexport function runDoneMessage(status: ServerRunStatus, name: string, summary: string): string {\n switch (status) {\n case 'succeeded':\n return `“${name}” finished.`;\n case 'needs_input':\n return `“${name}” needs your input.`;\n case 'cancelled':\n return `“${name}” was cancelled.`;\n default:\n return `“${name}” failed. ${summary}`.trim();\n }\n}\n\n/** A GraphQL error that means the server doesn't have the operation (older backend). */\nexport function isMissingOperationError(err: unknown): boolean {\n const msg = String((err as { message?: string } | null)?.message ?? '');\n return /Cannot query field|Unknown (type|argument)|is not defined by type/i.test(msg);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAoBO,MAAM,6CAAsD,IAAA,GAAA,CAAI,CAAC,QAAA,EAAU,SAAS,CAAC;AAGrF,MAAM,mBAAsB,GAAA;AAC5B,SAAS,eAAe,GAAkC,EAAA;AAxBjE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyBE,EAAM,MAAA,GAAA,GAAM,MAAO,CAAA,GAAA,CAAI,MAAM,CAAA;AAC7B,EAAM,MAAA,MAAA,GAAgC,QAAQ,QAAY,IAAA,GAAA,KAAQ,aAAa,GAAQ,KAAA,WAAA,IAAe,GAAQ,KAAA,aAAA,GAAgB,GAAM,GAAA,QAAA;AACpI,EAAA,MAAM,OAAW,GAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,OAAJ,KAAA,IAAA,GAAA,EAAA,GAAe,IAAI,IAAK,EAAA,KAAM,GAAQ,KAAA,WAAA,GAAc,gBAAe,EAAI,GAAA,GAAA,CAAA,KAAA,KAAJ,IAAa,GAAA,EAAA,GAAA,EAAA,EAAI,MAAU,IAAA,EAAA,CAAA;AAC/G,EAAA,MAAM,EAAK,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,cAAJ,IAAiB,GAAA,EAAA,GAAA,EAAE,CAAK,IAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,SAAJ,KAAA,IAAA,GAAA,EAAA,GAAiB,EAAE,CAAK,IAAA,CAAA;AACjF,EAAO,OAAA,aAAA,CAAA,cAAA,CAAA;AAAA,IACL,EAAA,EAAI,MAAO,CAAA,GAAA,CAAI,EAAE,CAAA;AAAA,IACjB,MAAA;AAAA,IACA,SAAW,EAAA,EAAA;AAAA,IACX,UAAS,EAAoB,GAAA,kBAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,gBAAJ,IAAmB,GAAA,EAAA,GAAA,QAA6B,MAApE,IAAyE,GAAA,EAAA,GAAA,QAAA;AAAA,IAClF;AAAA,GAAA,EACI,IAAI,SAAY,GAAA;AAAA,IAClB,WAAW,GAAI,CAAA;AAAA,GACjB,GAAI,EARC,CAAA,EAAA;AAAA,IASL,YAAc,EAAA,GAAA;AAAA,IACd,MAAA,EAAQ,0BAA2B,CAAA,GAAA,CAAI,GAAG;AAAA,GAC5C,CAAA;AACF;AAGgB,SAAA,cAAA,CAAe,MAAyB,EAAA,IAAA,EAAc,OAAyB,EAAA;AAC7F,EAAA,QAAQ,MAAQ;AAAA,IACd,KAAK,WAAA;AACH,MAAA,OAAO,SAAI,IAAI,CAAA,gBAAA,CAAA;AAAA,IACjB,KAAK,aAAA;AACH,MAAA,OAAO,SAAI,IAAI,CAAA,wBAAA,CAAA;AAAA,IACjB,KAAK,WAAA;AACH,MAAA,OAAO,SAAI,IAAI,CAAA,qBAAA,CAAA;AAAA,IACjB;AACE,MAAA,OAAO,CAAI,MAAA,EAAA,IAAI,CAAa,eAAA,EAAA,OAAO,GAAG,IAAK,EAAA;AAAA;AAEjD;AAGO,SAAS,wBAAwB,GAAuB,EAAA;AA1D/D,EAAA,IAAA,EAAA;AA2DE,EAAA,MAAM,GAAM,GAAA,MAAA,CAAA,CAAQ,EAET,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAA,OAAA,KAFS,YAEE,EAAE,CAAA;AACxB,EAAO,OAAA,oEAAA,CAAqE,KAAK,GAAG,CAAA;AACtF"}
|