Skip to content

Commit 10b8fe1

Browse files
authored
Merge pull request #32365 from FitseTLT/fix-duplicate-search-results-for-tag
fixed duplicate search result of the selected parent:child tag
2 parents 7c93bf8 + 42a600a commit 10b8fe1

5 files changed

+27
-20
lines changed

src/components/MoneyTemporaryForRefactorRequestConfirmationList.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ function MoneyTemporaryForRefactorRequestConfirmationList({
799799
{shouldShowTags && (
800800
<MenuItemWithTopDescription
801801
shouldShowRightIcon={!isReadOnly}
802-
title={iouTag}
802+
title={PolicyUtils.getCleanedTagName(iouTag)}
803803
description={policyTagListName}
804804
numberOfLinesTitle={2}
805805
onPress={() =>

src/components/ReportActionItem/MoneyRequestView.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ function MoneyRequestView({report, parentReport, parentReportActions, policyCate
350350
<OfflineWithFeedback pendingAction={lodashGet(transaction, 'pendingFields.tag') || lodashGet(transaction, 'pendingAction')}>
351351
<MenuItemWithTopDescription
352352
description={lodashGet(policyTag, 'name', translate('common.tag'))}
353-
title={transactionTag}
353+
title={PolicyUtils.getCleanedTagName(transactionTag)}
354354
interactive={canEdit}
355355
shouldShowRightIcon={canEdit}
356356
titleStyle={styles.flex1}

src/libs/ModifiedExpenseMessage.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ function getForReportAction(reportAction: ReportAction): string {
187187
const hasModifiedTag = reportActionOriginalMessage && 'oldTag' in reportActionOriginalMessage && 'tag' in reportActionOriginalMessage;
188188
if (hasModifiedTag) {
189189
buildMessageFragmentForValue(
190-
reportActionOriginalMessage?.tag ?? '',
191-
reportActionOriginalMessage?.oldTag ?? '',
190+
PolicyUtils.getCleanedTagName(reportActionOriginalMessage?.tag ?? ''),
191+
PolicyUtils.getCleanedTagName(reportActionOriginalMessage?.oldTag ?? ''),
192192
policyTagListName,
193193
true,
194194
setFragments,

src/libs/OptionsListUtils.js

+15-16
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import Navigation from './Navigation/Navigation';
1717
import Permissions from './Permissions';
1818
import * as PersonalDetailsUtils from './PersonalDetailsUtils';
1919
import * as PhoneNumber from './PhoneNumber';
20+
import * as PolicyUtils from './PolicyUtils';
2021
import * as ReportActionUtils from './ReportActionsUtils';
2122
import * as ReportUtils from './ReportUtils';
2223
import * as TaskUtils from './TaskUtils';
@@ -945,19 +946,23 @@ function getCategoryListSections(categories, recentlyUsedCategories, selectedOpt
945946
* @returns {Array<Object>}
946947
*/
947948
function getTagsOptions(tags) {
948-
return _.map(tags, (tag) => ({
949-
text: tag.name,
950-
keyForList: tag.name,
951-
searchText: tag.name,
952-
tooltipText: tag.name,
953-
isDisabled: !tag.enabled,
954-
}));
949+
return _.map(tags, (tag) => {
950+
// This is to remove unnecessary escaping backslash in tag name sent from backend.
951+
const cleanedName = PolicyUtils.getCleanedTagName(tag.name);
952+
return {
953+
text: cleanedName,
954+
keyForList: tag.name,
955+
searchText: tag.name,
956+
tooltipText: cleanedName,
957+
isDisabled: !tag.enabled,
958+
};
959+
});
955960
}
956961

957962
/**
958963
* Build the section list for tags
959964
*
960-
* @param {Object[]} rawTags
965+
* @param {Object[]} tags
961966
* @param {String} tags[].name
962967
* @param {Boolean} tags[].enabled
963968
* @param {String[]} recentlyUsedTags
@@ -967,14 +972,8 @@ function getTagsOptions(tags) {
967972
* @param {Number} maxRecentReportsToShow
968973
* @returns {Array<Object>}
969974
*/
970-
function getTagListSections(rawTags, recentlyUsedTags, selectedOptions, searchInputValue, maxRecentReportsToShow) {
975+
function getTagListSections(tags, recentlyUsedTags, selectedOptions, searchInputValue, maxRecentReportsToShow) {
971976
const tagSections = [];
972-
const tags = _.map(rawTags, (tag) => {
973-
// This is to remove unnecessary escaping backslash in tag name sent from backend.
974-
const tagName = tag.name && tag.name.replace(/\\{1,2}:/g, ':');
975-
976-
return {...tag, name: tagName};
977-
});
978977
const sortedTags = sortTags(tags);
979978
const enabledTags = _.filter(sortedTags, (tag) => tag.enabled);
980979
const numberOfTags = _.size(enabledTags);
@@ -999,7 +998,7 @@ function getTagListSections(rawTags, recentlyUsedTags, selectedOptions, searchIn
999998
}
1000999

10011000
if (!_.isEmpty(searchInputValue)) {
1002-
const searchTags = _.filter(enabledTags, (tag) => tag.name.toLowerCase().includes(searchInputValue.toLowerCase()));
1001+
const searchTags = _.filter(enabledTags, (tag) => PolicyUtils.getCleanedTagName(tag.name.toLowerCase()).includes(searchInputValue.toLowerCase()));
10031002

10041003
tagSections.push({
10051004
// "Search" section

src/libs/PolicyUtils.ts

+8
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,13 @@ function getTagList(policyTags: OnyxCollection<PolicyTags>, tagKey: string) {
195195
return policyTags?.[policyTagKey]?.tags ?? {};
196196
}
197197

198+
/**
199+
* Cleans up escaping of colons (used to create multi-level tags, e.g. "Parent: Child") in the tag name we receive from the backend
200+
*/
201+
function getCleanedTagName(tag: string) {
202+
return tag?.replace(/\\{1,2}:/g, ':');
203+
}
204+
198205
function isPendingDeletePolicy(policy: OnyxEntry<Policy>): boolean {
199206
return policy?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE;
200207
}
@@ -221,6 +228,7 @@ export {
221228
getTag,
222229
getTagListName,
223230
getTagList,
231+
getCleanedTagName,
224232
isPendingDeletePolicy,
225233
isPolicyMember,
226234
isPaidGroupPolicy,

0 commit comments

Comments
 (0)