Skip to content

Commit c69b73d

Browse files
authored
Merge pull request #60902 from Expensify/jsenyitko-better-task-checking
Add stricter filtering to task reports
2 parents ac9a1b9 + 2385ab0 commit c69b73d

File tree

1 file changed

+49
-44
lines changed

1 file changed

+49
-44
lines changed

src/libs/SearchUIUtils.ts

+49-44
Original file line numberDiff line numberDiff line change
@@ -451,52 +451,57 @@ function getAction(data: OnyxTypes.SearchResults['data'], key: string): SearchTr
451451
* Do not use directly, use only via `getSections()` facade.
452452
*/
453453
function getTaskSections(data: OnyxTypes.SearchResults['data']): TaskListItemType[] {
454-
return Object.keys(data)
455-
.filter(isReportEntry)
456-
.map((key) => {
457-
const taskItem = data[key] as SearchTask;
458-
const personalDetails = data.personalDetailsList;
459-
460-
const assignee = personalDetails?.[taskItem.managerID] ?? emptyPersonalDetails;
461-
const createdBy = personalDetails?.[taskItem.accountID] ?? emptyPersonalDetails;
462-
const formattedAssignee = formatPhoneNumber(getDisplayNameOrDefault(assignee));
463-
const formattedCreatedBy = formatPhoneNumber(getDisplayNameOrDefault(createdBy));
464-
465-
const report = getReportOrDraftReport(taskItem.reportID) ?? taskItem;
466-
const parentReport = getReportOrDraftReport(taskItem.parentReportID);
467-
468-
const doesDataContainAPastYearTransaction = shouldShowYear(data);
469-
const reportName = StringUtils.lineBreaksToSpaces(Parser.htmlToText(taskItem.reportName));
470-
const description = StringUtils.lineBreaksToSpaces(Parser.htmlToText(taskItem.description));
471-
472-
const result: TaskListItemType = {
473-
...taskItem,
474-
reportName,
475-
description,
476-
assignee,
477-
formattedAssignee,
478-
createdBy,
479-
formattedCreatedBy,
480-
keyForList: taskItem.reportID,
481-
shouldShowYear: doesDataContainAPastYearTransaction,
482-
};
483-
484-
if (parentReport && personalDetails) {
485-
const policy = getPolicy(parentReport.policyID);
486-
const parentReportName = getReportName(parentReport, policy, undefined, undefined);
487-
const icons = getIcons(parentReport, personalDetails, null, '', -1, policy);
488-
const parentReportIcon = icons?.at(0);
489-
490-
result.parentReportName = parentReportName;
491-
result.parentReportIcon = parentReportIcon;
492-
}
454+
return (
455+
Object.keys(data)
456+
.filter(isReportEntry)
457+
// Ensure that the reports that were passed are tasks, and not some other
458+
// type of report that was sent as the parent
459+
.filter((key) => isTaskListItemType(data[key] as SearchListItem))
460+
.map((key) => {
461+
const taskItem = data[key] as SearchTask;
462+
const personalDetails = data.personalDetailsList;
463+
464+
const assignee = personalDetails?.[taskItem.managerID] ?? emptyPersonalDetails;
465+
const createdBy = personalDetails?.[taskItem.accountID] ?? emptyPersonalDetails;
466+
const formattedAssignee = formatPhoneNumber(getDisplayNameOrDefault(assignee));
467+
const formattedCreatedBy = formatPhoneNumber(getDisplayNameOrDefault(createdBy));
468+
469+
const report = getReportOrDraftReport(taskItem.reportID) ?? taskItem;
470+
const parentReport = getReportOrDraftReport(taskItem.parentReportID);
471+
472+
const doesDataContainAPastYearTransaction = shouldShowYear(data);
473+
const reportName = StringUtils.lineBreaksToSpaces(Parser.htmlToText(taskItem.reportName));
474+
const description = StringUtils.lineBreaksToSpaces(Parser.htmlToText(taskItem.description));
475+
476+
const result: TaskListItemType = {
477+
...taskItem,
478+
reportName,
479+
description,
480+
assignee,
481+
formattedAssignee,
482+
createdBy,
483+
formattedCreatedBy,
484+
keyForList: taskItem.reportID,
485+
shouldShowYear: doesDataContainAPastYearTransaction,
486+
};
487+
488+
if (parentReport && personalDetails) {
489+
const policy = getPolicy(parentReport.policyID);
490+
const parentReportName = getReportName(parentReport, policy, undefined, undefined);
491+
const icons = getIcons(parentReport, personalDetails, null, '', -1, policy);
492+
const parentReportIcon = icons?.at(0);
493+
494+
result.parentReportName = parentReportName;
495+
result.parentReportIcon = parentReportIcon;
496+
}
493497

494-
if (report) {
495-
result.report = report;
496-
}
498+
if (report) {
499+
result.report = report;
500+
}
497501

498-
return result;
499-
});
502+
return result;
503+
})
504+
);
500505
}
501506

502507
/**

0 commit comments

Comments
 (0)