|
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