(state: UiState, threadId: string, visitedAt: string)
| 227 | const debouncedPersistState = new Debouncer(persistState, { wait: 500 }); |
| 228 | |
| 229 | export function markThreadVisited(state: UiState, threadId: string, visitedAt: string): UiState { |
| 230 | const visitedAtMs = Date.parse(visitedAt); |
| 231 | if (!Number.isFinite(visitedAtMs)) { |
| 232 | return state; |
| 233 | } |
| 234 | const previousVisitedAt = state.threadLastVisitedAtById[threadId]; |
| 235 | const previousVisitedAtMs = previousVisitedAt ? Date.parse(previousVisitedAt) : NaN; |
| 236 | if ( |
| 237 | Number.isFinite(previousVisitedAtMs) && |
| 238 | Number.isFinite(visitedAtMs) && |
| 239 | previousVisitedAtMs >= visitedAtMs |
| 240 | ) { |
| 241 | return state; |
| 242 | } |
| 243 | return { |
| 244 | ...state, |
| 245 | threadLastVisitedAtById: { |
| 246 | ...state.threadLastVisitedAtById, |
| 247 | [threadId]: visitedAt, |
| 248 | }, |
| 249 | }; |
| 250 | } |
| 251 | |
| 252 | export function markThreadUnread( |
| 253 | state: UiState, |
no outgoing calls
no test coverage detected