You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
6.1 KiB
171 lines
6.1 KiB
package org.calculate.taigamobile.ui.screens.commontask.components
|
|
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.lazy.LazyListScope
|
|
import androidx.compose.material3.Icon
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.res.painterResource
|
|
import androidx.compose.ui.res.stringResource
|
|
import androidx.compose.ui.text.SpanStyle
|
|
import androidx.compose.ui.text.style.TextDecoration
|
|
import androidx.compose.ui.unit.dp
|
|
import com.google.accompanist.flowlayout.FlowCrossAxisAlignment
|
|
import com.google.accompanist.flowlayout.FlowRow
|
|
import org.calculate.taigamobile.R
|
|
import org.calculate.taigamobile.domain.entities.CommonTaskExtended
|
|
import org.calculate.taigamobile.domain.entities.CommonTaskType
|
|
import org.calculate.taigamobile.ui.components.badges.ClickableBadge
|
|
import org.calculate.taigamobile.ui.components.pickers.ColorPicker
|
|
import org.calculate.taigamobile.ui.screens.commontask.EditActions
|
|
import org.calculate.taigamobile.ui.theme.taigaRed
|
|
import org.calculate.taigamobile.ui.utils.toColor
|
|
import org.calculate.taigamobile.ui.utils.toHex
|
|
|
|
@Suppress("FunctionName")
|
|
fun LazyListScope.CommonTaskHeader(
|
|
commonTask: CommonTaskExtended,
|
|
editActions: EditActions,
|
|
showStatusSelector: () -> Unit,
|
|
showSprintSelector: () -> Unit,
|
|
showTypeSelector: () -> Unit,
|
|
showSeveritySelector: () -> Unit,
|
|
showPrioritySelector: () -> Unit,
|
|
showSwimlaneSelector: () -> Unit
|
|
) {
|
|
val badgesPadding = 8.dp
|
|
|
|
item {
|
|
|
|
commonTask.blockedNote?.trim()?.let {
|
|
Column(
|
|
modifier = Modifier.fillMaxWidth()
|
|
.background(taigaRed, MaterialTheme.shapes.medium)
|
|
.padding(8.dp)
|
|
) {
|
|
val space = 4.dp
|
|
|
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
|
Icon(
|
|
painter = painterResource(R.drawable.ic_lock),
|
|
contentDescription = null,
|
|
tint = MaterialTheme.colorScheme.onSurface
|
|
)
|
|
|
|
Spacer(Modifier.width(space))
|
|
|
|
Text(stringResource(R.string.blocked))
|
|
}
|
|
|
|
if (it.isNotEmpty()) {
|
|
Spacer(Modifier.width(space))
|
|
|
|
Text(
|
|
text = it,
|
|
color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.8f)
|
|
)
|
|
}
|
|
}
|
|
|
|
Spacer(Modifier.height(badgesPadding))
|
|
}
|
|
|
|
FlowRow(
|
|
crossAxisAlignment = FlowCrossAxisAlignment.Center,
|
|
crossAxisSpacing = badgesPadding,
|
|
mainAxisSpacing = badgesPadding
|
|
) {
|
|
// epic color
|
|
if (commonTask.taskType == CommonTaskType.Epic) {
|
|
ColorPicker(
|
|
size = 32.dp,
|
|
color = commonTask.color.orEmpty().toColor(),
|
|
onColorPicked = { editActions.editEpicColor.select(it.toHex()) }
|
|
)
|
|
|
|
}
|
|
|
|
// status
|
|
ClickableBadge(
|
|
text = commonTask.status.name,
|
|
colorHex = commonTask.status.color,
|
|
onClick = { showStatusSelector() },
|
|
isLoading = editActions.editStatus.isLoading
|
|
)
|
|
|
|
/*// sprint
|
|
if (commonTask.taskType != CommonTaskType.Epic) {
|
|
ClickableBadge(
|
|
text = commonTask.sprint?.name ?: stringResource(R.string.no_sprint),
|
|
color = commonTask.sprint?.let { MaterialTheme.colorScheme.primary }
|
|
?: MaterialTheme.colorScheme.outline,
|
|
onClick = { showSprintSelector() },
|
|
isLoading = editActions.editSprint.isLoading,
|
|
isClickable = commonTask.taskType != CommonTaskType.Task
|
|
)
|
|
}
|
|
*/
|
|
|
|
/*// swimlane
|
|
if (commonTask.taskType == CommonTaskType.UserStory) {
|
|
ClickableBadge(
|
|
text = commonTask.swimlane?.name ?: stringResource(R.string.unclassifed),
|
|
color = commonTask.swimlane?.let { MaterialTheme.colorScheme.primary }
|
|
?: MaterialTheme.colorScheme.outline,
|
|
isLoading = editActions.editSwimlane.isLoading,
|
|
onClick = { showSwimlaneSelector() }
|
|
)
|
|
}
|
|
*/
|
|
|
|
if (commonTask.taskType == CommonTaskType.Issue) {
|
|
// type
|
|
ClickableBadge(
|
|
text = commonTask.type!!.name,
|
|
colorHex = commonTask.type.color,
|
|
onClick = { showTypeSelector() },
|
|
isLoading = editActions.editType.isLoading
|
|
)
|
|
|
|
// severity
|
|
ClickableBadge(
|
|
text = commonTask.severity!!.name,
|
|
colorHex = commonTask.severity.color,
|
|
onClick = { showSeveritySelector() },
|
|
isLoading = editActions.editSeverity.isLoading
|
|
)
|
|
|
|
// priority
|
|
ClickableBadge(
|
|
text = commonTask.priority!!.name,
|
|
colorHex = commonTask.priority.color,
|
|
onClick = { showPrioritySelector() },
|
|
isLoading = editActions.editPriority.isLoading
|
|
)
|
|
}
|
|
}
|
|
|
|
// title
|
|
Text(
|
|
text = commonTask.title,
|
|
style = MaterialTheme.typography.headlineSmall.let {
|
|
if (commonTask.isClosed) {
|
|
it.merge(
|
|
SpanStyle(
|
|
color = MaterialTheme.colorScheme.outline,
|
|
textDecoration = TextDecoration.LineThrough
|
|
)
|
|
)
|
|
} else {
|
|
it
|
|
}
|
|
}
|
|
)
|
|
|
|
Spacer(Modifier.height(4.dp))
|
|
}
|
|
}
|