()
| 325 | } |
| 326 | |
| 327 | export async function toggleAnonymous() { |
| 328 | const originalDisplayName = await getDisplayName(); |
| 329 | const originalMetadata = await getMetadata(originalDisplayName); |
| 330 | const originalAvatar = await getAvatar(originalMetadata.Avatar, originalDisplayName, false); |
| 331 | const originalApplicantIds = originalMetadata.ApplicantIDs ?? []; |
| 332 | const allApplicants = await getApplicants(); |
| 333 | const applicantRecords = await Promise.all(originalApplicantIds.map((applicantId) => getRecordByApplicant(applicantId))); |
| 334 | |
| 335 | const displayName = (await apiJson(TOGGLE_NICKNAME))['name']; |
| 336 | await setDisplayName(displayName); |
| 337 | |
| 338 | await removeCacheValue(metadataCacheKey(originalDisplayName)); |
| 339 | const updatedApplicantIds = originalApplicantIds.map((applicant) => { |
| 340 | return `${displayName}@${applicant.split('@')[1]}`; |
| 341 | }); |
| 342 | const updatedMetadata = { |
| 343 | ...originalMetadata, |
| 344 | ApplicantIDs: updatedApplicantIds, |
| 345 | }; |
| 346 | await setMetadata(updatedMetadata, displayName); |
| 347 | await removeCacheValue(avatarCacheKey(originalDisplayName, originalMetadata.Avatar)); |
| 348 | |
| 349 | await setAvatar(originalAvatar, displayName, originalMetadata.Avatar); |
| 350 | |
| 351 | const originalApplicantIdSet = new Set(originalApplicantIds); |
| 352 | const updatedApplicantIdSet = new Set(updatedApplicantIds); |
| 353 | const updatedApplicants = allApplicants |
| 354 | .filter((applicant) => { |
| 355 | return originalApplicantIdSet.has(applicant.ApplicantID) || !updatedApplicantIdSet.has(applicant.ApplicantID); |
| 356 | }) |
| 357 | .map((applicant) => { |
| 358 | if (originalApplicantIdSet.has(applicant.ApplicantID)) { |
| 359 | return { |
| 360 | ...applicant, |
| 361 | ApplicantID: `${displayName}@${applicant.ApplicantID.split('@')[1]}`, |
| 362 | }; |
| 363 | } |
| 364 | return applicant; |
| 365 | }) |
| 366 | await Promise.all([ |
| 367 | setApplicants(updatedApplicants), |
| 368 | removeCacheValue('programs'), |
| 369 | ]); |
| 370 | await updateCachedRecords((records) => { |
| 371 | const updatedRecords = {...records}; |
| 372 | applicantRecords.forEach((recordGroup) => { |
| 373 | Object.entries(recordGroup).forEach(([recordId, content]) => { |
| 374 | delete updatedRecords[recordId]; |
| 375 | const ApplicantID = `${displayName}@${content.ApplicantID.split('@')[1]}`; |
| 376 | const updatedRecord = { |
| 377 | ...content, |
| 378 | ApplicantID, |
| 379 | RecordID: `${ApplicantID}|${content.ProgramID}`, |
| 380 | }; |
| 381 | updatedRecords[updatedRecord.RecordID] = updatedRecord; |
| 382 | }); |
| 383 | }); |
| 384 | return updatedRecords; |
no test coverage detected