@adminide-stack/yantra-mobile 12.0.137 → 12.0.139-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.
Files changed (96) hide show
  1. package/lib/components/CustomDrawer.js +17 -1
  2. package/lib/components/CustomDrawer.js.map +1 -1
  3. package/lib/compute.js +106 -1
  4. package/lib/compute.js.map +1 -1
  5. package/lib/config/env-config.js +12 -0
  6. package/lib/config/env-config.js.map +1 -1
  7. package/lib/features/chat/ChatTranscript.js +2 -2
  8. package/lib/features/chat/ChatTranscript.js.map +1 -1
  9. package/lib/features/chat/surfaceNotes.js +4 -0
  10. package/lib/features/chat/surfaceNotes.js.map +1 -0
  11. package/lib/features/devices/readings.js.map +1 -1
  12. package/lib/features/devices/session.js +2 -22
  13. package/lib/features/devices/session.js.map +1 -1
  14. package/lib/features/dictate/backgroundRecording.js.map +1 -1
  15. package/lib/features/dictate/useDictationRecorder.js +42 -1
  16. package/lib/features/dictate/useDictationRecorder.js.map +1 -1
  17. package/lib/features/home/useHomeWeather.js +85 -0
  18. package/lib/features/home/useHomeWeather.js.map +1 -0
  19. package/lib/features/home/weather.js +139 -0
  20. package/lib/features/home/weather.js.map +1 -0
  21. package/lib/features/notion/NotionPageView.js +819 -0
  22. package/lib/features/notion/NotionPageView.js.map +1 -0
  23. package/lib/features/notion/NotionSheets.js +452 -0
  24. package/lib/features/notion/NotionSheets.js.map +1 -0
  25. package/lib/features/notion/NotionTrashSheet.js +415 -0
  26. package/lib/features/notion/NotionTrashSheet.js.map +1 -0
  27. package/lib/features/notion/NotionWorkspaceView.js +837 -0
  28. package/lib/features/notion/NotionWorkspaceView.js.map +1 -0
  29. package/lib/features/notion/notionBlocks.js +203 -0
  30. package/lib/features/notion/notionBlocks.js.map +1 -0
  31. package/lib/features/notion/notionDocuments.js +182 -0
  32. package/lib/features/notion/notionDocuments.js.map +1 -0
  33. package/lib/features/notion/notionEditorModel.js +180 -0
  34. package/lib/features/notion/notionEditorModel.js.map +1 -0
  35. package/lib/features/notion/notionTemplates.js +406 -0
  36. package/lib/features/notion/notionTemplates.js.map +1 -0
  37. package/lib/features/notion/notionTheme.js +34 -0
  38. package/lib/features/notion/notionTheme.js.map +1 -0
  39. package/lib/features/notion/notionTrash.js +100 -0
  40. package/lib/features/notion/notionTrash.js.map +1 -0
  41. package/lib/features/notion/notionUi.js +310 -0
  42. package/lib/features/notion/notionUi.js.map +1 -0
  43. package/lib/features/notion/useNotionWorkspace.js +181 -0
  44. package/lib/features/notion/useNotionWorkspace.js.map +1 -0
  45. package/lib/features/webbuilder/buildFragments.js +15 -9
  46. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  47. package/lib/features/webbuilder/buildJob.js +3 -3
  48. package/lib/features/webbuilder/buildJob.js.map +1 -1
  49. package/lib/features/webbuilder/publicSandboxDomain.js +5 -0
  50. package/lib/features/webbuilder/publicSandboxDomain.js.map +1 -0
  51. package/lib/features/webbuilder/sandboxPublicHost.js +74 -0
  52. package/lib/features/webbuilder/sandboxPublicHost.js.map +1 -0
  53. package/lib/features/webbuilder/siteAddress.js +2 -1
  54. package/lib/features/webbuilder/siteAddress.js.map +1 -1
  55. package/lib/features/webbuilder/webbuilderPrompts.js +3 -2
  56. package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
  57. package/lib/features/webbuilder/workflow.js +2 -2
  58. package/lib/features/webbuilder/workflow.js.map +1 -1
  59. package/lib/hooks/useChatApi.js +15 -3
  60. package/lib/hooks/useChatApi.js.map +1 -1
  61. package/lib/hooks/usePrerequisiteIds.js +15 -2
  62. package/lib/hooks/usePrerequisiteIds.js.map +1 -1
  63. package/lib/routes.json +107 -0
  64. package/lib/screens/Devices/index.js +3 -205
  65. package/lib/screens/Devices/index.js.map +1 -1
  66. package/lib/screens/Home/HomeScreen.js +20 -5
  67. package/lib/screens/Home/HomeScreen.js.map +1 -1
  68. package/lib/screens/Home/components/HomeHero.js +117 -0
  69. package/lib/screens/Home/components/HomeHero.js.map +1 -0
  70. package/lib/screens/Home/components/HomeSuggestions.js +108 -85
  71. package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
  72. package/lib/screens/Home/components/HomeWash.js +44 -0
  73. package/lib/screens/Home/components/HomeWash.js.map +1 -0
  74. package/lib/screens/Home/components/homeCatalog.js +125 -0
  75. package/lib/screens/Home/components/homeCatalog.js.map +1 -0
  76. package/lib/screens/Notion/index.js +18 -0
  77. package/lib/screens/Notion/index.js.map +1 -0
  78. package/lib/screens/NotionPage/index.js +19 -0
  79. package/lib/screens/NotionPage/index.js.map +1 -0
  80. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +2 -2
  81. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
  82. package/lib/screens/WebBuilderNative/useRestoredSandboxes.js +16 -8
  83. package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
  84. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js +6 -5
  85. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js.map +1 -1
  86. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +5 -4
  87. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  88. package/lib/screens/WebBuilderNative/webbuilderTransport.js +4 -3
  89. package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
  90. package/lib/services/savedWorkspace.js +44 -0
  91. package/lib/services/savedWorkspace.js.map +1 -0
  92. package/lib/theme/mobileTokens.js +1 -0
  93. package/lib/theme/mobileTokens.js.map +1 -1
  94. package/package.json +4 -4
  95. package/lib/features/devices/bodyComposition.js +0 -116
  96. package/lib/features/devices/bodyComposition.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotionSheets.js","sources":["../../../src/features/notion/NotionSheets.tsx"],"sourcesContent":["/**\n * The web Notion sidebar's screens as native page sheets: Inbox, Meetings,\n * All pages, Templates and Trash. Each mirrors its web container\n * (forms-stack notion-api/browser/src/containers) on the same GraphQL.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n FlatList,\n Pressable,\n RefreshControl,\n ScrollView,\n SectionList,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport {\n NATIVE_NOTION_CHILDREN,\n NATIVE_NOTION_INBOX,\n NATIVE_NOTION_MARK_INBOX_READ,\n NATIVE_NOTION_PAGE_TREE,\n NATIVE_NOTION_RESTORE_BLOCK,\n NATIVE_NOTION_TRASH,\n} from './notionDocuments';\nimport {\n MEETING_STATUS_LABEL,\n editedLabel,\n formatMeetingWhen,\n groupMeetings,\n pageTitle,\n type MeetingRow,\n type MeetingStatus,\n type NotionBlock,\n type NotionBlockTree,\n} from './notionBlocks';\nimport {\n BUILT_IN_TEMPLATES,\n TEMPLATE_CATEGORIES,\n filterTemplates,\n templateRootFromTree,\n userTemplateEntry,\n type PageTemplate,\n} from './notionTemplates';\nimport type { NotionPalette } from './notionTheme';\nimport { EmptyState, ListRow, PageRow, Pill, SectionHeader, ui } from './notionUi';\nimport type { NotionWorkspaceState } from './useNotionWorkspace';\n\ntype Palette = NotionPalette;\n\nfunction Loading({ palette }: { palette: Palette }) {\n return (\n <View style={styles.loading}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n );\n}\n\n/** Rows rendered as one rounded group inside a FlatList. */\nfunction groupedItemStyle(palette: Palette, index: number, count: number) {\n return [\n { backgroundColor: palette.card },\n index === 0 && styles.groupTop,\n index === count - 1 && styles.groupBottom,\n ];\n}\n\nfunction SearchField({\n palette,\n value,\n onChange,\n placeholder,\n}: {\n palette: Palette;\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n}) {\n return (\n <View style={[styles.searchField, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"search\" size={17} color={palette.textMuted} />\n <TextInput\n value={value}\n onChangeText={onChange}\n placeholder={placeholder}\n placeholderTextColor={palette.textMuted}\n autoCorrect={false}\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: palette.text }]}\n />\n </View>\n );\n}\n\nfunction Chips<T extends string>({\n palette,\n options,\n value,\n onChange,\n}: {\n palette: Palette;\n options: Array<{ id: T; label: string }>;\n value: T;\n onChange: (v: T) => void;\n}) {\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.chips}>\n {options.map((o) => {\n const selected = o.id === value;\n return (\n <Pressable\n key={o.id}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected }}\n onPress={() => onChange(o.id)}\n style={[styles.chip, { backgroundColor: selected ? palette.text : palette.fill }]}\n >\n <Text style={[styles.chipLabel, { color: selected ? palette.card : palette.text }]}>\n {o.label}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\n// ============================================================================\n// INBOX\n// ============================================================================\n\ninterface InboxItem {\n id: string;\n kind: string;\n pageId?: string | null;\n blockId: string;\n text: string;\n createdAt: string;\n dueAt?: string | null;\n showAt: string;\n readAt?: string | null;\n}\n\nconst INBOX_KIND: Record<string, { icon: React.ComponentProps<typeof Ionicons>['name']; label: string }> = {\n mention: { icon: 'at', label: 'Mentioned you' },\n reminder: { icon: 'alarm-outline', label: 'Reminder' },\n reply: { icon: 'return-down-forward', label: 'Replied' },\n comment: { icon: 'chatbubble-outline', label: 'Commented' },\n};\n\nexport function InboxSheet({ palette, onOpenPage }: { palette: Palette; onOpenPage: (id: string) => void }) {\n const client = useApolloClient();\n const { data, loading, error, refetch } = useQuery<{ notesInbox?: InboxItem[] | null }>(NATIVE_NOTION_INBOX, {\n variables: { limit: 50 },\n fetchPolicy: 'network-only',\n });\n const items = data?.notesInbox ?? [];\n const unread = items.filter((i) => !i.readAt).length;\n\n const markRead = useCallback(\n async (opts: { ids?: string[]; all?: boolean }) => {\n try {\n await client.mutate({ mutation: NATIVE_NOTION_MARK_INBOX_READ, variables: opts });\n await Promise.all([refetch(), client.refetchQueries({ include: ['NativeNotionInboxUnread'] })]);\n } catch {\n // Read state is cosmetic; the next refresh shows the truth.\n }\n },\n [client, refetch],\n );\n\n if (loading && !data) return <Loading palette={palette} />;\n return (\n <FlatList\n data={items}\n keyExtractor={(i) => i.id}\n contentContainerStyle={styles.content}\n refreshControl={<RefreshControl refreshing={false} onRefresh={() => refetch()} />}\n ListHeaderComponent={\n unread ? (\n <View style={styles.inboxHeader}>\n <Text style={[styles.note, { color: palette.textMuted }]}>{`${unread} unread`}</Text>\n <Pressable accessibilityRole=\"button\" onPress={() => markRead({ all: true })} hitSlop={8}>\n <Text style={[styles.link, { color: palette.primary }]}>Mark all read</Text>\n </Pressable>\n </View>\n ) : null\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon={error ? 'cloud-offline-outline' : 'notifications-outline'}\n title={error ? \"Couldn't load your inbox\" : \"You're all caught up\"}\n text={error ? 'Pull down to try again.' : 'Mentions of you and your @date reminders show up here.'}\n />\n }\n renderItem={({ item, index }) => {\n const kind = INBOX_KIND[item.kind] ?? INBOX_KIND.mention;\n const when = editedLabel(item.dueAt ?? item.showAt ?? item.createdAt).replace('Edited ', '');\n return (\n <View style={groupedItemStyle(palette, index, items.length)}>\n <ListRow\n palette={palette}\n icon={kind.icon}\n iconColor={item.readAt ? palette.textMuted : palette.primary}\n iconBg={item.readAt ? palette.fill : palette.primarySoft}\n title={item.text || kind.label}\n subtitle={`${kind.label}${when ? ` · ${when}` : ''}`}\n divider={index < items.length - 1}\n onPress={() => {\n if (!item.readAt) markRead({ ids: [item.id] });\n onOpenPage(item.pageId || item.blockId);\n }}\n trailing={\n item.readAt ? undefined : (\n <View style={[styles.unreadDot, { backgroundColor: palette.primary }]} />\n )\n }\n />\n </View>\n );\n }}\n />\n );\n}\n\n// ============================================================================\n// MEETINGS\n// ============================================================================\n\nconst STATUS_COLORS: Record<MeetingStatus, { fg: string; bg: string }> = {\n scheduled: { fg: '#0369a1', bg: 'rgba(14,165,233,0.12)' },\n live: { fg: '#e11d48', bg: 'rgba(244,63,94,0.14)' },\n ended: { fg: '#78716c', bg: 'rgba(120,113,108,0.12)' },\n};\n\nexport function MeetingRowView({\n row,\n palette,\n onPress,\n divider,\n}: {\n row: MeetingRow;\n palette: Palette;\n onPress: () => void;\n divider?: boolean;\n}) {\n const status = STATUS_COLORS[row.status];\n const who = row.attendees.length ? ` · ${row.attendees.join(', ')}` : '';\n return (\n <ListRow\n palette={palette}\n emoji={row.icon}\n icon=\"calendar-outline\"\n title={row.title}\n subtitle={`${formatMeetingWhen(row.startsAt)}${who}`}\n onPress={onPress}\n divider={divider}\n trailing={<Pill label={MEETING_STATUS_LABEL[row.status]} color={status.fg} bg={status.bg} />}\n />\n );\n}\n\nexport function MeetingsSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const [creating, setCreating] = useState(false);\n const sections = useMemo(() => {\n const g = groupMeetings(notion.meetings);\n return [\n { title: 'Today', data: g.today },\n { title: 'Upcoming', data: g.upcoming },\n { title: 'Past', data: g.past },\n ].filter((s) => s.data.length);\n }, [notion.meetings]);\n\n const newMeeting = async () => {\n setCreating(true);\n try {\n const created = await notion.createMeeting();\n if (created?.id) onOpenPage(created.id);\n } catch (err) {\n Alert.alert(\"Couldn't create the meeting\", err instanceof Error ? err.message : undefined);\n } finally {\n setCreating(false);\n }\n };\n\n if (!sections.length) {\n return (\n <ScrollView contentContainerStyle={styles.content}>\n <EmptyState\n palette={palette}\n icon=\"calendar-outline\"\n title=\"No meetings yet\"\n text=\"A meeting page holds the agenda, attendees and AI meeting notes.\"\n action={{ label: 'New meeting', onPress: newMeeting, busy: creating }}\n />\n </ScrollView>\n );\n }\n return (\n <SectionList\n sections={sections}\n keyExtractor={(r) => r.id}\n contentContainerStyle={styles.content}\n stickySectionHeadersEnabled={false}\n ListHeaderComponent={\n <Pressable\n accessibilityRole=\"button\"\n onPress={newMeeting}\n disabled={creating}\n style={({ pressed }) => [\n styles.wideButton,\n { backgroundColor: palette.primarySoft },\n pressed && ui.pressedScale,\n ]}\n >\n {creating ? (\n <ActivityIndicator size=\"small\" color={palette.primary} />\n ) : (\n <>\n <Ionicons name=\"add\" size={18} color={palette.primary} />\n <Text style={[styles.wideButtonLabel, { color: palette.primary }]}>New meeting</Text>\n </>\n )}\n </Pressable>\n }\n renderSectionHeader={({ section }) => (\n <SectionHeader label={section.title} count={section.data.length} palette={palette} />\n )}\n renderItem={({ item, index, section }) => (\n <View style={groupedItemStyle(palette, index, section.data.length)}>\n <MeetingRowView\n row={item}\n palette={palette}\n onPress={() => onOpenPage(item.id)}\n divider={index < section.data.length - 1}\n />\n </View>\n )}\n />\n );\n}\n\n// ============================================================================\n// ALL PAGES\n// ============================================================================\n\ntype PageSort = 'edited' | 'title';\n\nexport function AllPagesSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const [filter, setFilter] = useState('');\n const [sort, setSort] = useState<PageSort>('edited');\n const rows = useMemo(() => {\n const q = filter.trim().toLowerCase();\n const list = notion.pages.filter((p) => !q || pageTitle(p).toLowerCase().includes(q));\n return sort === 'title' ? [...list].sort((a, b) => pageTitle(a).localeCompare(pageTitle(b))) : list;\n }, [filter, notion.pages, sort]);\n\n return (\n <FlatList\n data={rows}\n keyExtractor={(p) => p.id}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={styles.content}\n ListHeaderComponent={\n <View style={styles.toolbar}>\n <SearchField palette={palette} value={filter} onChange={setFilter} placeholder=\"Filter by title\" />\n <Chips<PageSort>\n palette={palette}\n options={[\n { id: 'edited', label: 'Last edited' },\n { id: 'title', label: 'Title A–Z' },\n ]}\n value={sort}\n onChange={setSort}\n />\n </View>\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon=\"documents-outline\"\n title={filter.trim() ? 'No matching pages' : 'No pages yet'}\n text={filter.trim() ? 'Try a different title.' : 'Pages you create show up here.'}\n />\n }\n renderItem={({ item, index }) => (\n <View style={groupedItemStyle(palette, index, rows.length)}>\n <PageRow\n page={item}\n palette={palette}\n onPress={() => onOpenPage(item.id)}\n divider={index < rows.length - 1}\n />\n </View>\n )}\n />\n );\n}\n\n// ============================================================================\n// TEMPLATES\n// ============================================================================\n\ntype TemplateCategoryId = (typeof TEMPLATE_CATEGORIES)[number]['id'];\n\nexport function TemplatesSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const client = useApolloClient();\n const [category, setCategory] = useState<TemplateCategoryId>('all');\n const [query, setQuery] = useState('');\n const [using, setUsing] = useState<string | null>(null);\n\n // \"My templates\": pages saved under the workspace's hidden template library page.\n const libraryQuery = useQuery<{ getBlockChildren?: { results?: NotionBlock[] | null } | null }>(\n NATIVE_NOTION_CHILDREN,\n {\n variables: { blockId: notion.templateLibraryId ?? '', pageSize: 100 },\n skip: !notion.templateLibraryId,\n fetchPolicy: 'cache-and-network',\n },\n );\n const mine = useMemo(\n () =>\n (libraryQuery.data?.getBlockChildren?.results ?? [])\n .filter((b) => !b.inTrash && (b.type === 'page' || b.type === 'database'))\n .map(userTemplateEntry),\n [libraryQuery.data],\n );\n\n const all = useMemo(() => [...BUILT_IN_TEMPLATES, ...mine], [mine]);\n const shown = useMemo(() => filterTemplates(all, category, query), [all, category, query]);\n const sections = useMemo(() => {\n if (category !== 'all') return [{ title: '', data: shown }];\n return TEMPLATE_CATEGORIES.filter((c) => c.id !== 'all')\n .map((c) => ({ title: c.label, data: shown.filter((t) => t.category === c.id) }))\n .filter((s) => s.data.length);\n }, [category, shown]);\n\n const use = async (template: PageTemplate) => {\n if (!notion.workspace) {\n Alert.alert('Create a workspace first', 'Templates create pages inside a workspace.');\n return;\n }\n setUsing(template.id);\n try {\n let root = template.root;\n if (template.sourceBlockId) {\n const res = await client.query<{ getBlockTree?: NotionBlockTree | null }>({\n query: NATIVE_NOTION_PAGE_TREE,\n variables: { input: { blockId: template.sourceBlockId, includeChildren: true, maxDepth: 5 } },\n fetchPolicy: 'network-only',\n });\n const tree = res.data?.getBlockTree;\n if (!tree) throw new Error('Template not found');\n root = templateRootFromTree(tree as Parameters<typeof templateRootFromTree>[0]);\n }\n const created = await notion.createFromTemplate({ root });\n if (created?.failedRows) {\n Alert.alert('Some rows were not added', `${created.failedRows} database row(s) could not be created.`);\n }\n if (created?.id) onOpenPage(created.id);\n } catch (err) {\n Alert.alert(\"Couldn't use this template\", err instanceof Error ? err.message : undefined);\n } finally {\n setUsing(null);\n }\n };\n\n return (\n <SectionList\n sections={sections}\n keyExtractor={(t) => t.id}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={styles.content}\n stickySectionHeadersEnabled={false}\n ListHeaderComponent={\n <View style={styles.toolbar}>\n <Text style={[styles.note, { color: palette.textMuted }]}>\n Start a page from a template, or save any page as your own from the web.\n </Text>\n <SearchField palette={palette} value={query} onChange={setQuery} placeholder=\"Search templates\" />\n <Chips<TemplateCategoryId>\n palette={palette}\n options={TEMPLATE_CATEGORIES}\n value={category}\n onChange={setCategory}\n />\n </View>\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon=\"albums-outline\"\n title={category === 'mine' ? 'No saved templates' : 'No matching templates'}\n text={\n category === 'mine'\n ? 'Save a page as a template from its ••• menu on the web.'\n : 'Try another search or category.'\n }\n />\n }\n renderSectionHeader={({ section }) =>\n section.title ? <SectionHeader label={section.title} palette={palette} /> : null\n }\n renderItem={({ item }) => (\n <TemplateCard\n template={item}\n palette={palette}\n busy={using === item.id}\n disabled={Boolean(using)}\n onUse={() => use(item)}\n />\n )}\n />\n );\n}\n\nfunction TemplateCard({\n template,\n palette,\n busy,\n disabled,\n onUse,\n}: {\n template: PageTemplate;\n palette: Palette;\n busy: boolean;\n disabled: boolean;\n onUse: () => void;\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Use template ${template.name}`}\n onPress={onUse}\n disabled={disabled}\n style={({ pressed }) => [\n styles.templateCard,\n { backgroundColor: pressed ? palette.pressed : palette.card },\n ui.cardShadow,\n ]}\n >\n <View style={[styles.templateIcon, { backgroundColor: palette.fill }]}>\n <Text style={styles.templateEmoji}>{template.icon}</Text>\n </View>\n <View style={ui.flex}>\n <Text numberOfLines={1} style={[styles.templateName, { color: palette.text }]}>\n {template.name}\n </Text>\n <Text numberOfLines={2} style={[styles.templateDesc, { color: palette.textMuted }]}>\n {template.description}\n </Text>\n </View>\n <View style={[styles.useButton, { backgroundColor: palette.primarySoft }]}>\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.primary} />\n ) : (\n <Text style={[styles.useLabel, { color: palette.primary }]}>Use</Text>\n )}\n </View>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n loading: { paddingVertical: 48, alignItems: 'center' },\n content: { padding: 16, paddingBottom: 48 },\n groupTop: { borderTopLeftRadius: 16, borderTopRightRadius: 16 },\n groupBottom: { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 },\n note: { fontSize: 14, lineHeight: 20 },\n link: { fontSize: 15, fontWeight: '600' },\n toolbar: { gap: 12, marginBottom: 12 },\n inboxHeader: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: 12 },\n unreadDot: { width: 9, height: 9, borderRadius: 5 },\n searchField: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n height: 40,\n paddingHorizontal: 12,\n borderRadius: 12,\n },\n searchInput: { flex: 1, fontSize: 16, paddingVertical: 0 },\n chips: { gap: 8 },\n chip: { paddingHorizontal: 14, paddingVertical: 8, borderRadius: 999 },\n chipLabel: { fontSize: 14, fontWeight: '600' },\n wideButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n minHeight: 48,\n borderRadius: 14,\n },\n wideButtonLabel: { fontSize: 16, fontWeight: '700' },\n templateCard: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n padding: 14,\n borderRadius: 16,\n marginBottom: 10,\n },\n templateIcon: { width: 44, height: 44, borderRadius: 12, alignItems: 'center', justifyContent: 'center' },\n templateEmoji: { fontSize: 22 },\n templateName: { fontSize: 16, fontWeight: '700' },\n templateDesc: { fontSize: 13, lineHeight: 18, marginTop: 2 },\n useButton: {\n minWidth: 64,\n paddingHorizontal: 12,\n paddingVertical: 7,\n borderRadius: 999,\n alignItems: 'center',\n },\n useLabel: { fontSize: 13, fontWeight: '700' },\n});\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,415 @@
1
+ import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useState,useMemo,useCallback}from'react';import {Alert,View,StyleSheet,ActivityIndicator,SectionList,Text,TextInput,Pressable,RefreshControl}from'react-native';import {Ionicons}from'@expo/vector-icons';import {useApolloClient,useQuery}from'@apollo/client/index.js';import {NATIVE_NOTION_TRASH,NATIVE_NOTION_RESTORE_BLOCK,NATIVE_NOTION_PERMANENTLY_DELETE}from'./notionDocuments.js';import {pageTitle,editedLabel}from'./notionBlocks.js';import {ui,EmptyState}from'./notionUi.js';import {trashItemsOf,filterTrash,groupTrash,pluralize}from'./notionTrash.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 typeLabel = (type) => (type || "block").replace(/_/g, " ").replace(/^\w/, (c) => c.toUpperCase());
21
+ function TrashSheet({
22
+ palette,
23
+ notion,
24
+ onOpenPage
25
+ }) {
26
+ var _a, _b, _c;
27
+ const client = useApolloClient();
28
+ const workspaceId = (_b = (_a = notion.workspace) == null ? void 0 : _a.id) != null ? _b : null;
29
+ const {
30
+ data,
31
+ loading,
32
+ error,
33
+ refetch
34
+ } = useQuery(NATIVE_NOTION_TRASH, {
35
+ variables: {
36
+ workspaceId: workspaceId != null ? workspaceId : void 0
37
+ },
38
+ fetchPolicy: "network-only"
39
+ });
40
+ const [query, setQuery] = useState("");
41
+ const [selecting, setSelecting] = useState(false);
42
+ const [selected, setSelected] = useState(/* @__PURE__ */ new Set());
43
+ const [busy, setBusy] = useState(/* @__PURE__ */ new Set());
44
+ const [hidden, setHidden] = useState(/* @__PURE__ */ new Set());
45
+ const items = useMemo(() => trashItemsOf(data == null ? void 0 : data.listTrash).filter((i) => !hidden.has(i.id)), [data, hidden]);
46
+ if (__DEV__) {
47
+ const odd = ((_c = data == null ? void 0 : data.listTrash) != null ? _c : []).find((b) => !(b == null ? void 0 : b.id) || !(b == null ? void 0 : b.type));
48
+ if (odd) console.warn("[NotionTrash] incomplete listTrash record", JSON.stringify(odd));
49
+ }
50
+ const shown = useMemo(() => filterTrash(items, query), [items, query]);
51
+ const filtering = Boolean(query.trim());
52
+ const pageTitles = useMemo(() => {
53
+ const out = {};
54
+ notion.pages.forEach((p) => {
55
+ out[p.id] = pageTitle(p);
56
+ });
57
+ return out;
58
+ }, [notion.pages]);
59
+ const groups = useMemo(() => groupTrash(shown, pageTitles), [shown, pageTitles]);
60
+ const sections = useMemo(() => groups.map((g) => ({
61
+ group: g,
62
+ data: [...g.page ? [{
63
+ item: g.page,
64
+ depth: 0,
65
+ isPage: true
66
+ }] : [], ...g.blocks.map((b) => __spreadProps(__spreadValues({}, b), {
67
+ depth: b.depth + (g.page ? 1 : 0),
68
+ isPage: false
69
+ }))]
70
+ })), [groups]);
71
+ const runMany = useCallback(async (ids, kind) => {
72
+ if (!ids.length) return;
73
+ setHidden((h) => /* @__PURE__ */ new Set([...h, ...ids]));
74
+ setBusy((b) => /* @__PURE__ */ new Set([...b, ...ids]));
75
+ setSelected(/* @__PURE__ */ new Set());
76
+ const mutation = kind === "restore" ? NATIVE_NOTION_RESTORE_BLOCK : NATIVE_NOTION_PERMANENTLY_DELETE;
77
+ const results = await Promise.allSettled(ids.map((blockId) => client.mutate({
78
+ mutation,
79
+ variables: {
80
+ blockId
81
+ },
82
+ errorPolicy: "none"
83
+ })));
84
+ const failed = ids.filter((_, i) => results[i].status === "rejected");
85
+ setBusy((b) => new Set([...b].filter((id) => !ids.includes(id))));
86
+ setHidden((h) => new Set([...h].filter((id) => !failed.includes(id))));
87
+ await refetch().catch(() => void 0);
88
+ if (kind === "restore") client.refetchQueries({
89
+ include: ["NativeNotionChildren"]
90
+ }).catch(() => void 0);
91
+ setHidden((h) => new Set([...h].filter((id) => !ids.includes(id) || failed.includes(id))));
92
+ if (failed.length) {
93
+ const verb = kind === "restore" ? "Restored" : "Deleted";
94
+ Alert.alert(`${verb} ${ids.length - failed.length} of ${ids.length}`, `${pluralize(failed.length, "item")} failed.`, [{
95
+ text: "Close",
96
+ style: "cancel"
97
+ }, {
98
+ text: "Retry",
99
+ onPress: () => runMany(failed, kind)
100
+ }]);
101
+ }
102
+ }, [client, refetch]);
103
+ const confirmDelete = useCallback((ids, what) => {
104
+ if (!ids.length) return;
105
+ Alert.alert("Delete forever?", `${what != null ? what : pluralize(ids.length, "item")} will be deleted permanently. This can't be undone.`, [{
106
+ text: "Cancel",
107
+ style: "cancel"
108
+ }, {
109
+ text: "Delete forever",
110
+ style: "destructive",
111
+ onPress: () => runMany(ids, "delete")
112
+ }]);
113
+ }, [runMany]);
114
+ const toggle = (id) => setSelected((s) => {
115
+ const next = new Set(s);
116
+ if (next.has(id)) next.delete(id);
117
+ else next.add(id);
118
+ return next;
119
+ });
120
+ const allShownSelected = shown.length > 0 && shown.every((i) => selected.has(i.id));
121
+ if (loading && !data) {
122
+ return /* @__PURE__ */ jsx(View, { style: styles.loading, children: /* @__PURE__ */ jsx(ActivityIndicator, { color: palette.textMuted }) });
123
+ }
124
+ return /* @__PURE__ */ jsxs(View, { style: ui.flex, children: [
125
+ /* @__PURE__ */ jsx(SectionList, { sections, keyExtractor: (r) => r.item.id, keyboardShouldPersistTaps: "handled", stickySectionHeadersEnabled: false, contentContainerStyle: styles.content, refreshControl: /* @__PURE__ */ jsx(RefreshControl, { refreshing: false, onRefresh: () => refetch() }), ListHeaderComponent: items.length ? /* @__PURE__ */ jsxs(View, { style: styles.toolbar, children: [
126
+ /* @__PURE__ */ jsx(Text, { style: [styles.note, {
127
+ color: palette.textMuted
128
+ }], children: "Restore deleted pages and blocks, or delete them permanently." }),
129
+ /* @__PURE__ */ jsxs(View, { style: [styles.searchField, {
130
+ backgroundColor: palette.fill
131
+ }], children: [
132
+ /* @__PURE__ */ jsx(Ionicons, { name: "search", size: 17, color: palette.textMuted }),
133
+ /* @__PURE__ */ jsx(TextInput, { value: query, onChangeText: setQuery, placeholder: "Search trash\u2026", placeholderTextColor: palette.textMuted, autoCorrect: false, clearButtonMode: "while-editing", style: [styles.searchInput, {
134
+ color: palette.text
135
+ }] })
136
+ ] }),
137
+ /* @__PURE__ */ jsxs(View, { style: styles.countRow, children: [
138
+ /* @__PURE__ */ jsx(Text, { style: [styles.count, {
139
+ color: palette.textMuted
140
+ }], children: filtering ? `${shown.length} of ${pluralize(items.length, "item")}` : pluralize(items.length, "item") }),
141
+ /* @__PURE__ */ jsx(View, { style: ui.flex }),
142
+ selecting ? /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => setSelected(allShownSelected ? /* @__PURE__ */ new Set() : new Set(shown.map((i) => i.id))), hitSlop: 8, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
143
+ color: palette.primary
144
+ }], children: allShownSelected ? "Deselect all" : "Select all" }) }) : shown.length ? /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => confirmDelete(shown.map((i) => i.id), filtering ? `The ${pluralize(shown.length, "item")} shown` : `Everything in Trash (${pluralize(shown.length, "item")})`), hitSlop: 8, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
145
+ color: palette.danger
146
+ }], children: filtering ? `Delete ${shown.length} shown` : "Empty trash" }) }) : null,
147
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => {
148
+ setSelecting((v) => !v);
149
+ setSelected(/* @__PURE__ */ new Set());
150
+ }, hitSlop: 8, style: styles.selectToggle, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
151
+ color: palette.primary
152
+ }], children: selecting ? "Cancel" : "Select" }) })
153
+ ] })
154
+ ] }) : null, ListEmptyComponent: /* @__PURE__ */ jsx(EmptyState, { palette, icon: error ? "cloud-offline-outline" : "trash-outline", title: error ? "Couldn't load the trash" : filtering ? "Nothing matches" : "Trash is empty", text: error ? "Pull down to try again." : filtering ? "Try a different search." : "Pages and blocks you delete stay here until you remove them for good." }), renderSectionHeader: ({
155
+ section
156
+ }) => /* @__PURE__ */ jsx(GroupHeader, { group: section.group, palette, selecting, selected: section.group.ids.every((id) => selected.has(id)), onToggle: () => setSelected((s) => {
157
+ const next = new Set(s);
158
+ const all = section.group.ids.every((id) => next.has(id));
159
+ section.group.ids.forEach((id) => all ? next.delete(id) : next.add(id));
160
+ return next;
161
+ }), onRestoreAll: () => runMany(section.group.ids, "restore"), onDeleteAll: () => confirmDelete(section.group.ids, `\u201C${section.group.label}\u201D and its ${pluralize(section.group.ids.length, "item")}`) }), renderItem: ({
162
+ item: row,
163
+ index,
164
+ section
165
+ }) => /* @__PURE__ */ jsx(View, { style: [{
166
+ backgroundColor: palette.card
167
+ }, index === 0 && styles.groupTop, index === section.data.length - 1 && styles.groupBottom], children: /* @__PURE__ */ jsx(TrashRow, { row, palette, divider: index < section.data.length - 1, selecting, selected: selected.has(row.item.id), busy: busy.has(row.item.id), onToggle: () => toggle(row.item.id), onRestore: () => runMany([row.item.id], "restore"), onDelete: () => confirmDelete([row.item.id], `\u201C${row.item.title || typeLabel(row.item.type)}\u201D`), onOpen: row.isPage ? () => onOpenPage(row.item.id) : void 0 }) }) }),
168
+ selecting && selected.size ? /* @__PURE__ */ jsxs(View, { style: [styles.bulkBar, {
169
+ backgroundColor: palette.card,
170
+ borderTopColor: palette.hairline
171
+ }], children: [
172
+ /* @__PURE__ */ jsx(Text, { style: [styles.bulkCount, {
173
+ color: palette.text
174
+ }], children: `${selected.size} selected` }),
175
+ /* @__PURE__ */ jsx(View, { style: ui.flex }),
176
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => runMany([...selected], "restore"), style: [styles.bulkButton, {
177
+ backgroundColor: palette.primarySoft
178
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.bulkLabel, {
179
+ color: palette.primary
180
+ }], children: "Restore" }) }),
181
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => confirmDelete([...selected]), style: [styles.bulkButton, {
182
+ backgroundColor: palette.dangerSoft
183
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.bulkLabel, {
184
+ color: palette.danger
185
+ }], children: "Delete" }) })
186
+ ] }) : null
187
+ ] });
188
+ }
189
+ function GroupHeader({
190
+ group,
191
+ palette,
192
+ selecting,
193
+ selected,
194
+ onToggle,
195
+ onRestoreAll,
196
+ onDeleteAll
197
+ }) {
198
+ const blockCount = group.blocks.length;
199
+ let detail = "";
200
+ if (group.page) detail = blockCount ? `Page \xB7 ${pluralize(blockCount, "block")}` : "Page";
201
+ else detail = pluralize(blockCount, "block");
202
+ return /* @__PURE__ */ jsxs(View, { style: styles.groupHeader, children: [
203
+ selecting ? /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "checkbox", accessibilityState: {
204
+ checked: selected
205
+ }, onPress: onToggle, hitSlop: 8, children: /* @__PURE__ */ jsx(Ionicons, { name: selected ? "checkbox" : "square-outline", size: 22, color: selected ? palette.primary : palette.textMuted }) }) : null,
206
+ /* @__PURE__ */ jsxs(View, { style: ui.flex, children: [
207
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.groupTitle, {
208
+ color: palette.text
209
+ }], children: group.label }),
210
+ /* @__PURE__ */ jsx(Text, { style: [styles.groupDetail, {
211
+ color: palette.textMuted
212
+ }], children: detail })
213
+ ] }),
214
+ !selecting ? /* @__PURE__ */ jsxs(Fragment, { children: [
215
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onRestoreAll, hitSlop: 6, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
216
+ color: palette.primary
217
+ }], children: "Restore all" }) }),
218
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onDeleteAll, hitSlop: 6, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
219
+ color: palette.danger
220
+ }], children: "Delete all" }) })
221
+ ] }) : null
222
+ ] });
223
+ }
224
+ function TrashRow({
225
+ row,
226
+ palette,
227
+ divider,
228
+ selecting,
229
+ selected,
230
+ busy,
231
+ onToggle,
232
+ onRestore,
233
+ onDelete,
234
+ onOpen
235
+ }) {
236
+ const {
237
+ item,
238
+ depth
239
+ } = row;
240
+ const when = editedLabel(item.deletedTime).replace("Edited", "Deleted");
241
+ const title = item.title || (row.isPage ? "Untitled" : typeLabel(item.type));
242
+ return /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", onPress: selecting ? onToggle : onOpen, disabled: !selecting && !onOpen, style: ({
243
+ pressed
244
+ }) => [styles.row, {
245
+ paddingLeft: 14 + depth * 18
246
+ }, pressed && {
247
+ backgroundColor: palette.pressed
248
+ }], children: [
249
+ selecting ? /* @__PURE__ */ jsx(Ionicons, { name: selected ? "checkbox" : "square-outline", size: 22, color: selected ? palette.primary : palette.textMuted }) : null,
250
+ /* @__PURE__ */ jsx(View, { style: [styles.rowIcon, {
251
+ backgroundColor: palette.fill
252
+ }], children: item.icon ? /* @__PURE__ */ jsx(Text, { style: styles.rowEmoji, children: item.icon }) : /* @__PURE__ */ jsx(Ionicons, { name: row.isPage ? "document-text-outline" : "reorder-two-outline", size: 17, color: palette.textMuted }) }),
253
+ /* @__PURE__ */ jsxs(View, { style: [styles.rowBody, divider && ui.hairline, divider && {
254
+ borderBottomColor: palette.hairline
255
+ }], children: [
256
+ /* @__PURE__ */ jsxs(View, { style: ui.flex, children: [
257
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.rowTitle, {
258
+ color: palette.text
259
+ }], children: title }),
260
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.rowMeta, {
261
+ color: palette.textMuted
262
+ }], children: [row.isPage ? "Page" : typeLabel(item.type), when].filter(Boolean).join(" \xB7 ") })
263
+ ] }),
264
+ busy ? /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color: palette.textMuted }) : null,
265
+ !selecting && !busy ? /* @__PURE__ */ jsxs(Fragment, { children: [
266
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: `Restore ${title}`, onPress: onRestore, hitSlop: 6, style: [styles.pill, {
267
+ backgroundColor: palette.primarySoft
268
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.pillLabel, {
269
+ color: palette.primary
270
+ }], children: "Restore" }) }),
271
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: `Delete ${title} forever`, onPress: onDelete, hitSlop: 6, style: [styles.iconPill, {
272
+ backgroundColor: palette.dangerSoft
273
+ }], children: /* @__PURE__ */ jsx(Ionicons, { name: "trash-outline", size: 16, color: palette.danger }) })
274
+ ] }) : null
275
+ ] })
276
+ ] });
277
+ }
278
+ const styles = StyleSheet.create({
279
+ loading: {
280
+ paddingVertical: 48,
281
+ alignItems: "center"
282
+ },
283
+ content: {
284
+ padding: 16,
285
+ paddingBottom: 96
286
+ },
287
+ toolbar: {
288
+ gap: 12,
289
+ marginBottom: 4
290
+ },
291
+ note: {
292
+ fontSize: 14,
293
+ lineHeight: 20
294
+ },
295
+ searchField: {
296
+ flexDirection: "row",
297
+ alignItems: "center",
298
+ gap: 8,
299
+ height: 40,
300
+ paddingHorizontal: 12,
301
+ borderRadius: 12
302
+ },
303
+ searchInput: {
304
+ flex: 1,
305
+ fontSize: 16,
306
+ paddingVertical: 0
307
+ },
308
+ countRow: {
309
+ flexDirection: "row",
310
+ alignItems: "center",
311
+ gap: 16
312
+ },
313
+ count: {
314
+ fontSize: 14
315
+ },
316
+ link: {
317
+ fontSize: 15,
318
+ fontWeight: "600"
319
+ },
320
+ selectToggle: {
321
+ marginLeft: 4
322
+ },
323
+ groupHeader: {
324
+ flexDirection: "row",
325
+ alignItems: "center",
326
+ gap: 12,
327
+ marginTop: 20,
328
+ marginBottom: 8
329
+ },
330
+ groupTitle: {
331
+ fontSize: 17,
332
+ fontWeight: "700"
333
+ },
334
+ groupDetail: {
335
+ fontSize: 13,
336
+ marginTop: 1
337
+ },
338
+ groupTop: {
339
+ borderTopLeftRadius: 16,
340
+ borderTopRightRadius: 16
341
+ },
342
+ groupBottom: {
343
+ borderBottomLeftRadius: 16,
344
+ borderBottomRightRadius: 16
345
+ },
346
+ row: {
347
+ flexDirection: "row",
348
+ alignItems: "center",
349
+ gap: 10
350
+ },
351
+ rowIcon: {
352
+ width: 34,
353
+ height: 34,
354
+ borderRadius: 10,
355
+ alignItems: "center",
356
+ justifyContent: "center"
357
+ },
358
+ rowEmoji: {
359
+ fontSize: 17
360
+ },
361
+ rowBody: {
362
+ flex: 1,
363
+ flexDirection: "row",
364
+ alignItems: "center",
365
+ gap: 8,
366
+ paddingRight: 12,
367
+ paddingVertical: 12
368
+ },
369
+ rowTitle: {
370
+ fontSize: 15,
371
+ fontWeight: "600"
372
+ },
373
+ rowMeta: {
374
+ fontSize: 12,
375
+ marginTop: 2
376
+ },
377
+ pill: {
378
+ paddingHorizontal: 10,
379
+ paddingVertical: 6,
380
+ borderRadius: 999
381
+ },
382
+ pillLabel: {
383
+ fontSize: 13,
384
+ fontWeight: "700"
385
+ },
386
+ iconPill: {
387
+ width: 32,
388
+ height: 30,
389
+ borderRadius: 999,
390
+ alignItems: "center",
391
+ justifyContent: "center"
392
+ },
393
+ bulkBar: {
394
+ flexDirection: "row",
395
+ alignItems: "center",
396
+ gap: 8,
397
+ paddingHorizontal: 16,
398
+ paddingTop: 10,
399
+ paddingBottom: 28,
400
+ borderTopWidth: StyleSheet.hairlineWidth
401
+ },
402
+ bulkCount: {
403
+ fontSize: 15,
404
+ fontWeight: "600"
405
+ },
406
+ bulkButton: {
407
+ paddingHorizontal: 16,
408
+ paddingVertical: 10,
409
+ borderRadius: 12
410
+ },
411
+ bulkLabel: {
412
+ fontSize: 15,
413
+ fontWeight: "700"
414
+ }
415
+ });export{TrashSheet};//# sourceMappingURL=NotionTrashSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotionTrashSheet.js","sources":["../../../src/features/notion/NotionTrashSheet.tsx"],"sourcesContent":["/**\n * Native Trash - the web TrashView / TrashPage on a phone:\n * - search (\"Search trash…\"), item count, \"Empty trash\" (or \"Delete N shown\" while searching)\n * - one section per page (a trashed page, or the live page a trashed block lived in),\n * with \"Restore all\" / \"Delete all\"\n * - per row: Restore, Delete forever (confirmed)\n * - Select mode: checkboxes + a bar \"N selected · Restore · Delete\" (bulk)\n * Restore never asks (trashing again undoes it); permanent deletes always confirm with the count.\n * Bulk actions report partial failures and offer Retry for exactly the failed ids, like the web toast.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n Pressable,\n RefreshControl,\n SectionList,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport { NATIVE_NOTION_PERMANENTLY_DELETE, NATIVE_NOTION_RESTORE_BLOCK, NATIVE_NOTION_TRASH } from './notionDocuments';\nimport { editedLabel, pageTitle, type NotionBlock } from './notionBlocks';\nimport type { NotionPalette } from './notionTheme';\nimport { EmptyState, ui } from './notionUi';\nimport { filterTrash, groupTrash, pluralize, trashItemsOf, type TrashGroup, type TrashItem } from './notionTrash';\nimport type { NotionWorkspaceState } from './useNotionWorkspace';\n\ntype Palette = NotionPalette;\ntype Row = { item: TrashItem; depth: number; isPage: boolean };\n\nconst typeLabel = (type: string | null | undefined) =>\n (type || 'block').replace(/_/g, ' ').replace(/^\\w/, (c) => c.toUpperCase());\n\nexport function TrashSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const client = useApolloClient();\n const workspaceId = notion.workspace?.id ?? null;\n const { data, loading, error, refetch } = useQuery<{ listTrash?: NotionBlock[] | null }>(NATIVE_NOTION_TRASH, {\n variables: { workspaceId: workspaceId ?? undefined },\n fetchPolicy: 'network-only',\n });\n const [query, setQuery] = useState('');\n const [selecting, setSelecting] = useState(false);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [busy, setBusy] = useState<Set<string>>(new Set());\n /** Removed optimistically while their request runs (put back on failure). */\n const [hidden, setHidden] = useState<Set<string>>(new Set());\n\n const items = useMemo(() => trashItemsOf(data?.listTrash).filter((i) => !hidden.has(i.id)), [data, hidden]);\n if (__DEV__) {\n const odd = (data?.listTrash ?? []).find((b) => !b?.id || !b?.type);\n if (odd) console.warn('[NotionTrash] incomplete listTrash record', JSON.stringify(odd));\n }\n const shown = useMemo(() => filterTrash(items, query), [items, query]);\n const filtering = Boolean(query.trim());\n\n // Live pages name the sections of blocks trashed out of them.\n const pageTitles = useMemo(() => {\n const out: Record<string, string> = {};\n notion.pages.forEach((p) => {\n out[p.id] = pageTitle(p);\n });\n return out;\n }, [notion.pages]);\n const groups = useMemo(() => groupTrash(shown, pageTitles), [shown, pageTitles]);\n const sections = useMemo(\n () =>\n groups.map((g) => ({\n group: g,\n data: [\n ...(g.page ? [{ item: g.page, depth: 0, isPage: true }] : []),\n ...g.blocks.map((b) => ({ ...b, depth: b.depth + (g.page ? 1 : 0), isPage: false })),\n ] as Row[],\n })),\n [groups],\n );\n\n /**\n * Run one mutation per id, hiding them at once; failed ids come back and the\n * summary offers Retry for exactly those (web: \"Deleted 8 of 10 — 2 failed · Retry\").\n */\n const runMany = useCallback(\n async (ids: string[], kind: 'restore' | 'delete') => {\n if (!ids.length) return;\n setHidden((h) => new Set([...h, ...ids]));\n setBusy((b) => new Set([...b, ...ids]));\n setSelected(new Set());\n const mutation = kind === 'restore' ? NATIVE_NOTION_RESTORE_BLOCK : NATIVE_NOTION_PERMANENTLY_DELETE;\n const results = await Promise.allSettled(\n ids.map((blockId) => client.mutate({ mutation, variables: { blockId }, errorPolicy: 'none' })),\n );\n const failed = ids.filter((_, i) => results[i].status === 'rejected');\n setBusy((b) => new Set([...b].filter((id) => !ids.includes(id))));\n setHidden((h) => new Set([...h].filter((id) => !failed.includes(id))));\n await refetch().catch(() => undefined);\n if (kind === 'restore') client.refetchQueries({ include: ['NativeNotionChildren'] }).catch(() => undefined);\n setHidden((h) => new Set([...h].filter((id) => !ids.includes(id) || failed.includes(id))));\n if (failed.length) {\n const verb = kind === 'restore' ? 'Restored' : 'Deleted';\n Alert.alert(\n `${verb} ${ids.length - failed.length} of ${ids.length}`,\n `${pluralize(failed.length, 'item')} failed.`,\n [\n { text: 'Close', style: 'cancel' },\n { text: 'Retry', onPress: () => runMany(failed, kind) },\n ],\n );\n }\n },\n [client, refetch],\n );\n\n const confirmDelete = useCallback(\n (ids: string[], what?: string) => {\n if (!ids.length) return;\n Alert.alert(\n 'Delete forever?',\n `${what ?? pluralize(ids.length, 'item')} will be deleted permanently. This can't be undone.`,\n [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Delete forever', style: 'destructive', onPress: () => runMany(ids, 'delete') },\n ],\n );\n },\n [runMany],\n );\n\n const toggle = (id: string) =>\n setSelected((s) => {\n const next = new Set(s);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n const allShownSelected = shown.length > 0 && shown.every((i) => selected.has(i.id));\n\n if (loading && !data) {\n return (\n <View style={styles.loading}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n );\n }\n\n return (\n <View style={ui.flex}>\n <SectionList\n sections={sections}\n keyExtractor={(r) => r.item.id}\n keyboardShouldPersistTaps=\"handled\"\n stickySectionHeadersEnabled={false}\n contentContainerStyle={styles.content}\n refreshControl={<RefreshControl refreshing={false} onRefresh={() => refetch()} />}\n ListHeaderComponent={\n items.length ? (\n <View style={styles.toolbar}>\n <Text style={[styles.note, { color: palette.textMuted }]}>\n Restore deleted pages and blocks, or delete them permanently.\n </Text>\n <View style={[styles.searchField, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"search\" size={17} color={palette.textMuted} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search trash…\"\n placeholderTextColor={palette.textMuted}\n autoCorrect={false}\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: palette.text }]}\n />\n </View>\n <View style={styles.countRow}>\n <Text style={[styles.count, { color: palette.textMuted }]}>\n {filtering\n ? `${shown.length} of ${pluralize(items.length, 'item')}`\n : pluralize(items.length, 'item')}\n </Text>\n <View style={ui.flex} />\n {selecting ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n setSelected(allShownSelected ? new Set() : new Set(shown.map((i) => i.id)))\n }\n hitSlop={8}\n >\n <Text style={[styles.link, { color: palette.primary }]}>\n {allShownSelected ? 'Deselect all' : 'Select all'}\n </Text>\n </Pressable>\n ) : shown.length ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n confirmDelete(\n shown.map((i) => i.id),\n filtering\n ? `The ${pluralize(shown.length, 'item')} shown`\n : `Everything in Trash (${pluralize(shown.length, 'item')})`,\n )\n }\n hitSlop={8}\n >\n <Text style={[styles.link, { color: palette.danger }]}>\n {filtering ? `Delete ${shown.length} shown` : 'Empty trash'}\n </Text>\n </Pressable>\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n setSelecting((v) => !v);\n setSelected(new Set());\n }}\n hitSlop={8}\n style={styles.selectToggle}\n >\n <Text style={[styles.link, { color: palette.primary }]}>\n {selecting ? 'Cancel' : 'Select'}\n </Text>\n </Pressable>\n </View>\n </View>\n ) : null\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon={error ? 'cloud-offline-outline' : 'trash-outline'}\n title={error ? \"Couldn't load the trash\" : filtering ? 'Nothing matches' : 'Trash is empty'}\n text={\n error\n ? 'Pull down to try again.'\n : filtering\n ? 'Try a different search.'\n : 'Pages and blocks you delete stay here until you remove them for good.'\n }\n />\n }\n renderSectionHeader={({ section }) => (\n <GroupHeader\n group={section.group}\n palette={palette}\n selecting={selecting}\n selected={section.group.ids.every((id) => selected.has(id))}\n onToggle={() =>\n setSelected((s) => {\n const next = new Set(s);\n const all = section.group.ids.every((id) => next.has(id));\n section.group.ids.forEach((id) => (all ? next.delete(id) : next.add(id)));\n return next;\n })\n }\n onRestoreAll={() => runMany(section.group.ids, 'restore')}\n onDeleteAll={() =>\n confirmDelete(\n section.group.ids,\n `“${section.group.label}” and its ${pluralize(section.group.ids.length, 'item')}`,\n )\n }\n />\n )}\n renderItem={({ item: row, index, section }) => (\n <View\n style={[\n { backgroundColor: palette.card },\n index === 0 && styles.groupTop,\n index === section.data.length - 1 && styles.groupBottom,\n ]}\n >\n <TrashRow\n row={row}\n palette={palette}\n divider={index < section.data.length - 1}\n selecting={selecting}\n selected={selected.has(row.item.id)}\n busy={busy.has(row.item.id)}\n onToggle={() => toggle(row.item.id)}\n onRestore={() => runMany([row.item.id], 'restore')}\n onDelete={() =>\n confirmDelete([row.item.id], `“${row.item.title || typeLabel(row.item.type)}”`)\n }\n onOpen={row.isPage ? () => onOpenPage(row.item.id) : undefined}\n />\n </View>\n )}\n />\n {selecting && selected.size ? (\n <View style={[styles.bulkBar, { backgroundColor: palette.card, borderTopColor: palette.hairline }]}>\n <Text style={[styles.bulkCount, { color: palette.text }]}>{`${selected.size} selected`}</Text>\n <View style={ui.flex} />\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => runMany([...selected], 'restore')}\n style={[styles.bulkButton, { backgroundColor: palette.primarySoft }]}\n >\n <Text style={[styles.bulkLabel, { color: palette.primary }]}>Restore</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => confirmDelete([...selected])}\n style={[styles.bulkButton, { backgroundColor: palette.dangerSoft }]}\n >\n <Text style={[styles.bulkLabel, { color: palette.danger }]}>Delete</Text>\n </Pressable>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction GroupHeader({\n group,\n palette,\n selecting,\n selected,\n onToggle,\n onRestoreAll,\n onDeleteAll,\n}: {\n group: TrashGroup;\n palette: Palette;\n selecting: boolean;\n selected: boolean;\n onToggle: () => void;\n onRestoreAll: () => void;\n onDeleteAll: () => void;\n}) {\n const blockCount = group.blocks.length;\n let detail = '';\n if (group.page) detail = blockCount ? `Page · ${pluralize(blockCount, 'block')}` : 'Page';\n else detail = pluralize(blockCount, 'block');\n return (\n <View style={styles.groupHeader}>\n {selecting ? (\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: selected }}\n onPress={onToggle}\n hitSlop={8}\n >\n <Ionicons\n name={selected ? 'checkbox' : 'square-outline'}\n size={22}\n color={selected ? palette.primary : palette.textMuted}\n />\n </Pressable>\n ) : null}\n <View style={ui.flex}>\n <Text numberOfLines={1} style={[styles.groupTitle, { color: palette.text }]}>\n {group.label}\n </Text>\n <Text style={[styles.groupDetail, { color: palette.textMuted }]}>{detail}</Text>\n </View>\n {!selecting ? (\n <>\n <Pressable accessibilityRole=\"button\" onPress={onRestoreAll} hitSlop={6}>\n <Text style={[styles.link, { color: palette.primary }]}>Restore all</Text>\n </Pressable>\n <Pressable accessibilityRole=\"button\" onPress={onDeleteAll} hitSlop={6}>\n <Text style={[styles.link, { color: palette.danger }]}>Delete all</Text>\n </Pressable>\n </>\n ) : null}\n </View>\n );\n}\n\nfunction TrashRow({\n row,\n palette,\n divider,\n selecting,\n selected,\n busy,\n onToggle,\n onRestore,\n onDelete,\n onOpen,\n}: {\n row: Row;\n palette: Palette;\n divider: boolean;\n selecting: boolean;\n selected: boolean;\n busy: boolean;\n onToggle: () => void;\n onRestore: () => void;\n onDelete: () => void;\n onOpen?: () => void;\n}) {\n const { item, depth } = row;\n const when = editedLabel(item.deletedTime).replace('Edited', 'Deleted');\n const title = item.title || (row.isPage ? 'Untitled' : typeLabel(item.type));\n return (\n <Pressable\n accessibilityRole=\"button\"\n onPress={selecting ? onToggle : onOpen}\n disabled={!selecting && !onOpen}\n style={({ pressed }) => [\n styles.row,\n { paddingLeft: 14 + depth * 18 },\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n {selecting ? (\n <Ionicons\n name={selected ? 'checkbox' : 'square-outline'}\n size={22}\n color={selected ? palette.primary : palette.textMuted}\n />\n ) : null}\n <View style={[styles.rowIcon, { backgroundColor: palette.fill }]}>\n {item.icon ? (\n <Text style={styles.rowEmoji}>{item.icon}</Text>\n ) : (\n <Ionicons\n name={row.isPage ? 'document-text-outline' : 'reorder-two-outline'}\n size={17}\n color={palette.textMuted}\n />\n )}\n </View>\n <View style={[styles.rowBody, divider && ui.hairline, divider && { borderBottomColor: palette.hairline }]}>\n <View style={ui.flex}>\n <Text numberOfLines={1} style={[styles.rowTitle, { color: palette.text }]}>\n {title}\n </Text>\n <Text numberOfLines={1} style={[styles.rowMeta, { color: palette.textMuted }]}>\n {[row.isPage ? 'Page' : typeLabel(item.type), when].filter(Boolean).join(' · ')}\n </Text>\n </View>\n {busy ? <ActivityIndicator size=\"small\" color={palette.textMuted} /> : null}\n {!selecting && !busy ? (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Restore ${title}`}\n onPress={onRestore}\n hitSlop={6}\n style={[styles.pill, { backgroundColor: palette.primarySoft }]}\n >\n <Text style={[styles.pillLabel, { color: palette.primary }]}>Restore</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Delete ${title} forever`}\n onPress={onDelete}\n hitSlop={6}\n style={[styles.iconPill, { backgroundColor: palette.dangerSoft }]}\n >\n <Ionicons name=\"trash-outline\" size={16} color={palette.danger} />\n </Pressable>\n </>\n ) : null}\n </View>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n loading: { paddingVertical: 48, alignItems: 'center' },\n content: { padding: 16, paddingBottom: 96 },\n toolbar: { gap: 12, marginBottom: 4 },\n note: { fontSize: 14, lineHeight: 20 },\n searchField: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n height: 40,\n paddingHorizontal: 12,\n borderRadius: 12,\n },\n searchInput: { flex: 1, fontSize: 16, paddingVertical: 0 },\n countRow: { flexDirection: 'row', alignItems: 'center', gap: 16 },\n count: { fontSize: 14 },\n link: { fontSize: 15, fontWeight: '600' },\n selectToggle: { marginLeft: 4 },\n groupHeader: { flexDirection: 'row', alignItems: 'center', gap: 12, marginTop: 20, marginBottom: 8 },\n groupTitle: { fontSize: 17, fontWeight: '700' },\n groupDetail: { fontSize: 13, marginTop: 1 },\n groupTop: { borderTopLeftRadius: 16, borderTopRightRadius: 16 },\n groupBottom: { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 },\n row: { flexDirection: 'row', alignItems: 'center', gap: 10 },\n rowIcon: { width: 34, height: 34, borderRadius: 10, alignItems: 'center', justifyContent: 'center' },\n rowEmoji: { fontSize: 17 },\n rowBody: { flex: 1, flexDirection: 'row', alignItems: 'center', gap: 8, paddingRight: 12, paddingVertical: 12 },\n rowTitle: { fontSize: 15, fontWeight: '600' },\n rowMeta: { fontSize: 12, marginTop: 2 },\n pill: { paddingHorizontal: 10, paddingVertical: 6, borderRadius: 999 },\n pillLabel: { fontSize: 13, fontWeight: '700' },\n iconPill: { width: 32, height: 30, borderRadius: 999, alignItems: 'center', justifyContent: 'center' },\n bulkBar: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 16,\n paddingTop: 10,\n paddingBottom: 28,\n borderTopWidth: StyleSheet.hairlineWidth,\n },\n bulkCount: { fontSize: 15, fontWeight: '600' },\n bulkButton: { paddingHorizontal: 16, paddingVertical: 10, borderRadius: 12 },\n bulkLabel: { fontSize: 15, fontWeight: '700' },\n});\n"],"names":[],"mappings":"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"}