Skip to content

Commit 1172ce3

Browse files
authored
Merge pull request #59943 from software-mansion-labs/bugfix/kuba_nowakowski/Reports-filters-Workspace-filter-is-displayed-when-account-has-no-workspace
Workspace filter is displayed when account has no workspace
2 parents 5209c95 + f09448e commit 1172ce3

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

src/libs/SearchQueryUtils.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,6 @@ function isCannedSearchQuery(queryJSON: SearchQueryJSON) {
792792
/**
793793
* A copy of `isDefaultExpensesQuery` handling the policy ID, used if you have access to the leftHandBar beta.
794794
* When this beta is no longer needed, this method will be renamed to `isDefaultExpensesQuery` and will replace the old method.
795-
*
796795
*/
797796
function isDefaultExpensesQueryWithPolicyIDCheck(queryJSON: SearchQueryJSON) {
798797
return queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE && queryJSON.status === CONST.SEARCH.STATUS.EXPENSE.ALL && !queryJSON.filters && !queryJSON.groupBy && !queryJSON.policyID;

src/pages/Search/AdvancedSearchFilters.tsx

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import usePermissions from '@hooks/usePermissions';
1616
import useSingleExecution from '@hooks/useSingleExecution';
1717
import useThemeStyles from '@hooks/useThemeStyles';
1818
import useWaitForNavigation from '@hooks/useWaitForNavigation';
19+
import type {WorkspaceListItem} from '@hooks/useWorkspaceList';
20+
import useWorkspaceList from '@hooks/useWorkspaceList';
1921
import {clearAllFilters, saveSearch} from '@libs/actions/Search';
2022
import {createCardFeedKey, getCardFeedKey, getCardFeedNamesWithType, getWorkspaceCardFeedKey} from '@libs/CardFeedUtils';
2123
import {getCardDescription, mergeCardListWithWorkspaceFeeds} from '@libs/CardUtils';
@@ -160,7 +162,7 @@ const baseFilterConfig = {
160162
*/
161163
const typeFiltersKeys: Record<string, Array<Array<ValueOf<typeof CONST.SEARCH.SYNTAX_FILTER_KEYS>>>> = {
162164
[CONST.SEARCH.DATA_TYPES.EXPENSE]: [
163-
[CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD, CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM, CONST.SEARCH.SYNTAX_FILTER_KEYS.TO],
165+
[CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD, CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM, CONST.SEARCH.SYNTAX_FILTER_KEYS.TO, CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID],
164166
[
165167
CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPENSE_TYPE,
166168
CONST.SEARCH.SYNTAX_FILTER_KEYS.MERCHANT,
@@ -231,9 +233,8 @@ const typeFiltersKeys: Record<string, Array<Array<ValueOf<typeof CONST.SEARCH.SY
231233
],
232234
};
233235

234-
function getFilterWorkspaceDisplayTitle(filters: Partial<SearchAdvancedFiltersForm>, policies: OnyxCollection<Policy>) {
235-
const workspaceFilter = filters[CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID];
236-
return policies?.[`${ONYXKEYS.COLLECTION.POLICY}${workspaceFilter}`]?.name ?? workspaceFilter;
236+
function getFilterWorkspaceDisplayTitle(filters: SearchAdvancedFiltersForm, policies: WorkspaceListItem[]) {
237+
return policies.filter((value) => value.policyID === filters.policyID).at(0)?.text;
237238
}
238239

239240
function getFilterCardDisplayTitle(filters: Partial<SearchAdvancedFiltersForm>, cards: CardList, translate: LocaleContextProps['translate']) {
@@ -433,24 +434,6 @@ function AdvancedSearchFilters() {
433434
const personalDetails = usePersonalDetails();
434435
const {canUseLeftHandBar} = usePermissions();
435436

436-
// If users have access to the leftHandBar beta, then the workspace filter is displyed in the first section of the advanced search filters
437-
const typeFiltersKeysWithOptionalPolicy = useMemo(
438-
() =>
439-
canUseLeftHandBar
440-
? Object.fromEntries(
441-
Object.entries(typeFiltersKeys).map(([key, arrays]) => {
442-
const firstFiltersSection = arrays.at(0);
443-
if (!firstFiltersSection) {
444-
return [key, arrays];
445-
}
446-
447-
const modifiedFirstFiltersSection = [...firstFiltersSection, CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID];
448-
return [key, [modifiedFirstFiltersSection, ...arrays.slice(1)]];
449-
}),
450-
)
451-
: typeFiltersKeys,
452-
[canUseLeftHandBar],
453-
);
454437
const [policies = {}] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
455438
const [allPolicyCategories = {}] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CATEGORIES, {
456439
selector: (policyCategories) =>
@@ -469,6 +452,16 @@ function AdvancedSearchFilters() {
469452
.map(getTagNamesFromTagsLists)
470453
.flat();
471454

455+
const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {selector: (session) => session?.email});
456+
457+
const {sections: workspaces} = useWorkspaceList({
458+
policies,
459+
currentUserLogin,
460+
shouldShowPendingDeletePolicy: false,
461+
selectedPolicyID: undefined,
462+
searchTerm: '',
463+
});
464+
472465
// When looking if a user has any categories to display, we want to ignore the policies that are of type PERSONAL
473466
const nonPersonalPolicyCategoryIds = Object.values(policies)
474467
.filter((policy): policy is NonNullable<Policy> => !!(policy && policy.type !== CONST.POLICY.TYPE.PERSONAL))
@@ -486,9 +479,12 @@ function AdvancedSearchFilters() {
486479
const shouldDisplayTagFilter = shouldDisplayFilter(tagListsUnpacked.length, areTagsEnabled, !!singlePolicyTagLists);
487480
const shouldDisplayCardFilter = shouldDisplayFilter(Object.keys(allCards).length, areCardsEnabled);
488481
const shouldDisplayTaxFilter = shouldDisplayFilter(Object.keys(taxRates).length, areTaxEnabled);
482+
const shouldDisplayWorkspaceFilter = useMemo(() => {
483+
return canUseLeftHandBar && workspaces.some((section) => section.data.length !== 0);
484+
}, [canUseLeftHandBar, workspaces]);
489485

490486
let currentType = searchAdvancedFilters?.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE;
491-
if (!Object.keys(typeFiltersKeysWithOptionalPolicy).includes(currentType)) {
487+
if (!Object.keys(typeFiltersKeys).includes(currentType)) {
492488
currentType = CONST.SEARCH.DATA_TYPES.EXPENSE;
493489
}
494490

@@ -520,7 +516,7 @@ function AdvancedSearchFilters() {
520516
applyFiltersAndNavigate();
521517
};
522518

523-
const filters = typeFiltersKeysWithOptionalPolicy[currentType]
519+
const filters = typeFiltersKeys[currentType]
524520
.map((section) => {
525521
return section
526522
.map((key) => {
@@ -578,7 +574,11 @@ function AdvancedSearchFilters() {
578574
} else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.REIMBURSABLE || key === CONST.SEARCH.SYNTAX_FILTER_KEYS.BILLABLE) {
579575
filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, key, translate);
580576
} else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID) {
581-
filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, policies);
577+
if (!shouldDisplayWorkspaceFilter) {
578+
return;
579+
}
580+
const workspacesData = workspaces.flatMap((value) => value.data);
581+
filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, workspacesData);
582582
}
583583
return {
584584
key,

0 commit comments

Comments
 (0)