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)}
)
}}
/>
)
}