import type { ConnectionPresentationModel } from './use-mobile-tasks-connection-presentation' import { View, ActivityIndicator, colors, Text, Pressable, FlatList, spacing, ChevronDown, triggerMediumImpact, TaskProviderLogo } from './mobile-tasks-dependencies' import { styles } from './mobile-tasks-legacy-styles' import { projectGroupMeta, formatUpdatedAt, getRepoBadgeColor, projectFieldDisplayLabel, projectRowStatusLabel } from './mobile-tasks-legacy-foundation' export function renderMobileTasksGitHubProjectList(model: ConnectionPresentationModel) { const { activeGitHubProject, findProjectRowRepo, githubProjectError, githubProjectListEntries, githubProjectLoading, githubProjectRepoSlugReady, githubProjectSummaryFields, githubProjectTable, insets, refreshGitHubProject, setCollapsedGitHubProjectGroups, setProjectRowItem, setShowGitHubProjectPicker, taskUiReady, visibleGitHubProjectRows } = model return githubProjectLoading ? ( ) : !activeGitHubProject ? ( Choose a GitHub project { if (!taskUiReady) { return } setShowGitHubProjectPicker(true) }} > Browse projects ) : githubProjectError ? ( {githubProjectError} ) : githubProjectTable && !githubProjectRepoSlugReady ? ( ) : !githubProjectTable || visibleGitHubProjectRows.length === 0 ? ( No project items ) : ( (entry.type === 'group' ? `group:${entry.group.key}` : entry.row.id)} ItemSeparatorComponent={() => } contentContainerStyle={[styles.list, { paddingBottom: spacing.lg + insets.bottom }]} refreshing={githubProjectLoading} onRefresh={refreshGitHubProject} renderItem={({ item: entry }) => { if (entry.type === 'group') { return ( setCollapsedGitHubProjectGroups((current) => { const next = new Set(current) if (next.has(entry.group.key)) { next.delete(entry.group.key) } else { next.add(entry.group.key) } return next }) } > {entry.group.label || 'Items'} {projectGroupMeta(entry.group)} ) } const row = entry.row const repo = findProjectRowRepo(row) return ( [styles.taskRow, pressed && styles.taskRowPressed]} onPress={() => { triggerMediumImpact() setProjectRowItem(row) }} > {row.content.title} {formatUpdatedAt(row.updatedAt)} {row.itemType === 'PULL_REQUEST' ? 'Pull request' : row.itemType === 'ISSUE' ? 'Issue' : 'Project item'}{' '} ยท {row.content.repository ?? githubProjectTable.project.title} {row.content.number ? ` #${row.content.number}` : ''} {githubProjectSummaryFields.length > 0 ? ( {githubProjectSummaryFields.slice(0, 4).map((field) => { const value = projectFieldDisplayLabel(row, field) const isEmpty = value === 'Empty' return ( {field.name}:{' '} {value} ) })} {githubProjectSummaryFields.length > 4 ? ( +{githubProjectSummaryFields.length - 4} fields ) : null} ) : null} {projectRowStatusLabel(row)} ) }} /> ) }