|
1 | 1 | package me.dvyy.tasks.tasks.ui.elements.list |
2 | 2 |
|
3 | | -import androidx.compose.animation.AnimatedVisibility |
4 | 3 | import androidx.compose.foundation.ExperimentalFoundationApi |
5 | 4 | import androidx.compose.foundation.draganddrop.dragAndDropTarget |
6 | 5 | import androidx.compose.foundation.layout.* |
@@ -76,81 +75,77 @@ fun TaskList( |
76 | 75 | key = listId, |
77 | 76 | ) |
78 | 77 | val tasks = tasks.loadedOrNull() ?: return@Column |
| 78 | +// println("Loading ${listId.date} with ${tasks.size}") |
79 | 79 | val scrollState = rememberScrollState() |
80 | 80 | val scrollModifier = |
81 | 81 | if (scrollable) Modifier.verticalScroll(scrollState) |
82 | 82 | else Modifier |
83 | 83 |
|
84 | | - // Split into two lists based on filter |
85 | | -// val (shown, incompleteTasks) = tasks.partition { it.state.completed } |
86 | | - |
87 | 84 | fun String.isGroupToggle() = startsWith("--") || startsWith("==") |
88 | | - Column( |
89 | | - modifier = Modifier |
90 | | - ) { |
| 85 | + Column { |
91 | 86 | val selectedTask by viewModel.selectedTask.collectAsState() |
92 | | - val groupedTasks = mutableListOf(mutableListOf<TaskWithIDState>()) |
93 | | - tasks.forEach { task -> |
94 | | - if (task.state.text.isGroupToggle()) groupedTasks.add(mutableListOf(task)) |
95 | | - else groupedTasks.lastOrNull()?.add(task) |
96 | | - } |
| 87 | +// val groupedTasks = mutableListOf(mutableListOf<TaskWithIDState>()) |
| 88 | +// tasks.forEach { task -> |
| 89 | +// if (task.state.text.isGroupToggle()) groupedTasks.add(mutableListOf(task)) |
| 90 | +// else groupedTasks.lastOrNull()?.add(task) |
| 91 | +// } |
97 | 92 | Column(scrollModifier.padding(horizontal = 6.dp)) { |
98 | | - groupedTasks.forEachIndexed { groupIndex, tasksInGroup -> |
99 | | - var isGroupHidden by remember { mutableStateOf(tasksInGroup.firstOrNull()?.state?.completed == true) } |
100 | | - tasksInGroup.forEachIndexed { index, task -> |
101 | | - key(task.uuid) { |
102 | | - val selected = selectedTask?.taskId == task.uuid |
103 | | - val focusRequested = selected && selectedTask?.requestFocus == true |
| 93 | +// groupedTasks.forEachIndexed { groupIndex, tasksInGroup -> |
| 94 | +// var isGroupHidden by remember { mutableStateOf(tasksInGroup.firstOrNull()?.state?.completed == true) } |
| 95 | + tasks.forEachIndexed { index, task -> |
| 96 | + key(task.uuid) { |
| 97 | + val selected = selectedTask?.taskId == task.uuid |
| 98 | + val focusRequested = selected && selectedTask?.requestFocus == true |
104 | 99 | // val onChange = remember(task) { getInteractions(task) }::onTaskChanged |
105 | | - // cached task is the SSOT in this context, some things like text updates take too long to update in db |
106 | | - CachedUpdate( |
107 | | - key = task.uuid, |
108 | | - value = task.state, |
109 | | - onValueChanged = { viewModel.onTaskChanged(task.uuid, it) } |
110 | | - ) { cachedTask, setTask -> |
111 | | - val focusManager = LocalFocusManager.current |
112 | | - val keyboardOpen by keyboardAsState() |
113 | | - val isGroupToggle = index == 0 && cachedTask.text.isGroupToggle() |
| 100 | + // cached task is the SSOT in this context, some things like text updates take too long to update in db |
| 101 | + CachedUpdate( |
| 102 | + key = task.uuid, |
| 103 | + value = task.state, |
| 104 | + onValueChanged = { viewModel.onTaskChanged(task.uuid, it) } |
| 105 | + ) { cachedTask, setTask -> |
| 106 | + val focusManager = LocalFocusManager.current |
| 107 | + val keyboardOpen by keyboardAsState() |
| 108 | + val isGroupToggle = index == 0 && cachedTask.text.isGroupToggle() |
114 | 109 |
|
115 | | - LaunchedEffect(cachedTask) { |
116 | | - if (isGroupToggle) isGroupHidden = cachedTask.completed |
117 | | - } |
| 110 | +// LaunchedEffect(cachedTask) { |
| 111 | +// if (isGroupToggle) isGroupHidden = cachedTask.completed |
| 112 | +// } |
118 | 113 |
|
119 | | - LaunchedEffect(keyboardOpen) { |
120 | | - if (!keyboardOpen) { |
121 | | - focusManager.clearFocus() |
122 | | - } |
| 114 | + LaunchedEffect(keyboardOpen) { |
| 115 | + if (!keyboardOpen) { |
| 116 | + focusManager.clearFocus() |
123 | 117 | } |
| 118 | + } |
124 | 119 |
|
125 | | - val taskInteractions = remember(cachedTask) { |
126 | | - viewModel.interactionsFor(task.uuid, listId, cachedTask, setTask) |
127 | | - } |
| 120 | + val taskInteractions = remember(cachedTask) { |
| 121 | + viewModel.interactionsFor(task.uuid, listId, cachedTask, setTask) |
| 122 | + } |
128 | 123 |
|
129 | | - AnimatedVisibility(isGroupToggle || !isGroupHidden) { |
130 | | - Column { |
131 | | - ReorderableTask(key = task.uuid, reorderInteractions = reorderInteractions) { |
132 | | - Task( |
133 | | - cachedTask, |
134 | | - setTask, |
135 | | - selected, |
136 | | - taskInteractions, |
137 | | - focusRequested = focusRequested, |
138 | | - forceShowCheckbox = isGroupToggle, |
139 | | - overrideCheckboxIcon = if (isGroupToggle) AppIcons.ArrowDropDown else null, |
140 | | - overrideCheckboxCompletedIcon = if (isGroupToggle) AppIcons.ArrowDropUp else null, |
141 | | - ) |
142 | | - } |
143 | | - if (!isGroupToggle) HorizontalDivider() |
144 | | - } |
| 124 | +// AnimatedVisibility(isGroupToggle || !isGroupHidden) { |
| 125 | + Column { |
| 126 | + ReorderableTask(key = task.uuid, reorderInteractions = reorderInteractions) { |
| 127 | + Task( |
| 128 | + cachedTask, |
| 129 | + setTask, |
| 130 | + selected, |
| 131 | + taskInteractions, |
| 132 | + focusRequested = focusRequested, |
| 133 | + forceShowCheckbox = isGroupToggle, |
| 134 | + overrideCheckboxIcon = if (isGroupToggle) AppIcons.ArrowDropDown else null, |
| 135 | + overrideCheckboxCompletedIcon = if (isGroupToggle) AppIcons.ArrowDropUp else null, |
| 136 | + ) |
145 | 137 | } |
146 | | - |
147 | | - if (isGroupToggle) HorizontalDivider( |
148 | | - thickness = 2.dp, |
149 | | - color = cachedTask.highlight.color |
150 | | - .takeIf { it != Color.Transparent } |
151 | | - ?: MaterialTheme.colorScheme.onSurface |
152 | | - ) |
| 138 | + if (!isGroupToggle) HorizontalDivider() |
153 | 139 | } |
| 140 | +// } |
| 141 | + |
| 142 | + if (isGroupToggle) HorizontalDivider( |
| 143 | + thickness = 2.dp, |
| 144 | + color = cachedTask.highlight.color |
| 145 | + .takeIf { it != Color.Transparent } |
| 146 | + ?: MaterialTheme.colorScheme.onSurface |
| 147 | + ) |
| 148 | +// } |
154 | 149 | } |
155 | 150 | } |
156 | 151 | } |
|
0 commit comments