(
originalTask: TaskInfo,
{
plan,
isCompletedStatus,
getTimestamp,
getCompletedDate,
}: BuildTaskListDropSideEffectTaskOptions
)
| 135 | } |
| 136 | |
| 137 | export function buildTaskListDropSideEffectTask( |
| 138 | originalTask: TaskInfo, |
| 139 | { |
| 140 | plan, |
| 141 | isCompletedStatus, |
| 142 | getTimestamp, |
| 143 | getCompletedDate, |
| 144 | }: BuildTaskListDropSideEffectTaskOptions |
| 145 | ): TaskInfo | null { |
| 146 | if (!plan.needsGroupUpdate || !plan.groupByTaskProp) { |
| 147 | return null; |
| 148 | } |
| 149 | |
| 150 | const updatedTask = { ...originalTask }; |
| 151 | const originalRecord = originalTask as unknown as Record<string, unknown>; |
| 152 | const updatedRecord = updatedTask as unknown as Record<string, unknown>; |
| 153 | const taskProperty = plan.groupByTaskProp; |
| 154 | |
| 155 | if (plan.isListGrouping) { |
| 156 | const originalValue = originalRecord[taskProperty]; |
| 157 | const currentValues = Array.isArray(originalValue) |
| 158 | ? [...originalValue] |
| 159 | : originalValue |
| 160 | ? [stringifyUnknown(originalValue)] |
| 161 | : []; |
| 162 | const nextValues = currentValues.filter((value) => value !== plan.sourceGroupKey); |
| 163 | if ( |
| 164 | plan.normalizedTargetGroupKey !== null && |
| 165 | !nextValues.includes(plan.normalizedTargetGroupKey) |
| 166 | ) { |
| 167 | nextValues.push(plan.normalizedTargetGroupKey); |
| 168 | } |
| 169 | updatedRecord[taskProperty] = nextValues; |
| 170 | } else { |
| 171 | updatedRecord[taskProperty] = plan.normalizedTargetGroupKey; |
| 172 | } |
| 173 | |
| 174 | updatedTask.dateModified = getTimestamp(); |
| 175 | |
| 176 | if (taskProperty === "status" && !originalTask.recurrence) { |
| 177 | if ( |
| 178 | plan.normalizedTargetGroupKey !== null && |
| 179 | isCompletedStatus(plan.normalizedTargetGroupKey) |
| 180 | ) { |
| 181 | updatedTask.completedDate = getCompletedDate(); |
| 182 | } else { |
| 183 | updatedTask.completedDate = undefined; |
| 184 | } |
| 185 | } |
| 186 | |
| 187 | return updatedTask; |
| 188 | } |
no test coverage detected